📖 前言:20世纪70年代以前,密码学的大部分都是政府的安全范畴。直到70年代发生的两件事将密码学带入公众领域,并正式拉开了现代密码学的帷幕。这两件事就是公开的标准加密系统诞生与公钥加密算法的发明.
🕒 0. 思维导图
🕒 1. 传统分组密码结构
🕘 1.1 流密码与分组密码
🕤 1.1.1 流密码
- 流密码
连续不断地处理
明文中的各个元素 - 1次加密1个元素,产生1个输出,继续读取next
- 元素可能是1字节,可能是1bit
典型代表:
- Vigenère密码
- Vernam密码
- 一次一密的Vernam
🕤 1.1.2 分组密码
- 分组密码将
一个明文分组作为整体
进行加密,通常得到一个与明文等长
的密文分组 - 典型的分组大小为
64位
或128位
分组密码的应用范围比流密码要广泛,大部分基于网络的对称密码使用的都是分组密码;通信双方要共享一个对称加密的密钥
🕘 1.2 Feistel密码结构的设计动机
- 分组密码作用在一个
n
位的明文分组
上,对应产生一个n
位的密文分组
- 明文分组共有 2n 种不同的可能
- 加密应该是一个
可逆
的过程,密文能够通过相应的逆运算还原出唯一的原始明文 - 一个密文分组对应着一个唯一的明文分组,这样的变换为可逆变换
- n = 2,即明文分组的长度为 2 bit,共22种不同的可能
当明文分组不同时,对应的密文分组也是不同的
密文分组共2位,也有22种可能 - 上面左图的密码体制属于
可逆变换
。如密文分组11,只可能由明文分组00生成,对应的明文分组只有00 - 中图的密码体制属于
不可逆变换
如密文分组01,可以由明文分组10生成,也可以由明文分组11生成,对应着两个明文分组 - 右图的密码体制属于
n位可逆变换
密文分组共n位,有𝟐𝒏种不同的可能
对于第一个明文分组,可以选择𝟐𝒏个密文分组中的任意一个;
对于第二个明文分组,从剩下的𝟐𝒏−𝟏个分组中选择一个
依次类推,一共有 𝟐 𝒏 × 𝟐 ( 𝒏 − 𝟏 ) × … × 𝟐 × 𝟏 = 𝟐 𝒏 ! 𝟐^𝒏×𝟐^{(𝒏−𝟏)}×…×𝟐×𝟏=𝟐^𝒏! 2n×2(n−1)×…×2×1=2n!种不同的明文密文对应关系
对于16种输入状态中的每一种,都能被加密算法映射成
唯一
的一个输出状态这是分组密码的最一般的形式,也是
最理想
的形式,此时加密规则达到最大16!种。
练习题:某4位分组密码的加密规则如上所示,请使用该密码加密大写字母A(ASCII值为65)。
解答:
- 明文字母e的ASCII值为101,二进制01100101,由2个明文分组0110、0101构成,它们使用频率最高
- 通过该分组密码,生成两个连续的密文分组1011、1111,它们出现频率最高
- 通过这种
统计特征
可以实施攻击 - 对于像n=4这样比较小的分组,密码系统等价于传统代替密码
- 密文分组保留了明文的统计特征,易于攻击
- 脆弱性由
分组过小
导致
n充分大
- 当n充分大,一个明文分组可能由非常多的字母构成
- 明文分组几乎不会有高频率出现的可能,统计规律被掩盖
- n充分大的这种分组密码是
不可行
的 - 比如n=4的某个分组密码,它的加密规则如上,无法描述出加密算法以及密钥,这种情况下映射本身就是密钥
- 密钥长度
(4位)*(16行)
- 对于一个n位的分组密码,密钥长度为(n位)× (2n行)=n×2n
- 假设分组长度64位时能抵御攻击,密钥规模将达到1021位
一般的分组密码
- 理想分组密码有2n!种明文密文映射规则
- 为实现方便,一般的分组密码只涉及到这些映射的一个
子集
y 1 = k 11 x 1 + k 12 x 2 + k 13 x 3 + k 14 x 4 y 2 = k 21 x 1 + k 22 x 2 + k 23 x 3 + k 24 x 4 y 3 = k 31 x 1 + k 32 x 2 + k 33 x 3 + k 34 x 4 y 4 = k 41 x 1 + k 42 x 2 + k 43 x 3 + k 44 x 4 \begin{array}{l} y_{1}=k_{11} x_{1}+k_{12} x_{2}+k_{13} x_{3}+k_{14} x_{4} \\ y_{2}=k_{21} x_{1}+k_{22} x_{2}+k_{23} x_{3}+k_{24} x_{4} \\ y_{3}=k_{31} x_{1}+k_{32} x_{2}+k_{33} x_{3}+k_{34} x_{4} \\ y_{4}=k_{41} x_{1}+k_{42} x_{2}+k_{43} x_{3}+k_{44} x_{4} \end{array} y1=k11x1+k12x2+k13x3+k14x4y2=k21x1+k22x2+k23x3+k24x4y3=k31x1+k32x2+k33x3+k34x4y4=k41x1+k42x2+k43x3+k44x4
- 某分组密码使用线性方程来定义映射
- 当n=4时,明文分组[x1 x2 x3 x4]中的四个比特分别代入方程,得到密文分组[y1 y2 y3 y4]
- 加密算法是四元一次方程组,而密钥是一个4行4列的矩阵,由4*4个比特构成
- 若算法被攻击者获得,密钥很容易被分析出来
🕘 1.3 Feistel密码
🕤 1.3.1 混淆和扩散
- 截获到密文,加密算法为Caesar密码
- 攻击者拥有明文统计特征的知识,已知e使用频率最高12.7%,而该特征体现在了密文中,密文字母F出现频率最高12.7%
- 密文字母F 对应着明文字母e
- Caesar密码中,明文 = 密文-密钥(mod26),
e = F – k
4 = 5 – k,推导出密钥为1
- 截获到密文,加密算法是n位密钥的Vigenere
- 攻击者拥有明文统计特征的知识,已知e使用频率最高,而该特征体现在了密文中,在每隔n位的所有密文字母中 G出现频率最高
- 密文字母G 对应着明文字母e
Vigenere密码中,明文值 = 密文值 – 密钥值,e = G – k,
4 = 6 – k,推导出密钥词的第一位值为2,即c
扩散
y 𝟏 = E ( x 𝟏 , k ) y_𝟏=E(x_𝟏,k) y1=E(x1,k)
y 𝟏 = E ( x 𝟏 , x 𝟐 , . . . . . . x 𝒏 , k ) y_𝟏=E(x_𝟏 ,x_𝟐,...... x_𝒏,k) y1=E(x1,x2,......xn,k)
- 扩散是将明文的
统计特征消散
在密文中 - 一个密文字母不再只取决于一个明文字母,而是被许多明文字母影响
- 明文和密文之间的统计关系变得复杂
y n = ( ∑ i = 1 k m ( n + i ) ) m o d 26 y_{n}=\left(\sum_{i=1}^{k} m_{(n+i)}\right) \bmod 26 yn=(i=1∑km(n+i))mod26
用上述方法加密消息 𝐌 = 𝒎 𝟏 , 𝒎 𝟐 , … . , 𝒎 𝒏 𝐌=𝒎_𝟏,𝒎_𝟐,….,𝒎_𝒏 M=m1,m2,….,mn,k=3
密文字母 𝒚 𝟏 = ( 𝒎 ( 𝟏 + 𝟏 ) + 𝒎 ( 𝟏 + 𝟐 ) + 𝒎 ( 𝟏 + 𝟑 ) ) 𝒎 𝒐 𝒅 𝟐 𝟔 𝒚_𝟏=(𝒎_{(𝟏+𝟏)}+𝒎_{(𝟏+𝟐)}+𝒎_{(𝟏+𝟑)}) 𝒎𝒐𝒅𝟐𝟔 y1=(m(1+1)+m(1+2)+m(1+3))mod26
= ( 𝒎 𝟐 + 𝒎 𝟑 + 𝒎 𝟒 ) 𝒎 𝒐 𝒅 𝟐 𝟔 =(𝒎_𝟐+𝒎_𝟑+𝒎_𝟒) 𝒎𝒐𝒅𝟐𝟔 =(m2+m3+m4)mod26
密文字母 𝒚 𝟐 = ( 𝒎 ( 𝟐 + 𝟏 ) + 𝒎 ( 𝟐 + 𝟐 ) + 𝒎 ( 𝟐 + 𝟑 ) ) 𝒎 𝒐 𝒅 𝟐 𝟔 𝒚_𝟐=(𝒎_{(𝟐+𝟏)}+𝒎_{(𝟐+𝟐)}+𝒎_{(𝟐+𝟑)}) 𝒎𝒐𝒅𝟐𝟔 y2=(m(2+1)+m(2+2)+m(2+3))mod26
= ( 𝒎 𝟑 + 𝒎 𝟒 + 𝒎 𝟓 ) 𝒎 𝒐 𝒅 𝟐 𝟔 =(𝒎_𝟑+𝒎_𝟒+𝒎_𝟓) 𝒎𝒐𝒅𝟐𝟔 =(m3+m4+m5)mod26
用上述方法加密消息𝒉𝒆𝒉𝒂,密钥k=2
密文字母 𝒚 𝟏 = ( 𝒎 ( 𝟏 + 𝟏 ) + 𝒎 ( 𝟏 + 𝟐 ) ) 𝒎 𝒐 𝒅 𝟐 𝟔 𝒚_𝟏=(𝒎_{(𝟏+𝟏)}+𝒎_{(𝟏+𝟐)}) 𝒎𝒐𝒅𝟐𝟔 y1=(m(1+1)+m(1+2))mod26
= ( 𝒎 𝟐 + 𝒎 𝟑 ) 𝒎 𝒐 𝒅 𝟐 𝟔 =( 𝒎_𝟐 + 𝒎_𝟑 ) 𝒎𝒐𝒅𝟐𝟔 =(m2+m3)mod26
= ( 𝒆 + 𝒉 ) 𝒎 𝒐 𝒅 𝟐 𝟔 =(𝒆+𝒉)𝒎𝒐𝒅𝟐𝟔 =(e+h)mod26
= ( 𝟒 + 𝟕 ) 𝒎 𝒐 𝒅 𝟐 𝟔 =(𝟒+𝟕)𝒎𝒐𝒅𝟐𝟔 =(4+7)mod26
=𝟏𝟏=𝑳
密文字母 𝒚 𝟑 = ( 𝒎 ( 𝟑 + 𝟏 ) + 𝒎 ( 𝟑 + 𝟐 ) ) 𝒎 𝒐 𝒅 𝟐 𝟔 𝒚_𝟑=(𝒎_{(𝟑+𝟏)}+𝒎_{(𝟑+𝟐)}) 𝒎𝒐𝒅𝟐𝟔 y3=(m(3+1)+m(3+2))mod26
= ( 𝒎 𝟒 + 𝒎 𝟏 ) 𝒎 𝒐 𝒅 𝟐 𝟔 =( 𝒎_𝟒 + 𝒎_𝟏 ) 𝒎𝒐𝒅𝟐𝟔 =(m4+m1)mod26
= ( 𝒂 + 𝒉 ) 𝒎 𝒐 𝒅 𝟐 𝟔 =(𝒂+𝒉)𝒎𝒐𝒅𝟐𝟔 =(a+h)mod26
= ( 𝟐 + 𝟕 ) 𝒎 𝒐 𝒅 𝟐 𝟔 =(𝟐+𝟕)𝒎𝒐𝒅𝟐𝟔 =(2+7)mod26
=𝟗=𝑱
同是明文字母h
,加密后却生成了不同的密文字母L、J
无法再使用统计特征建立某个明文字母与某个密文字母的联系,也就无法推导出密钥
混淆
- 扩散 削弱了
明文和密文
之间的对应规律,明文的统计特征不再适用于密文 - 混淆 削弱了
密钥和密文
之间的对应规律,密文的统计特征不足以推导出密钥 - 即使攻击者拥有密文的统计特征,并建立了某密文字母L 和 明文字母e 之间的映射。由于使用密钥k生成密文字母L的方法十分复杂,推导密钥k变得极其困难
多选题
以下说法正确的是?
A. 小明用明文字母累加模26的方法来得到密文,本质上是对信息做扩散处理
B. 特工设计的一款密码中,对密钥进行置换、累加再用到加密算法中,是在做混淆处理
C. 小红拿到的密码是明文四个字母为一组,进行数学运算得到一个密文字母,再做扩充,本质是对明文字母做了扩散处理
D. 某密码先选择密钥中的几位,再进行扩充和数学变换,这种处理本质上是扩散
答案:ABC
🕤 1.3.2 Feistel 密码结构
- 明文分组长度为2w位
- 划分为等长的两部分:左边𝑳𝑬𝟎,右边𝑹𝑬𝟎
- 共有16轮加密,由密钥𝑲 推导生成16个子密钥𝑲𝒊,分别作用于每一轮
将左边 𝑳𝑬𝟎与右边 𝑹𝑬𝟎互换位置,进行置换
𝑹𝑬𝟎换到左边,变为 𝑳𝑬𝟏
𝑳𝑬𝟎换到右边,但需要进行一些操作才能变为 𝑹𝑬𝟏
把 𝑹𝑬𝟎与本轮密钥𝑲𝟏输入轮函数F
将轮函数F的输出与 𝑳𝑬𝟎进行异或,得到的结果作为 𝑹𝑬𝟏
- DES数据加密标准使用的就是Feistel密码结构
- DES 只不过是Feistel 算法的具体实现
- 比如解决分组2w到底是多少位、密钥Ki是怎么产生的,以及使用的轮函数F是什么等等技术细节
多选题
关于Feistel加密过程,下列说法正确的有:
A. 明文分组被划分为等长的 𝑳𝑬𝟎、 𝑹𝑬𝟎
B. 它们经过一轮加密后变为 𝑹𝑬𝟏、 𝑳𝑬𝟏
C. 𝑹𝑬𝟏= 𝑳𝑬𝟎
D. 𝑳𝑬𝟏= 𝑹𝑬𝟎
答案:ABD
多选题
关于Feistel加密过程,下列说法正确的有:
A. 16轮加密一共用了16把密钥
B. 最终密文分组是𝑳𝑬𝟏𝟕、𝑹𝑬𝟏𝟕
C. 𝑳𝑬13= 𝑹𝑬12
D. 𝑹𝑬17= 𝑳𝑬16
答案:ABCD
密文分组 𝑹𝑬𝟏𝟔 𝑳𝑬𝟏𝟔
解密过程里:左边记作 𝑳𝑫𝟎= 𝑹𝑬𝟏𝟔 ;右边记作 𝑹𝑫𝟎= 𝑳𝑬𝟏𝟔
共有16轮解密,由密钥𝑲推导生成16个子密钥𝑲𝒊,分别作用于每一轮
把𝑹𝑫𝟎,也就是 𝑳𝑬𝟏𝟔换到左边,变为 𝑳𝑫𝟏
加密算法中 𝑳𝑬𝟏𝟔=𝑹𝑬𝟏𝟓,所以左边变为 𝑹𝑬𝟏𝟓
把 𝑳𝑫𝟎换到右边,但需要进行一些操作才能变为 𝑹𝑫𝟏
把 𝑹𝑫𝟎,也就是 𝑳𝑬𝟏𝟔与本轮密钥𝑲𝟏𝟔输入轮函数F
将轮函数F的输出与 𝑳𝑫𝟎 进行异或,得到的结果作为 𝑹𝑫𝟏
𝑹𝑫𝟏可证等于 𝑳𝑬𝟏𝟓
小结:
分组
越长,安全性越高,但是会降低
加密和解密的速度
通过扩散
增加安全性
DES使用的分组长度为64bit
密钥
越长,安全性越高,但是会降低
加密和解密的速度
通过混淆
增加安全性
DES使用的密钥长度为56bit
- 单轮不够安全,采取
多层
加密的思想
迭代轮数的典型值为16
- 轮函数
F
越复杂
,安全性越高
重要公式
L E i = R E i − 1 LE_i = RE_{i-1} LEi=REi−1
R E i = L E i − 1 ⊕ F ( R E i − 1 , k i ) RE_i = LE_{i-1}⊕F(RE_{i-1},k_i) REi=LEi−1⊕F(REi−1,ki)
L D 16 − i + 1 = R D 16 − i = L E i = R E i − 1 LD_{16-i+1} = RD_{16-i} = LE_i = RE_{i-1} LD16−i+1=RD16−i=LEi=REi−1
多选题
关于Feistel解密过程,下列说法正确的有:
A. 解密过程与加密本质上相同
B. 解密输入的是密文分组与逆序密钥
C. 𝑳𝑫𝟏= 𝑹𝑫𝟎
D. 𝑹𝑫𝟎= 𝑹𝑬𝟏𝟕= 𝑳𝑬𝟏𝟔
答案:ABCD
证明: R D 2 = L E 14 RD_2 = LE_{14} RD2=LE14
解答:
- 16轮
- L E i = R E i − 1 LE_i = RE_{i-1} LEi=REi−1
R E i = L E i − 1 ⊕ F ( R E i − 1 , k i ) RE_i = LE_{i-1}⊕F(RE_{i-1},k_i) REi=LEi−1⊕F(REi−1,ki)- L D 2 = R D 1 = L E 15 = R E 14 LD_2 = RD_1 = LE_{15} = RE_{14} LD2=RD1=LE15=RE14
R D 2 = L D 1 ⊕ F ( R D 1 , k 15 ) RD_2 = LD_1⊕F(RD_1,k_{15}) RD2=LD1⊕F(RD1,k15)
= R E 15 ⊕ F ( L E 15 , k 15 ) = RE_{15}⊕F(LE_{15},k_{15}) =RE15⊕F(LE15,k15)
= L E 14 ⊕ F ( R E 14 , k 15 ) ⊕ F ( L E 15 , k 15 ) = LE_{14}⊕F(RE_{14},k_{15})⊕F(LE_{15},k_{15}) =LE14⊕F(RE14,k15)⊕F(LE15,k15)
= L E 14 = LE_{14} =LE14
🕒 2. 数据加密标准
DES(Data Encryption Standard),即数据加密标准
它是世界上最常用的加密方案,以至于在很长一段时间内,DES就是密码生成的同义词
就像全球定位系统(Global Positioning System,GPS),由于美国率先研制,在一段时间内,GPS定位系统也是全球定位系统的同义词
🕘 2.1 DES的加密过程
🕤 2.1.1 初始置换(IP)
64位明文分组
按照置换表进行重排列,元素的位置发生改变,产生64位的输出
58 50 42 34 26 18 10 2 60 52 44 36 28 20 12 4 62 54 46 38 30 22 14 6 64 56 48 40 32 24 16 8 57 49 41 33 25 17 9 1 59 51 43 35 27 19 11 3 61 53 45 37 29 21 13 5 63 55 47 39 31 23 15 7 \begin{array}{|c|c|c|c|c|c|c|c|} \hline 58 & 50 & 42 & 34 & 26 & 18 & 10 & 2 \\ \hline 60 & 52 & 44 & 36 & 28 & 20 & 12 & 4 \\ \hline 62 & 54 & 46 & 38 & 30 & 22 & 14 & 6 \\ \hline 64 & 56 & 48 & 40 & 32 & 24 & 16 & 8 \\ \hline 57 & 49 & 41 & 33 & 25 & 17 & 9 & 1 \\ \hline 59 & 51 & 43 & 35 & 27 & 19 & 11 & 3 \\ \hline 61 & 53 & 45 & 37 & 29 & 21 & 13 & 5 \\ \hline 63 & 55 & 47 & 39 & 31 & 23 & 15 & 7 \\ \hline \end{array} 58606264575961635052545649515355424446484143454734363840333537392628303225272931182022241719212310121416911131524681357
练习题
经过初始置换后,输出的前8位二进制数是什么?
0 0 0 0 0 0 0 1 0 0 1 0 0 0 1 1 0 1 0 0 0 1 0 1 0 1 1 0 0 1 1 1 1 0 0 0 1 0 0 1 1 0 1 0 1 0 1 1 1 1 0 0 1 1 0 1 1 1 1 0 1 1 1 1 \begin{array}{|llllllll|} \hline 0 & 0 & 0 & 0 & 0 & 0 & 0 & 1 \\ 0 & 0 & 1 & 0 & 0 & 0 & 1 & 1 \\ 0 & 1 & 0 & 0 & 0 & 1 & 0 & 1 \\ 0 & 1 & 1 & 0 & 0 & 1 & 1 & 1 \\ 1 & 0 & 0 & 0 & 1 & 0 & 0 & 1 \\ 1 & 0 & 1 & 0 & 1 & 0 & 1 & 1 \\ 1 & 1 & 0 & 0 & 1 & 1 & 0 & 1 \\ 1 & 1 & 1 & 0 & 1 & 1 & 1 & 1 \\ \hline \end{array} 0000111100110011010101010000000000001111001100110101010111111111
解答:
按照初始置换表顺序读,答案为 11001100
🕤 2.1.2 16轮处理
64位数据
继续进行16轮处理,每轮都是相同的Feistel结构,最终产生64位输出
🕤 2.1.3 轮函数
轮函数内部又包含4种变换,分别为扩展置换、XOR、S盒置换、P盒置换
🕞 2.1.3.1 扩展置换(E)
将32位输入
按扩展置换表扩展成为48位输出
,使得扩展后数据长度与48位子密钥 等长
32 1 2 3 4 5 4 5 6 7 8 9 8 9 10 11 12 13 12 13 14 15 16 17 16 17 18 19 20 21 20 21 22 23 24 25 24 25 26 27 28 29 28 29 30 31 32 1 \begin{array}{|c|cccc|c|} \hline 32 & 1 & 2 & 3 & 4 & 5 \\ 4 & 5 & 6 & 7 & 8 & 9 \\ 8 & 9 & 10 & 11 & 12 & 13 \\ 12 & 13 & 14 & 15 & 16 & 17 \\ 16 & 17 & 18 & 19 & 20 & 21 \\ 20 & 21 & 22 & 23 & 24 & 25 \\ 24 & 25 & 26 & 27 & 28 & 29 \\ 28 & 29 & 30 & 31 & 32 & 1 \\ \hline \end{array} 3248121620242815913172125292610141822263037111519232731481216202428325913172125291
🕞 2.1.3.2 异或XOR(⊕)
将扩展置换
生成的48位输出
,与48位子密钥
进行按位异或
XOR
🕞 2.1.3.3 S盒置换
将48位输出
每6位
分成一组
,每一组都通过S盒置换变为了4位
6位中取第1
位和第6
位组成行号
,剩余第2、3、4、5
位组成列号
从S盒置换表中取出相应的十进制数
,转化为4位二进制数
练习题
S盒的输入为111100,输出是什么?
14 4 13 1 2 15 11 8 3 10 6 12 5 9 0 7 0 15 7 4 14 2 13 1 10 6 12 11 9 5 3 8 4 1 14 8 13 6 2 11 15 12 9 7 3 10 5 0 15 12 8 2 4 9 1 7 5 11 3 14 10 0 6 13 \begin{array}{|rrrrrrrrrrrrrrrr|} \hline 14 & 4 & 13 & 1 & 2 & 15 & 11 & 8 & 3 & 10 & 6 & 12 & 5 & 9 & 0 & 7 \\ 0 & 15 & 7 & 4 & 14 & 2 & 13 & 1 & 10 & 6 & 12 & 11 & 9 & 5 & 3 & 8 \\ 4 & 1 & 14 & 8 & 13 & 6 & 2 & 11 & 15 & 12 & 9 & 7 & 3 & 10 & 5 & 0 \\ 15 & 12 & 8 & 2 & 4 & 9 & 1 & 7 & 5 & 11 & 3 & 14 & 10 & 0 & 6 & 13 \\ \hline \end{array} 1404154151121371481482214134152691113218111731015510612116129312117145931095100035678013
解答:
答案是0101
- 每个S盒的每一行都是整数
0到15
的一个置换 - 改变
S盒
的任一输入比特,其输出至少有两比特
发生改变
🕞 2.1.3.4 P盒置换
32位输出
数据进行P盒置换,仍然输出为32位数据
16 7 20 21 29 12 28 17 1 15 23 26 5 18 31 10 2 8 24 14 32 27 3 9 19 13 30 6 22 11 4 25 \begin{array}{|lccccccc|} \hline 16 & 7 & 20 & 21 & 29 & 12 & 28 & 17 \\ 1 & 15 & 23 & 26 & 5 & 18 & 31 & 10 \\ 2 & 8 & 24 & 14 & 32 & 27 & 3 & 9 \\ 19 & 13 & 30 & 6 & 22 & 11 & 4 & 25 \\ \hline \end{array} 1612197158132023243021261462953222121827112831341710925
🕤 2.1.4 逆初始置换(IP-1)
🕤 2.1.5 密钥生成
DES 提供了64位
的密钥,但实际仅用到了其中的56位
。密钥扩展过程如下所示
🕞 2.1.5.1 置换选择1
给64位密钥
从1到64编号,忽略每个第8位,按照置换表进行选择与重新排列,产生56位
的输出
C 0 57 49 41 33 25 17 9 1 58 50 42 34 26 18 10 2 59 51 43 35 27 19 11 3 60 52 44 36 D 0 63 55 47 39 31 23 15 7 62 54 46 38 30 22 14 6 61 53 45 37 29 21 13 5 28 20 12 4 \begin{array}{|llcccccc|} \hline C_{0} & 57 & 49 & 41 & 33 & 25 & 17 & 9 \\ & 1 & 58 & 50 & 42 & 34 & 26 & 18 \\ & 10 & 2 & 59 & 51 & 43 & 35 & 27 \\ & 19 & 11 & 3 & 60 & 52 & 44 & 36 \\ \hline D_{0} & 63 & 55 & 47 & 39 & 31 & 23 & 15 \\ & 7 & 62 & 54 & 46 & 38 & 30 & 22 \\ & 14 & 6 & 61 & 53 & 45 & 37 & 29 \\ & 21 & 13 & 5 & 28 & 20 & 12 & 4 \\ \hline \end{array} C0D057110196371421495821155626134150593475461533425160394653282534435231384520172635442330371291827361522294
🕞 2.1.5.2 循环左移
56位密钥循环左移一次,产生56位的输出
练习题
C4 = 0011001100101010101111111100
D4 = 0101100110011110001111010101
问:C6,D6分别为什么?
答案:
C6 = 0011001010101011111111000011
D6 = 1001100111100011110101010101
🕞 2.1.5.3 置换选择2
56位输入
按照置换表进行选择与重新排列,产生48位
的输出
14 17 11 24 1 5 3 28 15 6 21 10 23 19 12 4 26 8 16 7 27 20 13 2 41 52 31 37 47 55 30 40 51 45 33 48 44 49 39 56 34 53 46 42 50 36 29 32 \begin{array}{|cccccc|} \hline 14 & 17 & 11 & 24 & 1 & 5 \\ 3 & 28 & 15 & 6 & 21 & 10 \\ 23 & 19 & 12 & 4 & 26 & 8 \\ 16 & 7 & 27 & 20 & 13 & 2 \\ 41 & 52 & 31 & 37 & 47 & 55 \\ 30 & 40 & 51 & 45 & 33 & 48 \\ 44 & 49 & 39 & 56 & 34 & 53 \\ 46 & 42 & 50 & 36 & 29 & 32 \\ \hline \end{array} 1432316413044461728197524049421115122731513950246420374556361212613473334295108255485332
🕒 3. DES的一个例子
明文: 02468 a c e e c a 86420 密钥: 0 f 1571 c 947 d 9 e 859 密文: d a 02 c e 3 a 89 e c a c 3 b \begin{array}{|l|l|} \hline \text { 明文:} & 02468aceeca86420 \\ \hline \text { 密钥: } & 0f1571c947d9e859 \\ \hline \text { 密文:} & da02ce3a89ecac3b \\ \hline \end{array} 明文: 密钥: 密文:02468aceeca864200f1571c947d9e859da02ce3a89ecac3b
- 明文、密钥以及密文均为
十六进制
1位十六进制数
表示4位二进制数
- 明文分组、密钥、密文分组长度为
16×4=64bit
🕘 3.1 结果
明文分组首先进行一次初始置换IP
将新产生的明文分组划分为等长的两部分,记作 𝑳𝑬𝟎、 𝑹𝑬𝟎
第一轮的子密钥𝑲𝟏
将明文分组 𝑳𝑬𝟎、 𝑹𝑬𝟎进行第一轮的处理, 𝑹𝑬𝟎可以直接换到左边变为 𝑳𝑬𝟏; 𝑳𝑬𝟎要经过一系列处理之后才可以变成 𝑹𝑬𝟏第二轮的子密钥𝑲𝟐
将分组 𝑳𝑬𝟏、 𝑹𝑬𝟏进行第二轮的处理, 𝑹𝑬𝟏可以直接换到左边变为 𝑳𝑬𝟐; 𝑳𝑬𝟏要经过一系列处理之后才可以变成 𝑹𝑬𝟐
🕘 3.2 雪崩效应
- 若明文或者密钥的某一位发生变化,密文某几位随之变化,攻击者就可以缩小明文或者密钥的可能范围
- 我们希望明文或密钥的微小改变能够对密文产生非常大的影响,增大了攻击明文或密钥的难度
- 当明文分组的第4位改变,十六进制0对应的二进制0000变成了0001
- 明文分组从024…变成了124…
- 两个相差1位的明文分组,在经过第一轮加密后,产生了两个不同的密文分组
- 密文分组只有1位不同
- 它们在经过第二轮加密后,产生的密文分组出现了5位不同
- 在经过短短三轮加密后,密文分组已经达到了18位的差异
- 全部16轮加密完成后,两组密文相差32位
- 明文保持不变,使用的密钥仅在第4位有差异
- 经过几轮加密后也出现了雪崩效应,最终生成的密文也有
一半
左右的差异
🕘 3.3 练习题
解答:
🕒 4. DES的强度
- DES 密钥长度56位,共𝟐𝟓𝟔≈𝟕.𝟐×𝟏𝟎𝟏𝟔种可能,若对密钥发起穷举攻击,至少也要尝试一半的次数
- 当时有人提出制造一台专门用于加密的并行计算机,带有100万个加密器,每个加密器耗时1ms,穷举时间大约10个小时
- 随着多核处理技术的迅猛发展,一台现代多核英特尔处理器的加密速度约为每秒5亿次
更有超级计算机可以达到每秒𝟏𝟎𝟏𝟑次 - 今天的超级计算机只需一个小时就可以穷举攻击找出DES加密的56位密钥
🕘 4.1 解决方案
- 一种是设计全新的算法,例如AES。
- 用DES进行
多次
加密,且使用多个密钥
,如二重DES和三重DES算法。
🕒 5. 中英文对照表
OK,以上就是本期知识点“分组密码和数据加密标准”的知识啦~~ ,感谢友友们的阅读。后续还会继续更新,欢迎持续关注哟📌~
💫如果有错误❌,欢迎批评指正呀👀~让我们一起相互进步🚀
🎉如果觉得收获满满,可以点点赞👍支持一下哟~