loading...
浅谈对称密码
Published in:2021-07-29 | category: 密码学 对称密码

序列密码与分组密码

序列密码:序列密码单独加密每个位。它是通过将密钥序列中的每个位与每个明文位相加实现的。同步序列密码的密码序列仅仅取决于密钥,而异步序列密码的密钥序列则取决于密钥和密文。如果图2-3中的虚线出现了,则说明该序列密码是异步序列密码。绝大多数实际中使用的序列密码都是同步序列密码。

分组密码:分组密码每次使用相同的密钥加密整个明文位分组。这意味着对给定分组内任何明文位的加密都依赖于与它同在一个分组内的其他所有的明文位。实际中,绝大多数分组密码的分组长度要么是128位(16字节),比如高级加密标准(AES),要么是64位(8字节),比如数据加密标准(DES)或三重DES(3DES)算法。

序列密码与分组密码之间的区别:

(1)现实生活中分组密码的使用比序列密码更为广泛,尤其是在Intermet上计算机之间的通信加密中。

(2)由于序列密码小而快,所以它们非常合适计算资源有限的应用,比如手机或其他小型的嵌入式设备。序列密码的一一个典型示例就是A5/1密码,它是GSM手机标准的一部分,常用于语音加密。但是,序列密码有时也可用于加密Intemet流量,尤其是分组密码RC4。

(3)人们认为序列密码比分组密码要更高效。软件优化的序列密码的高效率意味着加密明文中的1位需要的处理器指令(或处理器周期)更少。对硬件优化的序列密码而言,高效率意味着在相同加密数据率的情况下,序列密码比分组密码需要的门更少(或更小的芯片区域)。然而,诸如AES的现代分组密码在软件实现上也非常有效。此外,有一些分组密码在硬件实现上也非常高效,比如PRESENT,它的效率与极紧凑型分组密码相当。

序列密码的加密与解密

序列密码是单独地加密每个明文位。现在的问题是:如何加密每个单独的位?答案也非常简单:将每个位Xi与一个密钥序列位si相加再使用模数2执行运算

明文、密文和密钥序列都是由单独的位组成,即Xi,Yi,Si∈{0,1}。

加密:

解密:

由于加密函数和解密函数都是非常简单的加法模2运算,图2-4 显示了分组密码的基本操作。注意:图中带加号的环表示模2加法。

在加密和解密公式中,关于序列密码加密和解密函数有三点需要说明:

(1) 加密和解密使用相同的函数!

2)为什么可使用简单的模2加法来进行加密呢?

(3) 密钥序列位si的本质是什么?

下面关于这三点的讨论有助于理解一些重要的分组密码属性。

1.为什么加密和解密使用相同的函数?

我们必须证明解密函数的确可以再次得到名明文位xi。我们已知密文位yi是通过加密函数计算得到的,将这个加密表达式插入到解密函数中可得:

这里的巧妙之处在于:表达式(2 si mod 2)的值总是0,因为2 ≡ 0 mod 2。对此的另一种理解方式为:si的值为0,此时2 si = 2 0 ≡ 0 mod 2;或者si = 1,此时2 si = 2 * 1 = 2 ≡ 0 mod 2。

2.为什么模2加法会是一个很好的加密函数?

在执行模2算术运算时,得到的结果只可能是0和1(因为任何数除以2得到的余数只可能是0和1)。因此,我们可以将模2的算术运算看做是布尔函数,比如与门(AND)、或门(OR)、与非门(NAND)等。下面将介绍模2加法的真值表:

这部分内容看起来应该比较熟悉:这是异或OR(或XOR)门的直值表。非常重要的一个事实是: 模2加法与XOR运算是等价的。异或运算在现代密码些中具有非常重要的作用。

现在的问题是,和与操作等相比,XOR操作为什么会如此有用呢?假设我们想加密文位xi=0。通过查看真值表发现,我们一直停留在真值表的前两列, 要么在第一列,要么在第二列,如表2-1 所示。

取决于密钥位,密文yi要么是0(si=0)要么是1(si=1)。如果密钥位Si完全是随机的,即Si的值是不可预测的,值为0和1的概率完全相等,则密文为0和1的概率也完全相同。同样地,如果我们加密的是明文位xi=1,则将停留在真值表的第3或4行。此外,密文的值为1或0的概率都是50%,这也取决于密钥序列位Si的值。

值得注意的是,XOR函数是完全均衡的,即仅观察输出值,输入位的值为0和1的概率均为50%。这一点是XOR门与其他布尔函数(比如OR门、AND或NAND门)完全不同的地方。此外,AND和NAND门不是可逆的。下面来看一个序列密码加密的简单例子。

示例2.1 Alice 想加密字母A,其中A以ASCII码表示。A的ASCII值为65 = 1000001,进一步假设密钥序列的开头位为(s0, …, s6)=0101100。

这个例子中Alice的加密操作为:将大写字母A转换为小写字时在信道上进行窃听的攻击者Oscar只看到了密文字母m。Bob将使用相同的密钥序列对此密文m进行解密,重现明文A。

可以发现,序列密码看上去非常简单:发送者简单地接收明文,使用密钥执行XOR运算即可得到密文。接收方Bob也执行相同的操作。剩下的“唯一”需要讨论的就是上面提到的最后一个问题。

3.密钥序列的本质究竟是什么?

事实证明,值si的生成(也称为密钢序列)是序列密码安全性的核心问题。实际上,序列密码的安全性完全取决于密钥序列。密钥序列位si,本身不是密钥位。所以,我们如何得到密钥序列呢?生成密钥序列其实就是序列密码的关键所在。大家可能已经猜测到,密钥序列位的核心要求就是对攻击者而言它必须看上去是随机的。否则,攻击者Oscar就可以猜测到该密钥序列位,进而能自行解密。

Prev:
BUUCTF-Crypto系列[33-48]WP
Next:
BUUCTF-Crypto系列[17-32]WP
catalog
catalog