主要在 哈工大密码学课程 张宇老师课件 的基础上学习记录笔记。
内容补充:骆婷老师的PPT
《introduction to modern cryphtography》–Jonathan Katz, Yehuda Lindell(现代密码学——原理与协议)中相关章节
密码学复习笔记 这个博主好有意思
初步笔记,如有错误请指正
快速补充一些密码相关的背景知识
本节学习如何设计一个PRP(伪随机排列)。通过一个经典的加密方案DES来学习PRP的构造和相关安全分析。此外,简要介绍当前广泛使用的AES。
目录:替换-置换网络、Feistel网络、DES、增加密钥长度、AES、差分分析与线性分析
块(分组)密码(Block Ciphers)
块密码 F : { 0 , 1 } n × { 0 , 1 } ? → { 0 , 1 } ? F : \{0,1\}^n \times \{0,1\}^\ell \to \{0,1\}^\ell F:{0,1}n×{0,1}?→{0,1}?. 是一个带密钥的函数。
F k : { 0 , 1 } ? → { 0 , 1 } ? F_k : \{0,1\}^\ell \to \{0,1\}^\ell Fk?:{0,1}?→{0,1}?, F k ( x ) = def F ( k , x ) F_k(x) \overset{\text{def}}{=} F(k,x) Fk?(x)=defF(k,x).
n n n 是密钥长度, ? \ell ? 是块长度.
构造是启发式的,而非被证明了的;
注意:虽然有“密码”二字,但在实践中,块密码被当作是一个PRP,而非加密方案;在之前AES的提案召集中要求,算法输出的范围应该与输入块的随机排列是不可区分的;
方案被认为是“优秀的”,如果已知的最佳攻击具有的时间复杂性与蛮力搜索密钥大致相当
漫画
混淆-扩散范式(The Confusion-Diffusion Paradigm)
替换-置换网络(Substitution-Permutation Network)
设计原则1——S盒的可逆性
设计原则2——雪崩效应(Avalanche Effect)
一个针对块密码的KPA框架
攻击轮次减少的SPN(作业)
攻击一个1轮SPN:64比特块,128比特密钥(2个64比特子密钥),16x4比特的S盒,以及用异或来实现密钥混合;
根据图中关系可以观察到,根据明文和密文知道的20个比特,密钥中未知的20个比特,以及4个比特来比较;
猜测20比特密钥:第一个子密钥的16比特,第二个子密钥的4个比特;
通过4比特测试的概率 2 ? 4 2^{-4} 2?4;
需要8对明文/密文对来确定密钥使得期望小于1,期望 2 20 ? 4 × 8 2^{20-4\times 8} 220?4×8;
破解的复杂性为 8 ? 2 20 ? 16 = 2 27 ? 2 128 8\cdot 2^{20} \cdot 16= 2^{27} \ll 2^{128} 8?220?16=227?2128 ,其中,8是明文/密文对数,16是S盒数量(因为每次猜测只覆盖1个S盒对应的第2个子密钥中4个比特);
Feistel网络
Feistel网络的例题
DES设计
DES算法概览
DES的Mangler函数
DES中S盒例子
密钥编排
弱密钥
DES编年史
DES经历了一个从成为加密标准到安全性不足、到安全性增强、到被彻底破解的历程;
[1973] NBS (NIST) 发布标准召集公告;
[1974] DES 在联邦政府公告发布;
[1977] DES 被发布为 FIPS PUB 46;
[1990] 2 47 2^{47} 247 个明文的CPA下差分分析;
[1997] DESCHALL 项目公开破解DES;
[1998] EFF(电子前沿基金会)的Deep Crack在56小时内花费$250,000破解DES;
[1999] 三重 DES
[2001] AES 在 FIPS PUB 197 发布;
[2004] DES标准 FIPS PUB 46-3 被撤销;
[2006] COPACOBANA 在9天内花费1万美元破解DES;
[2008] RIVYERA 在1天内破解 DES;
[2016] Hashcat用8块GTX 1080Ti在2天内破解DES;
[2017] 利用CPA攻击,针对一个特定明文在25秒内获得密钥;
双重加密
中间相遇攻击(The Meet-In-the-Middle Attack)
双重加密在**中间相遇攻击(MITM)**下并不比原本的DES更安全;
在已知明文攻击(KPA)下,从输入方向输入一个明文,通过一次DES加密,猜测不同密钥来得到一组中间值,保存这些密钥和中间值对;从输出方向反向输入一个密文,通过一个DES解密,猜测不同密钥来得到另一组中间值,也保存这些密钥和中间值对;这两组中间值中相同的为 z 0 z_0 z0?,相应的两个密钥 k 1 k_1 k1?和 k 2 k_2 k2?就可能是实际密钥。
z 0 = F k 1 ( x ) = F k 2 ? 1 ( y ) ?? ? ?? y = F k 1 , k 2 ′ ( x ) z_0 = F_{k_1}(x) = F^{-1}_{k_2}(y) \iff y = F'_{k_1,k_2}(x) z0?=Fk1??(x)=Fk2??1?(y)?y=Fk1?,k2?′?(x).
密钥对 ( k 1 , k 2 ) (k_1,k_2) (k1?,k2?) 满足上面等式的概率为 2 ? n 2^{-n} 2?n;因为中间值有 2 n 2^n 2n中可能;
这样的密钥对数量为 2 2 n / 2 n = 2 n 2^{2n}/2^n = 2^n 22n/2n=2n;这是密钥对数量乘以满足等式的概率;
用另两个明文/密文对,密钥对的期望数量为 2 n / 2 2 n = 2 ? n 2^{n}/2^{2n}=2^{-n} 2n/22n=2?n. 足够小,因此剩下的就是密钥!
O ( 2 n ) \mathcal{O}(2^n) O(2n) 时间复杂性并且 O ( 2 n ) \mathcal{O}(2^n) O(2n) 空间复杂性,这是一种典型的空间换时间的设计;
可见,双重DES在时间复杂性上与DES没有区别。
DESX(XEX模式)
三重加密(Triple Encryption)
高级加密标准 AES(The Advanced Encryption Standard)
AES概览
SM4(思考)
线性密码分析(Linear Cryptanalysis)
下面内容来自于“A Tutorial on Linear and Differential Cryptanalysis”
针对DES的密码学分析的重点是分析S盒,因为S盒是DES中唯一的非线形部分,输入和输出之间关系被有意地设计成难以简单描述;线性分析就是要通过分析来寻找输入和输出之间的线性关系,从而破解加密方案;
在输入和输出之间的线性分析:对于随机选择的输入 x x x和密钥 k k k,有 y = F k ( x ) y=F_k(x) y=Fk?(x),在比特位置 i 1 , . . . , i ? i_1, ... ,i_\ell i1?,...,i?? 与 i 1 ′ , . . . , i ? ′ i_1', ... , i_\ell' i1′?,...,i?′? 之间存在偏差(bias) p p p , 之所以称为“偏差”,是与“正常”概率 1 2 \frac{1}{2} 21?相比而言;
$ \Pr [x_{i_1} \oplus \cdots \oplus x_{i_\ell} \oplus y_{i_1’} \oplus \cdots \oplus y_{i_\ell’} = 0] = p+\frac{1}{2}. $
线性关系就是指这些比特的异或值的统计结果与随机值之间存在偏差,无论异或结果为0还是为1,重点在于这些位置比特之间存在线形关系。
当偏差较大时,如极端情况 p = 1 2 p=\frac{1}{2} p=21?,可以认为输入中若干位置异或值等于输出中若干位置异或值;
采用KPA(无需CPA)进行线性分析攻击的步骤:
一个对S盒进行线性分析的例子
一个线性分布表的例子
一个线性密码分析的例子
从上向下,第一轮S盒线性分析结果为 S 1 , 2 S_{1,2} S1,2?: x 1 ⊕ x 3 ⊕ x 4 = y 2 x_1 \oplus x_3 \oplus x_4 = y_2 x1?⊕x3?⊕x4?=y2?;其中,S盒输入 x 1 , x 3 , x 4 x_1, x_3, x_4 x1?,x3?,x4?为明文和第一轮子密钥中 p 5 , p 7 , p 8 p_5, p_7, p_8 p5?,p7?,p8?和 k 1 , 5 , k 1 , 7 , k 1 , 8 k_{1,5}, k_{1,7}, k_{1,8} k1,5?,k1,7?,k1,8?的异或值;
第2轮S盒线性分析结果为 S 2 , 2 S_{2,2} S2,2?: x 2 = y 2 ⊕ y 4 x_2 = y_2 \oplus y_4 x2?=y2?⊕y4?,输出的2个比特影响最后一轮的2个S盒输入 u 3 , 6 , u 3 , 14 u_{3,6}, u_{3,14} u3,6?,u3,14?。
将输入、密钥和最后一轮S盒输入间关系表达出来: p 5 ⊕ p 7 ⊕ p 8 ⊕ k 1 , 5 ⊕ k 1 , 7 ⊕ k 1 , 8 ⊕ k 2 , 6 ⊕ k 3 , 6 ⊕ k 3 , 14 = u 3 , 6 ⊕ u 3 , 14 p_5 \oplus p_7 \oplus p_8 \oplus k_{1,5} \oplus k_{1,7} \oplus k_{1,8} \oplus k_{2,6} \oplus k_{3,6} \oplus k_{3,14} = u_{3,6} \oplus u_{3,14} p5?⊕p7?⊕p8?⊕k1,5?⊕k1,7?⊕k1,8?⊕k2,6?⊕k3,6?⊕k3,14?=u3,6?⊕u3,14?,
其中,密钥比特异或部分 Σ k = k 1 , 5 ⊕ k 1 , 7 ⊕ k 1 , 8 ⊕ k 2 , 6 ⊕ k 3 , 6 ⊕ k 3 , 14 \Sigma{k} = k_{1,5} \oplus k_{1,7} \oplus k_{1,8} \oplus k_{2,6} \oplus k_{3,6} \oplus k_{3,14} Σk=k1,5?⊕k1,7?⊕k1,8?⊕k2,6?⊕k3,6?⊕k3,14? 是由密钥决定的一个固定的值。根据前面线性关系的含义,无论 Σ k \Sigma{k} Σk是0还是1,都有一个线性关系 p 5 ⊕ p 7 ⊕ p 8 = u 3 , 6 ⊕ u 3 , 14 p_5 \oplus p_7 \oplus p_8 = u_{3,6} \oplus u_{3,14} p5?⊕p7?⊕p8?=u3,6?⊕u3,14?;
从SPN的输出反向分析, u 3 , 6 ⊕ u 3 , 14 u_{3,6} \oplus u_{3,14} u3,6?⊕u3,14? 由密文和第4个子密钥的所有偶数位异或值决定;
猜测第4个子密钥的所有偶数位,满足上面线性关系的就可能是真的密钥;需要 2 8 2^8 28时间;
重复上面的过程,逐渐获得所有密钥;
差分密码分析(Differential Cryptanalysis)
与线性分析类似,但分析的是特定输入差异 Δ X \Delta_X ΔX? 产生特定输出差异 Δ Y \Delta_Y ΔY? 的概率 p ? 2 ? n p \gg 2^{-n} p?2?n,
x 1 ⊕ x 2 = Δ X x_1\oplus x_2=\Delta_X x1?⊕x2?=ΔX?, F k ( x 1 ) ⊕ F k ( x 2 ) = Δ Y F_k(x_1) \oplus F_k(x_2)=\Delta_Y Fk?(x1?)⊕Fk?(x2?)=ΔY? 的概率 p p p.
当 p p p远大于随机概率 2 ? n 2^{-n} 2?n时,可以认为输入差异与输出差异间存在关系;
这个攻击需要通过CPA进行,因为需要构造特定输入差异,攻击步骤:
一个对S盒进行差分分析的例子
一个差分分布表的例子
一个差分密码分析的例子
块密码补充
总结
略;