RC4,3DES,AES

RC4

RC4是 128-bit stream cipher.密钥长度可变的流加密算法簇。是由于其核心部分的S-box长度可为任意,但一般为256字节。该算法的速度可以达到DES加密的10倍左右,且具有很高级别的非线性。

原理:

1. 初始化算法(KSA)

  256长度的S-Box

  40 – 128 bits的key

  遍历i,j256次,交换 swap values of S[i] and S[j]

  密钥的主要功能是将S-box搅乱,i确保S-box的每个元素都得到处理,j保证S-box的搅乱是随机的。而不同的S-box在经过伪随机子密码生成算法的处理后可以得到不同的子密钥序列,将S-box和明文进行xor运算,得到密文,解密过程也完全相同。

  

2. 伪随机子密码生成算法(PRGA)

  i,j,S[i] and S[j] 相加,交换,相加。。。生成K。

 

DES

DES 使用一个 56 位的密钥以及附加的 8 位奇偶校验位,产生最大 64 位的分组大小。

这是一个迭代的分组密码,使用称为 Feistel 的技术,其中将加密的文本块分成两半。

使用子密钥对其中一半应用循环功能,然后将输出与另一半进行“异或”运算;

接着交换这两半,这一过程会继续下去,但最后一个循环不交换。

DES 使用 16 个循环,使用异或,置换,代换,移位操作四种基本运算。

 

1. Plaintext-64 bits

2. 首轮置换

3. 数据块被分成两个32位的半块

4. f:

  扩张:32位扩展到48

  与key混合

  块被分成8个6位的块,然后使用“S盒”,或称“置换盒”进行处理。8个S盒的每一个都使用以查找表方式提供的非线性的变换将它的6个输入位变成4个输出位。

  置换:S盒的32个输出位利用固定的置换,“P置换”进行重组。这个设计是为了将每个S盒的4位输出在下一回次的扩张后,使用4个不同的S盒进行处理。

  

RC4,3DES,AES

5. 密钥调度—产生子密钥的算法。首先,使用选择置换1(PC-1)从64位输入密钥中选出56位的密钥—剩下的8位要么直接丢弃,要么作为奇偶校验位。然后,56位分成两个28位的半密钥;每个半密钥接下来都被分别处理。在接下来的回次中,两个半密钥都被左移1或2位(由回次数决定),然后通过选择置换2(PC-2)产生48位的子密钥—每个半密钥24位。移位(图中由<<标示)表明每个子密钥中使用了不同的位,每个位大致在16个子密钥中的14个出现。

解密过程中,除了子密钥输出的顺序相反外,密钥调度的过程与加密完全相同。

RC4,3DES,AES

 

RC4,3DES,AES

 

攻击 DES 的主要形式被称为蛮力的或彻底密钥搜索,即重复尝试各种密钥直到有一个符合为止。如果 DES 使用 56 位的密钥,则可能的密钥数量是 2 的 56 次方个。

 

 

3DES

它相当于是对每个数据块应用三次DES加密算法。它使用3条56位的密钥对数据进行三次加密。

 

原理:

3DES使用“密钥包”,其包含3个DES密钥,K1,K2和K3,均为56位(除去奇偶校验位)。加密算法为:

密文 = E K3(D K2(E K1(平文)))

也就是说,使用K1为密钥进行DES加密,再用K2为密钥进行DES“解密”,最后以K3进行DES加密。

而解密则为其反过程:

平文 = D K1(E K2(D K3(密文)))

即以K3解密,以K2“加密”,最后以K1解密。

每次加密操作都只处理64位数据,称为一块。

无论是加密还是解密,中间一步都是前后两步的逆。这种做法提高了使用密钥选项2时的算法强度,并在使用密钥选项3时与DES兼容

K1、K2、K3决定了算法的安全性,若三个密钥互不相同,本质上就相当于用一个长为168位的密钥进行加密。多年来,它在对付强力攻击时是比较安全的。若数据对安全性要求不那么高,K1可以等于K3。在这种情况下,密钥的有效长度为112位。

 

AES

AES加密過程是在一個4×4的位元組矩陣上運作,這個矩陣又称为「体(state)」,其初值就是一個明文區塊(矩陣中一個元素大小就是明文區塊中的一個Byte)。(Rijndael加密法因支援更大的區塊,其矩陣行數可視情況增加)加密时,各轮AES加密迴圈(除最后一轮外)均包含4个步骤:

  1. AddRoundKey — 矩陣中的每一个位元組都与該次回合金鑰(round key)做XOR運算;每个子密钥由密钥生成方案产生。
  2. SubBytes — 透過一个非线性的替換函數,用查找表的方式把每个字節替換成對應的字節。
  3. ShiftRows — 將矩陣中的每個橫列進行循環式移位。
  4. MixColumns — 為了充分混合矩陣中各個直行的操作。這個步驟使用線性轉換來混合每行內的四個字节。

最後一個加密迴圈中省略MixColumns步驟,而以另一個AddRoundKey取代。

AddRoundKey 步驟中,將每個狀態中的位元組與該回合金鑰做 异或(⊕)。
 
SubBytes步骤中,矩陣中各字节被固定的8位查找表中对应的特定字节所替换, Sbij =  S(aij).
 
ShiftRows 步驟中,矩陣中每一行的各個位元組循環向左方位移。位移量則隨著行數遞增而遞增。
 
在  MixColumns 步驟中,每個直行都在modulo  之下,和一個固定多項式 c(x) 作乘法。

 

AES算法基于排列和置换运算。排列是对数据重新进行安排,置换是将一个数据单元替换为另一个。AES使用几种不同的方法来执行排列和置换运算。AES 是一个迭代的、对称密钥分组的密码,它可以使用128、192和256位密钥,并且用128位(16字节)分组加密和解密数据。与公共密钥加密使用密钥对不同,对称密钥密码使用相同的密钥加密和解密数据。通过分组密码返回的加密数据的位数与输入数据相同。迭代加密使用一个循环结构,在该循环中重复置换和替换输入数据。

 

 

 

你可能感兴趣的:(3des)