一、RC4
RC4(Rivest Cipher 4)是一种对称流密码算法,由Ron Rivest于1987年设计。它以其简单性和高速性而闻名,并广泛应用于网络通信和安全协议中。下面是对RC4的详细介绍:
-
密钥长度:
- RC4的密钥长度可变,通常为8至256字节之间。
- 密钥长度的选择对RC4的安全性和性能产生影响。
-
算法原理:
- RC4是一种流密码算法,它使用一个伪随机数发生器(PRNG)生成密钥流,然后将明文与密钥流进行异或运算得到密文。
- RC4算法主要包括密钥初始化和密钥流生成两个阶段。
-
密钥初始化:
- 密钥初始化阶段通过对内部状态数组进行初始化来准备生成密钥流所需的数据结构。
- 这包括将0到255的字节值填充到内部状态数组(S)中,并根据密钥的字节值进行初始的排列操作。
-
密钥流生成:
- 密钥流生成阶段利用内部状态数组(S)和两个指针(i和j)来生成伪随机的密钥流。
- 指针i和j的更新和内部状态数组的排列操作是密钥流生成的核心过程。
- 密钥流可以根据需要生成任意长度的密钥流,并与明文进行异或运算以产生密文。
-
安全性:
- RC4的安全性受到多种攻击的影响,包括密钥重用、密钥流偏置和明文相关性等。
- 长期以来,RC4已经被发现存在严重的安全漏洞,导致其在实际应用中的使用受到限制。
-
应用领域:
- RC4曾被广泛应用于诸如SSL/TLS等安全协议中的数据加密。(现在很少使用)
二、流密码
流密码是一种对称加密算法,它使用密钥流(也称为伪随机密钥流)和明文按位进行异或运算,从而生成密文。与分组密码不同,流密码以连续的比特流方式处理数据,而不是将数据分成固定大小的块。
-
密钥流生成:
- 流密码的核心是生成伪随机的密钥流,该密钥流与明文按位进行异或运算以产生密文。
- 密钥流的生成通常通过伪随机数发生器(PRNG)实现。
- PRNG接受一个密钥和一个初始向量(IV)作为输入,并生成一个长密钥流。
-
密钥流复用:
- 密钥流可以按需生成,因此可以在不同的加密操作中重复使用。
- 为了确保安全性,每个使用相同密钥流的加密操作都应使用不同的初始向量(IV)。
-
加密过程:
- 加密过程中,明文按位与密钥流进行异或运算,生成相应的密文。
- 密文的生成速度与密钥流的生成速度相同。
-
解密过程:
- 解密过程与加密过程完全相同,将密文按位与相同的密钥流进行异或运算,以恢复原始的明文。
-
安全性:
- 流密码的安全性主要依赖于密钥流的质量和密钥流复用的方式。
- 密钥流必须具有高度随机性和统计特性,以保证密文的安全性。
- 密钥流复用时,必须使用不同的初始向量(IV)来保证密钥流的唯一性。
LFSR线性反馈移位寄存器
-
结构和原理:
- LFSR通常由一个移位寄存器和一个线性反馈函数组成。
- 移位寄存器是一个包含多个存储单元的寄存器,每个存储单元存储一个比特。
- 线性反馈函数根据寄存器中的比特值计算下一个比特的值,并将其放入寄存器的最左侧。
-
工作原理:
- 初始时,LFSR的移位寄存器被初始化为一个特定的比特序列。
- 通过连续地进行移位操作和应用线性反馈函数,LFSR生成一个伪随机的比特序列。
- 每次移位时,最右侧的比特被丢弃,而通过线性反馈函数计算得到的新比特被插入到最左侧。
-
线性反馈函数:
- 线性反馈函数定义了计算下一个比特的方法,通常是通过异或运算(XOR)来实现。
- 线性反馈函数使用移位寄存器的特定比特作为输入,并根据预定义的规则计算下一个比特的值。
-
伪随机性:
- LFSR生成的序列是伪随机的,因为它们是通过确定性的移位和线性反馈函数计算得到的。
- 伪随机序列的周期性取决于移位寄存器的长度和线性反馈函数的选择。
示例:
假设我们有一个3位的LFSR,并且初始状态为"101",线性反馈函数为异或运算。
移位寄存器(初始状态): 1 0 1
生成的比特序列: 1 0 1 0 1 0 1 ...
下一步的计算过程如下:
- 移位操作: 1 0 1 -> 0 1 0
- 线性反馈函数: 0 XOR 1 XOR 0 = 1
- 插入新比特: 1 0 1 -> 1 0 1
这样,LFSR会不断重复生成比特序列"101010..."。
三、分组密码
分组密码与流密码的区别就在于有无记忆性
1. 二重DES
二重DES是一种对称分组密码算法,它是对DES算法的一种扩展。在二重DES中,明文数据经过两次DES加密来提供更高的安全性。
-
工作原理:
- 二重DES使用两个独立的DES加密步骤来加密数据。
- 首先,明文数据通过第一个DES加密成为中间密文。
- 然后,中间密文再经过第二个DES加密,生成最终的密文。
-
密钥使用:
- 二重DES使用两个密钥:K1和K2。
- 第一个DES加密使用密钥K1,第二个DES加密使用密钥K2。
- 密钥长度为56比特,与标准的DES算法相同。
-
加密过程:
- 明文数据首先通过第一个DES加密,使用密钥K1生成中间密文。
- 然后,中间密文通过第二个DES加密,使用密钥K2生成最终的密文。
明文数据 -> 第一个DES加密(K1) -> 中间密文 -> 第二个DES加密(K2) -> 密文数据
-
解密过程:
- 密文数据首先通过第二个DES解密,使用密钥K2生成中间密文。
- 然后,中间密文通过第一个DES解密,使用密钥K1生成最终的明文数据。
密文数据 -> 第二个DES解密(K2) -> 中间密文 -> 第一个DES解密(K1) -> 明文数据
-
安全性:
- 二重DES相对于单个DES提供了更高的安全性,因为它需要两个独立的密钥进行加密。
- 由于DES算法的密钥长度较短,被认为容易受到暴力破解和差分密码分析等攻击。
- 通过使用两个DES加密步骤,二重DES增加了破解的复杂性,提高了安全性。
2.ECB(电子密码本模式)
- ECB是最简单的密码模式之一,将明文划分为固定大小的数据块,然后使用相同的密钥对每个数据块进行独立的加密。
- 每个数据块使用相同的密钥和相同的加密算法进行加密,因此对于相同的明文块,总是生成相同的密文块。
- ECB模式的主要缺点是,相同的明文块会生成相同的密文块,这可能导致一些安全性问题,并且不适用于加密大量重复模式的数据。
3.CBC(密码分组链接模式)
ECB的最大特性是同一明文分组在消息中重复出现的话,产生的密文分组也相同。ECB用于长消息时可能不够安全。为了解决ECB的安全缺陷,可以让重复的明文分组产生不同的密文分组——CBC
CBC模式引入了初始化向量(IV,Initialization Vector)的概念,并将其与明文块进行异或操作,然后再进行加密。
初始向量是一个随机生成的数据块,用于第一个数据块的加密,并且每个后续数据块的加密都使用前一个密文块作为初始向量。
CBC模式通过引入数据块之间的依赖性,增加了安全性,避免了ECB模式相同明文块生成相同密文块的问题。
CBC模式,它一次对一个明文分组加密,每次加密使用同一密钥,加密算法的输入是当前明文分组和前一次密文分组的异或,因此加密算法的输入不会显示出与这次的明文分组之间的固定关系,所以重复的明文分组不会在密文中暴露出这种重复关系。
4.CFB(密码反馈模式)
CFB模式将分组密码算法(如DES或AES)转换为自反函数,可以用于加密任意长度的数据。
CFB模式将前一个密文块作为输入,通过加密算法生成密钥流,然后将其与明文进行异或操作,得到密文。
密文反馈模式允许加密算法在每个密文块之间产生不同的密钥流,因此可以对数据进行流加密。
cfb加密
cfb解密
四、IDEA
IDEA(International Data Encryption Algorithm)是一种对称分组密码算法,由Xuejia Lai和James L. Massey于1991年设计开发。它以其高度的安全性和较快的加密速度而闻名,并被广泛应用于各种领域。
密钥和分组大小:
-
- IDEA使用128位密钥和64位分组大小。
- 密钥长度为128位,但事实上,IDEA使用了128位密钥中的91位,其余位用于校验和完整性。
- 分组大小为64位,即每次加密的明文或密文数据块长度为64位。
-
加密过程:
- IDEA算法使用迭代结构,将明文数据块分为左右两个32位部分(L0和R0)。
- 加密过程包括16轮迭代,每轮中,右半部分(Ri)与轮密钥(Ki)进行一系列运算,然后与左半部分(Li)进行异或操作。
- 最后,左右半部分进行交换,得到加密后的数据块。
-
解密过程:
- 解密过程与加密过程相反,使用相同的轮密钥,但按相反的顺序应用。
- 解密过程中,右半部分(Ri)与轮密钥(Ki)进行一系列运算,然后与左半部分(Li)进行异或操作。
- 最后,左右半部分进行交换,得到解密后的数据块。
-
安全性:
- IDEA算法被广泛认为是一种安全性较高的对称分组密码算法。
- 它使用了复杂的数学运算,包括模运算、异或运算、加法运算和乘法运算,以增加密码的强度。
- IDEA的密钥长度较长,增加了破解的难度。
- 经过多年的分析和广泛的应用,IDEA算法尚未出现严重的弱点或漏洞。
IDEA加密块长度是64bits,密钥长度是128bits,是由八轮变换和半轮输出转换组合而成的。加密和解密的过程是类似的。我们看下IDEA的基本流程图:
上面图中, 蓝色圆圈是XOR异或操作,绿色框是加法模数216。红色的点是乘模216 + 1,如果输入都是0(0x0000)那么将会被转换为216,如果输入是216,那么会被转换为0(0x0000)。
八轮操作之后,中间两个值的交换抵消了最后一轮结束时的交换: