密码学:如何使用非对称密钥算法来交换共享私钥

描述

介绍

在我们的密码学系列教程的最后两期中,我们介绍了密码学的基本概念和两种基本类型。本节讨论最常见的加密算法的具体实现细节,从基本的 XOR 函数开始,然后进入当今使用的更复杂的对称和非对称算法。本文最后回顾了如何使用非对称密钥算法来交换共享私钥。这使得可以使用更快的对称密钥算法来交换批量加密的数据,而无需开发复杂的密钥交换系统。

异或函数:至关重要的逻辑运算

XOR(异或)是一种重要的逻辑操作,在许多(如果不是全部)加密算法中以各种方式使用。图 1 显示了此函数的工作原理。在深入研究算法之前,您需要了解此函数。

函数

图1.此图显示了 XOR 函数的工作原理。

独占或(XOR) – 可逆(即无损)加密的基本要素

由于 XOR 的属性,其中一个输入可以用作进入另一个输入的数据的键。例如,如果 A 是加密密钥的单个位,则具有来自 B 的数据位的 XOR 在 A 为 1 时翻转该位。这可以通过再次使用密钥对加密结果进行按位 XOR 来逆转。

让我们看一个例子:

我们的目标是使用“秘密”这个词,使用XOR使用密钥对其进行加密,然后使用相同的密钥和XOR函数对其进行解密。这些是步骤:

选择一个密钥。我们将选择字母“k”作为我们的键。

使用 ASCII(美国信息交换标准代码)字符编码标准将字母“k”转换为二进制。其结果是 :01101011

将单词“机密”转换为二进制。其结果是 :01010011 01100101 01100011 01110010 01100101 01110100

XOR “秘密”中的每个字母,其中“k”是关键字母。这为我们提供了加密值。

 

 

S e c r e t
01010011 01100101 01100011 01110010 01100101 01110100

 

XOR “密钥”:01101011 01101011 01101011 01101011 01101011 01101011
加密值:00111000 00001110 00001000 00011001 00001110 00011111

现在要解密加密值,我们使用密钥字母“k”对其进行 XOR 运算。这一步让我们恢复了原来的“秘密”字。

加密值:00111000 00001110 00001000 00011001 00001110 00011111
XOR “密钥”:01101011 01101011 01101011 01101011 01101011 01101011

 

 

解密值: 01010011 01100101 01100011 01110010 01100101 01110100
  S e c r e t

 

SHA(安全哈希算法)

SHA 函数背后的基本思想是获取可变大小的数据并将其压缩为固定大小的位字符串输出。这个概念称为哈希。SHA 函数是一系列哈希算法,通过 NIST(美国国家标准与技术研究院)的监督随着时间的推移而开发。SHA-3功能是最新的。

图 2 显示了安全哈希生成的基本概念。

函数

图2.此图显示了安全哈希生成的基本概念。

SHA 函数具有以下特征:

可变输入长度。

固定输出长度。

单向功能。在图 2 中,除了尝试每个可能的输入文本之外,不可能使用生成的哈希值来重新生成输入文本。对于足够大的输入,这在计算上变得不可能。

如果将相同的输入消息馈送到 SHA 函数,它将始终生成相同的结果哈希。

使用两个不同的输入值无法生成相同的哈希值。这称为“防撞性”。

输入值的微小变化,即使是单个位,也会完全改变生成的哈希值。这就是所谓的“雪崩效应”。

如果哈希函数满足上述所有条件,则将其视为强哈希函数。

目前使用的一些 SHA 函数包括:

SHA-1

SHA-2

SHA-3

现在让我们探讨一下 SHA 函数的工作原理,重点是 SHA-2 和 SHA-3。SHA-1正在逐步淘汰,不建议用于任何新设计。

SHA-2的来龙去脉

SHA-2 函数根据输出位长度有四种主要类型:

SHA-224 – 哈希长度为 224 位。

SHA-256 – 哈希长度为 256 位。

SHA-384 – 哈希长度为 384 位。

SHA-512 – 哈希长度为 512 位。

让我们以 SHA-256 为例。图 3 显示了 SHA-256 发动机的框图。

函数

图3.此图显示了用于安全哈希生成的 SHA-256 函数的框图。

安全哈希生成:SHA-256 功能

首先填充输入消息,以确保它完全适合“n”个 512 位块。然后,第一个 512 位块与初始 256 位哈希值一起输入压缩函数。压缩函数基本上将消息洗牌 64 次,然后将其压缩到 256 位并将其发送到下一个压缩块或作为最终哈希发送出去。因此,变量输入消息会被多次打乱,以防止它被用来获取原始消息。完成此操作后,将生成输出哈希。

SHA-3 的工作原理

SHA-3 函数没有预定义的输出长度。输入和输出长度也没有最大值。但为了与 SHA-2 进行比较,让我们根据输出位长度定义四种主要类型。这些是:

SHA3-224 – 哈希长度为 224 位。

SHA3-256 – 哈希长度为 256 位。

SHA3-384 – 哈希长度为 384 位。

SHA3-512 – 哈希长度为 512 位。

让我们以 SHA3-256 为例。SHA-3使用Keccak海绵功能。就像海绵一样,第一步吸收或吸收输入信息。在下一阶段,输出哈希被挤出。图 4 是 SHA3-256 函数的框图。

函数

图4.此图显示了用于安全哈希生成的 SHA3-256 函数的框图。

安全哈希生成:SHA3-256 函数

图 4 中的迭代函数接收 1600 位数据,然后使用特定算法对其进行 24 轮排列,然后将其作为 1600 位块传递到下一阶段。这种情况一直持续到吸收阶段完成。

吸收阶段完成后,最后一个 1600 位块将传递到压缩阶段。在这种情况下,由于 SHA3-256 输出哈希长度小于 1088 位,因此压缩阶段不需要任何迭代函数。我们从最后阶段获取前 256 位,这就是输出哈希。

例如,如果所需的哈希长度为 2500 位,我们将需要迭代函数的三个实例才能获得所需的长度哈希。

AES(高级加密标准)

与 DES(数据加密标准)和 3DES(三重数据加密标准)等旧加密算法一样,AES 算法的目的是以可逆方式根据输入键的值对输入数据进行加扰和替换。结果称为密文。AES算法旨在取代前几十年开发的DES和3DES算法,这些算法容易受到攻击。AES 算法的说明如图 5 所示。

函数

图5.此图概述了 AES 算法。

AES 算法

AES 算法是一种固定宽度的加密算法。因此,首先填充输入消息,以确保它完全适合“n”个 128 位块。

每个 128 位块与加密密钥一起输入加密算法。根据加密密钥中的位数,AES 算法执行一定数量的回合来掩盖输入块位。这种模糊是通过打乱数据位、获取部分数据并用查找表(如解码器轮)中的值替换它们来实现的,然后执行 XOR 操作以根据从输入加密密钥生成的一组“圆形密钥”中的位值将位从 0 翻转为 1。轮次密钥用于其中一个模糊轮次,并通过复制位并将副本插入其他位来“扩展”加密密钥的一部分来创建。

AES解密功能只是使用相同的加密密钥执行与加密功能中的操作相反的操作,以便对原始输入块数据进行解密。

3DES(三重数据加密标准)

三重 DES(或 3DES)算法背后的基本思想是根据输入键的值以可逆的方式对输入数据进行加扰和替换。结果称为密文。3DES 算法是 1970 年代开发的原始 DES(数据加密标准)算法的重演。当 DES 在 1990 年代遭到入侵时,对更安全算法的需求是显而易见的。3DES成为单个DES问题的近期解决方案。为了理解 3DES,图 6 首先显示了原始 DES 的描述。

函数

图6.此图概述了 DES 算法。

DES(数据加密标准)算法

DES 算法是一种固定宽度的加密算法。因此,首先填充输入消息,以确保它完全适合“n”个 64 位块。

每个 64 位块与 56 位加密密钥一起输入加密算法(该算法的大多数版本采用 64 位密钥,但忽略 8 位)。加密功能使用输入密钥生成 16 个“子密钥”,每个子密钥用于 16 轮遮盖输入块位。这种模糊是通过打乱数据位、获取部分数据并用查找表(如解码器轮)中的值替换它们来实现的,然后执行 XOR 操作以根据子键中的位值将位从 0 翻转到 1。

DES 解密函数只是使用相同的加密密钥执行与加密函数中的操作相反的操作,以解密原始输入块数据。

3DES 如何工作?

从 DES 导出三重 DES 算法

在 DES 被证明容易受到比“暴力攻击”(循环遍历每个可能的密钥值直到显示原始消息块)短的攻击后,开发了一种有效增加加密密钥大小的简单方法。图 7 描述了 3DES 解决方案。

函数

图7.此图显示了如何使用三个 DES 操作来创建 3DES 算法。

3DES 算法实际上是 3 个 DES 操作。第一个和最后一个操作是加密操作,而中间操作是解密操作。请务必注意,“加密”和“解密”只是分配给彼此相反的加扰操作的名称。

对于在 3DES 中执行的每个 DES 操作,该操作都使用专用密钥。通常,第一个和第三个操作的键是相同的。对第一个和第三个操作使用相同的密钥,对中间操作使用不同的密钥,有效地使总密钥长度加倍,这使得暴力攻击更加困难,并消除了单个 DES 的漏洞。

RSA 公钥密码系统

RSA以其创建者Ron Rivest,Adi Shamir和Leonard Adleman的名字命名,是最早的非对称公钥加密/解密系统之一。它使用素数的模块化算法的属性来生成可用于加密的公钥和可用于解密的私钥。加密和解密操作也基于模块化算法。RSA 的概述如图 8 所示。

函数

图8.此图显示了 RSA 加密的概述。

密钥生成和加密/解密操作称为单向或“陷门”函数。它们是在一个方向上计算相对简单的数学运算,但在另一个方向上很难计算。例如,计算乘以 2 很容易,但计算 x 的平方根更难。

在 RSA 的情况下,两个大的素数相乘以创建公钥和私钥的一部分。乘法很容易;回去发现秘密素数是很困难的。

使用公钥加密消息也比尝试反向获取没有私钥的消息要容易得多。但是,私钥也可以轻松解锁消息,因此绝不能共享。

私钥可以被视为打开一个活板门,揭示了绕过试图破解加密消息的复杂迷宫的捷径。

RSA 安全性依赖于大型质数和复杂的操作。对于大多数计算系统来说,即使是通过其带有大钥匙的陷门功能的简单路径也很麻烦。因此,RSA 通常用作发送共享加密密钥的工具,这些密钥可用于更快的对称算法,如 DES、3DES 和 AES,用于单个事务。

ECDSA 算法

椭圆曲线数字签名算法 (ECDSA) 允许通信中的参与者通过基于称为私钥的隐藏信息为输入消息生成数字签名来证明真实性。此密钥用于生成公钥,其他人使用该公钥来验证参与者的真实性。

数字签名是使用输入消息、私钥和随机数生成的。然后,可以使用公钥来验证签名者(或参与者)是否拥有相应的私钥,因此是否真实。图 9 说明了此概念。

函数

图9.ECDSA(椭圆曲线数字签名算法)有助于验证数字签名。

数字签名算法最初是用模算术引入的,它依赖于大素数和需要大量使用计算能力的计算。椭圆曲线密码学的引入利用椭圆函数的数学特性在不牺牲安全性的情况下简化数学。

密钥生成和签名操作称为单向或“陷门”函数。它们是椭圆曲线计算,在一个方向上计算相对简单,但在另一个方向上计算起来却很困难。私钥可以被视为打开一个活板门,揭示了绕过试图破坏密钥生成或签名操作的复杂迷宫的捷径。

ECDSA 允许一方签署来自任何一方的消息。但是,为了证明 ECDSA 的真实性,签名者不得预先知道要签名的消息。由于缺乏对消息的控制,通信中的另一个参与者可以用新信息“挑战”签名者,以证明拥有私钥。

ECDH密钥交换协议

椭圆曲线Diffie-Hellman(ECDH)密钥交换允许双方建立一个共享密钥,以便仅与一条称为私钥的隐藏信息进行通信。如果没有相关方之一的私钥,窃听者就无法轻松确定共享密钥。但是,该算法允许将一方的私钥和另一方的公钥组合在一起,以生成对双方都相同的结果密钥。图 10 说明了此概念。

函数

图 10.ECDH密钥交换允许双方建立共享密钥以进行通信。

ECDH密钥交换

Diffie-Hellman密钥交换首先是用模算术引入的,它依赖于大素数和需要大量使用计算能力的计算。椭圆曲线密码学的引入利用椭圆函数的数学特性在不牺牲安全性的情况下简化数学。

密钥生成和组合密钥操作称为 1 路或“陷门”函数。它们是椭圆曲线计算,在一个方向上计算相对简单,但在另一个方向上计算起来却很困难。私钥可以被视为打开一个活板门,揭示了绕过试图破坏密钥生成或组合操作的复杂迷宫的捷径。

ECDH算法允许双方一起建立密钥,但它不能保证任何一方都是可信的。为此,需要额外的身份验证层。例如,如果为公钥提供了证书,例如使用来自受信任密钥持有者的私钥计算的 ECDSA(椭圆曲线数字签名算法)签名,则通过使用受信任持有者的公钥对证书进行身份验证来验证公钥的认证。

通过使用公钥和来自受信任机构的证书,ECDH的参与者可以确定他们的对应方是真实的参与者。关注我们的密码学教程系列中的其他部分,以继续加深您对这种重要安全技术的理解。

审核编辑:郭婷

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分