1. 对称加密、流加密和块加密
1.1 对称加密
对称加密(也称为密钥加密)是一种加密方式,其中加密和解密使用相同的密钥。这种加密方法基于二进制层面的操作,如XOR(异或)、SHIFT(位移)、替代和置换等。对称加密系统相对较快。接下来,我们将介绍对称加密的两个主要类别:流加密和块加密。
1.2 流加密
流加密是一种加密方式,其中每个明文字符按时间变化进行转换,通常是通过与伪随机数生成器产生的符号进行XOR操作来实现。这种方法的关键在于使用专门为加密应用设计的伪随机数生成器。流加密的例子包括Vernam密码(一次一密)、A5、RC4、E0等。在这些系统中,每个明文字符 mi 与一个伪随机字符 si 进行XOR运算以生成密文字符 ci 。即 ci = mi + si ,这里的加号表示XOR操作。
1.3 块加密
与流加密不同,块加密将明文分割成固定大小的块,然后对每个块使用时间不变的转换进行加密。这种方式需要将明文分成一系列的块,每个块具有固定的长度,然后使用密钥对这些块进行加密。当处理的数据不足以填充完整的块时,通常需要进行填充。块加密的常见例子包括DES、3-DES、IDEA、RC5、AES等。
总结来说,对称加密包括流加密和块加密两种主要形式,它们都在二进制层面上进行操作,包括XOR、位移、替换和置换等。流加密在时间上变化地对每个字符进行转换,而块加密则将数据分成固定大小的块进行处理。对称加密由于其加密和解密速度快、实现简单等优点,在许多加密场景中被广泛使用。
2. 流加密
对称加密中的流加密是一种加密方法,它对每个明文字符进行变化加密,这种变化随时间不同而不同。最常见的操作是将明文字符与一个伪随机生成器产生的符号进行XOR(异或)操作。具体来说,加密过程中,每个明文字符`mi`与一个伪随机符号`zi`进行XOR操作以生成密文字符`ci`,即`ci = mi + zi`;而在解密过程中,将密文字符`ci`与相同的伪随机符号`zi`进行XOR操作以还原明文字符`mi`,即`mi = ci + zi`。在这里,“+”表示XOR操作。
2.1 伪随机数生成器(GPA)
流加密的核心部分是伪随机数生成器(GPA)。这是一种自动机,它能够从有限数量的符号(称为种子或"seed")产生一个看似无限且随机的序列。为了适应加密应用,这种生成器需要满足特定的要求,特别是要避免那些可能被利用来破解密码的线性特性。
伪随机数生成器在加密中的作用非常重要,因为它决定了加密强度。如果生成器的输出可以预测或存在规律,那么加密就容易被破解。因此,为了安全,伪随机数生成器必须能够产生高度随机的输出,且其输出序列不应有任何可被利用的规律或重复模式。
总的来说,流加密通过将每个明文字符与一个伪随机序列中的对应字符进行XOR操作来加密信息,这一过程依赖于强大且不可预测的伪随机数生成器。流加密的安全性在很大程度上取决于这种生成器的随机性和不可预测性。
2.1.1 伪随机数生成器(GPA)的特点
伪随机数生成器(GPA)是一种有限状态自动机,它的特点可以总结如下:
状态空间Q:通常由n位组成的二进制数表示,例如Q={0, 1}^n,这里n代表自动机的状态位数。
状态转换函数Φ:这是一个将自动机从当前状态qt转换到下一个状态qt+1的函数,即qt+1 = Φ(qt),其中qt ∈ Q是离散时刻t的状态。
输出函数f:这是一个将每个状态映射到输出符号集合Σ中某个符号的函数,即zt = f(qt),这里的zt是时刻t的输出符号。
2.2 线性反馈移位寄存器(LFSR)
伪随机数生成器(GPA)一个典型的例子是线性反馈移位寄存器(LFSR)。LFSR通过将寄存器中的位逐个移位,同时根据反馈函数计算并输入新的位来生成位序列。反馈函数是线性的,通常是通过在特定的点上进行XOR操作来实现的。这些特定的点称为抽头(tap)。
下图是一个线性反馈移位寄存器(LFSR),它是一种用于生成伪随机二进制序列的装置。
2.2.1 LFSR包含的元素
a. 一系列的D触发器(D Flip-Flops),它们用来保存当前的状态位。
b. 每个D触发器的输出连接到下一个D触发器的输入,形成一个链条。
c. 最后一个D触发器的输出通过一些逻辑运算(通常是XOR操作),再反馈到第一个D触发器的输入。
d. ak、ak-1、`ak-2`和`ak-3`表示的是当前LFSR中的状态位,而加号表示的是XOR操作,这种线性结构正是LFSR的名称由来。
在这个系统中,输出位(即寄存器中的最右边一位)会根据反馈函数影响下一个状态,通常通过将一组位进行XOR操作来计算。在图中,这个过程通过反馈路径和XOR门(标记为“+”)实现。每个D盒子代表一个寄存器位,它存储了一个位状态,并将其传递到下一个盒子,实现了位的移动。
2.2.2 线性反馈移位寄存器(LFSR)的基本原理
LFSR生成的序列在数学上是线性的,这意味着通过观察足够长的输出序列,可以推断出生成序列的规则,并预测未来的输出。因此,尽管LFSR很高效,也容易实现,但是如果直接用于流加密,它的线性特性会使得加密系统容易被破解。
在密码学中,为了强化LFSR生成的序列的随机性和不可预测性,通常会采取非线性变换的措施,例如将多个LFSR结合,或者在LFSR的基础上引入非线性函数,从而制造出适用于流加密的伪随机数生成器。
由于其线性结构,LFSR本身并不适合用于流加密。这是因为如果攻击者可以观察到足够的输出位,就可能通过解线性方程来预测之后的输出,这样就破坏了生成器的伪随机性。为了在加密应用中使用,LFSR通常会被结合非线性元素或者与其他LFSR串联使用来增加其输出序列的随机性和不可预测性。
2.2.3 线性递推关系
线性反馈移位寄存器(LFSR)是一个在硬件和软件中广泛使用的结构,用于生成重复模式的序列,这些序列在某些情况下可视为伪随机的。LFSR 利用线性递推关系来产生二进制序列。
在数学上,这个线性递推关系可以表示为:
其中:
是在时间步
产生的位。
是反馈抽头的数量,它决定了递推关系的“记忆”长度。
是反馈抽头的系数,决定了对应位置的位如何影响反馈。
在这种结构中,每个新位的值是由前 个位按照一定规则进行线性组合得到的。这个规则是通过选择特定的位(即抽头)并将它们进行XOR运算来实现的。
在这个例子中,表示使用三个反馈抽头,且系数
意味着第一个和第三个位将会被用来计算新的位,而第二个位则不会被使用。
对于LFSR,如果抽头系数被恰当选择,那么寄存器状态
将会周期性地遍历
个可能的非零状态,因为状态“全零”是一个陷阱状态(一旦进入这个状态,寄存器就会永远保持零)。这意味着序列
将会有一个周期
,如果
是LFSR的位数。这样的序列在密码学和通信系统中非常有用,但它们由于线性的性质而不适用于所有类型的加密需求,因为它们相对较容易被预测和攻击。因此,它们经常被用作随机数生成的一个部分,或者通过某种方式被改进以增加非线性,以便用于加密。
2.2.4 通过线性递归关系生成二进制序列
是的,LFSR(线性反馈移位寄存器)通过线性递归关系生成二进制序列。在给定的例子中,对于所有的,有:
其中m = 3,抽头系数。这意味着每个新的位
是通过取特定的前几个位(在这个例子中是
和
)的XOR来生成的。
由于LFSR的线性特性,可以使用Berlekamp-Massey算法来分析输出序列,并且仅需LFSR序列的一个周期就能计算出LFSR的初始状态和抽头系数。这种算法非常有效,因为它只需要一个与LFSR状态位数相同长度的输出序列。
LFSR由于其线性特性,如果直接用于加密,那么在已知明文和密文的情况下,可以使用Berlekamp-Massey算法恢复出密钥流。这意味着LFSR序列可以被预测,因此,它本身并不适合直接用于加密应用。在密码学中,通常需要在LFSR的基础上增加额外的非线性复杂性,或者将它与其他算法结合使用来增强其安全性,以抵御这种类型的已知明文攻击。
2.3 同步与异步流加密
流加密有两种类型:同步和异步。
2.3.1 同步流加密
在同步流加密中,加密数据流与密钥流是独立的,加密过程的安全性高度依赖于伪随机数生成器(GPA)产生密钥流的质量。以下是同步流加密初始化和加密过程的解释: