Skip to content

Commit

Permalink
several updates
Browse files Browse the repository at this point in the history
  • Loading branch information
YuZhang committed Sep 21, 2021
1 parent c6cf068 commit cedc4a5
Show file tree
Hide file tree
Showing 10 changed files with 148 additions and 76 deletions.
Binary file modified homework/hw3.pdf
Binary file not shown.
2 changes: 1 addition & 1 deletion homework/hw3.tex
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@
\maketitle

\begin{problem}
In our attack on a two-round substitution-permutation network, we considered a block length of 64 bits and a network with 16 $S$-boxes that each take a 4-bit input.
In our attack on a 1-round substitution-permutation network, we considered a block length of 64 bits and a network with 16 $S$-boxes that each take a 4-bit input.
\begin{enumerate}
\item Repeat the analysis for the case of 8 $S$-boxes, each taking an 8-bit input. What is the complexity of the attack now?
\item Repeat the analysis again with a 128-bit block length and 16 $S$-boxes that each take an 8-bit input.
Expand Down
19 changes: 13 additions & 6 deletions notes-Chinese/3.2 私钥加密与伪随机性 第二部分.md
Original file line number Diff line number Diff line change
Expand Up @@ -211,7 +211,14 @@
- 在SSL/TLS 1.0中的漏洞:记录$\#i$的$IV$是上一个记录$\#(i-1)$的密文块。
- OpenSSL中API:需要用户输入$IV$,但$IV$应在函数内实现。当$IV$不充分随机时不安全。

31. 选择密文攻击 **Chosen-Ciphertext Attacks (CCA)**
31. 非确定性加密

- 有三种通用的实现CPA安全的非确定性加密方法:
- 随机化的:$r$随机生成,如构造5;需要更多熵,长密文
- 有状态的:$r$为计数器,如CTR模式;需要通信双方同步计数器
- 基于Nonce的:$r$只用一次;需要保证只用一次,长密文

32. 选择密文攻击 **Chosen-Ciphertext Attacks (CCA)**

- CCA不可区分实验 $\mathsf{PrivK}^{\mathsf{cca}}_{\mathcal{A},\Pi}(n)$:

Expand All @@ -222,7 +229,7 @@

定义:一个加密方案是CCA安全的,如果实验成功的概率与1/2的差异是可忽略的。

32. 理解CCA安全
33. 理解CCA安全

- 在现实世界中,敌手可以通过影响被解密的内容来实施CCA。如果通信没有认证,那么敌手可以以通信参与方的身份来发送特定密文。

Expand All @@ -238,7 +245,7 @@

- 问题:上述操作模式也不是CCA安全的(作业)

33. Padding-Oracle(填充预言机)攻击真实案例
34. Padding-Oracle(填充预言机)攻击真实案例

- CAPTCHA服务商为Web网站提供验证用户是否为人类的服务。为此,一个CAPTCHA服务器与Web服务器间事先共享一个密钥$k$,服务工作原理如下:
1. 当Web服务器验证用户是否为人类时,生成一个消息$w$并以$k$加密,向用户发送一个密文$Enc_k(w)$;
Expand All @@ -247,7 +254,7 @@
4. 用户根据图像获得 $w$ 并将 $w$ 发送给Web服务器。
- 在第2步,当恶意用户可以利用CAPTCHA服务器会返回给用户坏填充错误这一漏洞,来实施填充错误攻击。

34. Padding-Oracle(填充预言机)攻击
35. Padding-Oracle(填充预言机)攻击

- 在PKCS #5 padding(填充)标准中,为了将一个消息的长度“填充”到块长度的整数倍,在最后一个块中填充$b$个字节的$b$;必要时,添加一个哑块(dummy block)。存在一种攻击手段:当填充错误时,解密服务器返回一个“坏填充错误”,这相当于提供了解密预言机,最终可以获得整个明文;
- 具体攻击原理是,更改密文(包含$IV$)并发送给解密服务器。一旦触发了“坏填充错误”,则说明对密文的更改导致了填充内容的更改;否则,对密文的更改导致了原明文的更改;
Expand All @@ -258,7 +265,7 @@
- 上述明文首个字节一定不是$b$,这是填充格式错误,会触发服务器返回错误;
- 如果上面的尝试没有触发错误,那么说明消息非空;下一步,发现消息长度是否为1字节,方法与上一步一样,区别在于只改变$IV$的第2个字节;如此继续,获得消息的长度;(作业)

35. Padding-Oracle攻击(续)
36. Padding-Oracle攻击(续)

- 一旦获得消息的长度,也就知道了填充的长度$b$,采用下面的方法来获得消息的最后一个字节内容,进而获得整个消息;
- 更改密文中倒数第二块,来获得消息的最后一个字节$s$;
Expand All @@ -268,7 +275,7 @@
- 解密获得最后一块明文$m'_{last} = c_{last-1} \oplus m_{last} \oplus c_{last-1}' = \cdots (s \oplus t \oplus u)\| \{ b+1 \}^b$;
- 如果没有返回坏填充错误,那么意味着填充了$b+1$个字节的$b+1$,所以 $s \oplus t \oplus u = (b+1)$ ,而 $s = t \oplus u \oplus (b+1) $ 。

36. 总结
37. 总结

-

Expand Down
68 changes: 34 additions & 34 deletions notes-Chinese/4 伪随机排列的实践构造-块密码.md
Original file line number Diff line number Diff line change
Expand Up @@ -20,14 +20,18 @@
- 一个$n=112$的加密方案,可以在$2^{56}$时间内被破解是不安全的;
- 在渐进设定中,尽管$2^{\frac{n}{2}}$是指数,但与上面的例子一样,实际可能不安全;

4. 混淆-扩散范式(**The Confusion-Diffusion Paradigm**
4. 漫画

-

5. 混淆-扩散范式(**The Confusion-Diffusion Paradigm**

- 目标:构造“简洁”的看上去随机的排列;强调“简洁”的原因在于直接存储随机排列所需的空间太大,需要 $2^{n\cdot 2^n}$ 比特;
- 为此,香农提出了一种实现伪随机排列的方法——混淆-扩散范式;
- 混淆:令密钥和密文的关系尽可能地复杂和难懂;一个大的随机排列$F_k(x)$可以由若干小随机排列$f_i(x_i)$来构造,将一个大输入分为若干小输入,$F_k(x) = f_1(x_1)f_2(x_2) \cdots f_{i}(x_{i})$;
- 扩散:在明文统计特征中的冗余性在密文统计特征被消去;其中,统计“冗余性”是指明文中一部分信息可以从;

5. 替换-置换网络(**Substitution-Permutation Network**
6. 替换-置换网络(**Substitution-Permutation Network**

- 一种混淆-扩散范式的设计是替换-置换网络(SPN),如图所示:
1. 明文首先与密钥混合(例如,异或);进行混淆
Expand All @@ -36,12 +40,12 @@
4. 进入下一轮
- 一个关键点是在结尾需要有一次密钥混淆操作,否则最后一轮替换和置换操作都是无效的;

6. 设计原则1——S盒的可逆性
7. 设计原则1——S盒的可逆性

- S盒必须是可逆的,否则块密码不是排列;这可以从SPN构造中观察到,其中密钥混合(异或)和P盒(置换)都是排列操作,为了令SPN是排列,那剩下的S盒必须是可逆的;
- 定理:令$F$为一个带密钥的函数,该函数由一个SPN定义,其中的S盒是1对1的且满射。无论密钥生成方案和轮次,$F_k$是对于任意$k$都是一个排列;

7. 设计原则2——雪崩效应(**Avalanche Effect**
8. 设计原则2——雪崩效应(**Avalanche Effect**

- 雪崩效应:改变输入的一个比特影响输出的每个比特;
- 严格雪崩条件:一个输入比特取补,每个输出比特都有50%的概率改变;
Expand All @@ -50,7 +54,7 @@
- P盒:每个S盒的输出都被扩散到下一轮的不同S盒;
- 问题:对于4比特的S盒,改变输入的1个比特,在经过$R$轮的SPN后,影响输出的$2^R$个比特;

8. 一个针对块密码的KPA框架
9. 一个针对块密码的KPA框架

- KPA:知道同一密钥下的若干明文/密文对;
- 分析步骤:
Expand All @@ -66,7 +70,7 @@
- 搜索:密钥空间$k=16$比特;通过测试的概率是$2^{-16}$;
- 确定:使用$p=1$对明文/密文对来确定密钥,期望为$1$;

9. 攻击轮次减少的SPN(作业)
10. 攻击轮次减少的SPN(作业)

- 攻击一个2轮SPN:64比特块,128比特密钥(2个64比特子密钥),16x4比特的S盒,以及用异或来实现密钥混合;
- 根据图中关系可以观察到,根据明文和密文知道的20个比特,密钥中未知的20个比特,以及4个比特来比较;
Expand All @@ -75,21 +79,21 @@
- 需要8对明文/密文对来确定密钥使得期望小于1,期望$2^{20-4\times 8}$;
- 破解的复杂性为$8\cdot 2^{20} \cdot 16= 2^{27} \ll 2^{128}$ ,其中,8是明文/密文对数,16是S盒数量(因为每次猜测只覆盖1个S盒对应的第2个子密钥中4个比特);

10. Feistel网络
11. Feistel网络

- 为了构造排列,要求SPN网络中S盒是可逆的,这对S盒的设计提出了要求;那么,能不能放松对S盒设计需求,同时保留排列的?
- Feistel网络可以满足上面的需求:从若干非可逆组件构造一个可逆函数;
- $L_i := R_{i-1}$ 并且 $R_i := L_{i-1} \oplus f_i(R_{i-1})$;
- 求逆: $L_{i-1} :=\ ?$
- Luby-Rackoff定理:无论mangler函数$f_i{}$和轮次,对于任意$k$,$F_k$是一个排列;

11. Feistel网络的例题
12. Feistel网络的例题

- 问题:当输入($L_0, R_0$)是下面两个情况中之一时,一个$r$轮Feistel网络的输出是什么?
- 每个轮函数输出都是$0$,无论输入是什么;
- 每个轮函数输出都是一个恒等函数,即输入和输出相同;

12. DES设计
13. DES设计

- 16轮的Feistel网络;64位块;56位密钥,48位子密钥 (64位密钥带有8个校验位)
- 密钥编排: 56 bits $\xrightarrow[\text{left rotation, PC}]{\text{divided into two halves}}$ 48 bits.
Expand All @@ -98,29 +102,29 @@
- $f_i$ 由mangler函数 $\hat{f}_i$ 和子密钥 $k_i$ 来确定;
- $S$盒是 4 到1 函数,将6位映射为4位;

13. DES算法概览
14. DES算法概览

-

14. DES的Mangler函数
15. DES的Mangler函数

-

15. DES中S盒例子
16. DES中S盒例子

-

16. 密钥编排
17. 密钥编排

-

17. 弱密钥
18. 弱密钥

- 弱密钥:DES的密钥编排会产生相同的子密钥
- 半弱密钥:产生两个不同的子密钥
- 这些情况发生时,应该更换密钥

18. DES编年史
19. DES编年史

- DES经历了一个从成为加密标准到安全性不足、到安全性增强、到被彻底破解的历程;

Expand All @@ -136,14 +140,14 @@
- [2006] COPACOBANA 在9天内花费1万美元破解DES;
- [2008] RIVYERA 在1天内破解 DES;

19. 双重加密
20. 双重加密

- 为了弥补DES密钥长度不足的缺点,增强加密安全性有两种思路:从内部修改 vs. 黑盒构造;
- 从内部修改不可行,因为即使以最小的方式修改DES,也将失去我们已经从DES获得的信心;
- 双重加密:$y = F'_{k_1,k_2}(x) \overset{\text{def}}{=} F_{k_2}(F_{k_1}(x))$;
- 密钥长度乘2会更安全吗?

20. 中间相遇攻击(**The Meet-In-the-Middle Attack**
21. 中间相遇攻击(**The Meet-In-the-Middle Attack**

- 双重加密在**中间相遇攻击(MITM)**下并不比原本的DES更安全;

Expand All @@ -155,7 +159,7 @@
- $\mathcal{O}(2^n)$ 时间复杂性并且 $\mathcal{O}(2^n)$ 空间复杂性,这是一种典型的空间换时间的设计;
- 可见,双重DES在时间复杂性上与DES没有区别。

21. DESX(XEX模式)
22. DESX(XEX模式)

- 为了增强DES并对抗中间相遇攻击,DESX通过**密钥白化**来增加有效密钥长度;
- **白化(whitening)**:一个**xor-enc-xor(XEX)**模式,用部分密钥来与输入和输出进行异或;
Expand All @@ -164,15 +168,15 @@
- 解密 $x = k_1\oplus F^{-1}_{k_2}(y \oplus k_3)$;
- 安全性:$|k|=184$,在MITM攻击下,破解所需时间 $2^{64+56}$;原因在于,为了获得中间值需要从输入或输出中一个方向猜测2个密钥;

22. 三重加密(**Triple Encryption**
23. 三重加密(**Triple Encryption**

- 三重DES **Triple-DES (3DES)**:以连续的加密,解密,加密三个DES来加密明文,根据密钥选择分三种情况:
- $k_1 = k_2 = k_3$: 相当于一次DES,向后兼容,即采用该方案的通信方可以与采用普通DES的通信方互相通信;
- $k_1 \neq k_2 \neq k_3$: 在MITM攻击下,破解时间为 $2^{2n}$ ;这与DESX类似,某个方向需要猜测两个密钥;
- $k_1 = k_3 \neq k_2$: 只有两个不同密钥,用一个I/O对的破解时间为 $2^{2n}$ ; 用$2^{n}$个I/O对的破解时间为 $2^n$;
- 安全性更强,但块长度仍然不变并且更慢;

23. 高级加密标准 AES(**The Advanced Encryption Standard**
24. 高级加密标准 AES(**The Advanced Encryption Standard**

- 1997年,NIST召集高级加密标准 AES提案;
- 2001年,J. Daemen 和 V. Rijmen设计的Rijndael成为AES;
Expand All @@ -185,11 +189,11 @@
- 对于 8/12轮的192位密钥,$2^{188}$ 时间;
- 对于 8/14轮的 256位密钥,$2^{204}$ 时间;

24. AES概览
25. AES概览

- 动画

25. 线性密码分析(**Linear Cryptanalysis**
26. 线性密码分析(**Linear Cryptanalysis**

- 下面内容来自于“[A Tutorial on Linear and Differential Cryptanalysis](https://www.engr.mun.ca/~howard/PAPERS/ldc_tutorial.pdf)

Expand All @@ -209,19 +213,19 @@
2. 构造带有较大偏差的$r$轮SPN的前$r-1$轮的线性近似关系,从而建立了明文和最后一轮输入的线性关系;
3. 根据已知的最后一轮输入和输出提取最后一轮的子密钥中若干比特,这部分密钥满足上一步建立的线性近似关系;

26. 一个对S盒进行线性分析的例子
27. 一个对S盒进行线性分析的例子

- 以一个4位到4位的S盒为例,图中表格按列分为三个部分:$X$各比特值,$Y$各比特值,线性关系($X$中若干比特异或值,$Y$中若干比特异或值,本例子中列出了3组);按行共16行,每行对应一个$X$值,内容包括(由S盒决定的)相应的$Y$值和线性关系;
- 以第一行为例,$X=0000$,根据S盒构造可知$Y = 1110$;第一组线性关系,$X_2 \oplus X_3 = 0 \oplus 0 = 0$,$Y_1 \oplus Y_3 \oplus Y_4 = 1 \oplus 1 \oplus 0 = 0$;
- 统计$X_2 \oplus X_3 $等于$Y_1 \oplus Y_3 \oplus Y_4 $的情况,一共12个;偏差为$12 - 16/2 = 4$;

27. 一个线性分布表的例子
28. 一个线性分布表的例子

- 将$X$/$Y$中选择的比特位置表示为一个16进制整数来作为行号/列号,其中选中的位置为1,未选中的为0;例如,$X_2 \oplus X_3 $中选择了第2、3比特,表示为0110 = 6;$Y_1 \oplus Y_3 \oplus Y_4 $中选择了第1、3、4位,表示为1011 = B;
- 根据此前对S盒的线性分析结果在表格中填入偏差;例如,$(6, B)=4$;
- 至此,我们可以认为S盒被“穿透了”:找到了S盒上输入与输出的线性关系;

28. 一个线性密码分析的例子
29. 一个线性密码分析的例子

1. 从上向下,第一轮S盒线性分析结果为$S_{1,2}$: $x_1 \oplus x_3 \oplus x_4 = y_2$;其中,S盒输入$x_1, x_3, x_4$为明文和第一轮子密钥中$p_5, p_7, p_8$和$k_{1,5}, k_{1,7}, k_{1,8}$的异或值;

Expand All @@ -237,7 +241,7 @@

6. 重复上面的过程,逐渐获得所有密钥;

29. 差分密码分析(**Differential Cryptanalysis**
30. 差分密码分析(**Differential Cryptanalysis**

- 与线性分析类似,但分析的是特定输入差异 $\Delta_X$ 产生特定输出差异 $\Delta_Y$ 的概率 $p \gg 2^{-n}$,

Expand All @@ -250,34 +254,30 @@
- 构造带有较大偏差的$r$轮SPN的前$r-1$轮的差分特征,从而建立了明文和最后一轮输入的差分特征关系;
- 根据已知的最后一轮输入和输出提取最后一轮的子密钥中若干比特,这部分密钥满足上一步建立的差分特征关系;

30. 一个对S盒进行差分分析的例子
31. 一个对S盒进行差分分析的例子

- 以一个4位到4位的S盒为例,图中表格按列分为三个部分:$X$各比特值,$Y$各比特值,差分结果($\Delta_X$下的$\Delta_Y$,本例子中列出了3组);按行共16行,每行对应一个$X$值,内容包括(由S盒决定的)相应的$Y$值和$\Delta_Y$值;
- 以第一行第一列为例,$X=0000$,根据S盒构造可知$Y = 1110$;根据$\Delta_X = 1011$,可知 $X' = \Delta_X \oplus X = 1011$,进而得到 $Y' = 1100$ ,有 $\Delta_Y = Y \oplus Y' = 0010$;
- 统计不同$\Delta_X$时$\Delta_Y$各个值的频率,找出频率较高的情况,例如0010出现了8次;

31. 一个差分分布表的例子
32. 一个差分分布表的例子

- 将$\Delta_X$和$\Delta_Y$用16进制整数来表示,作为行号/列号,其中填入出现频率;例如,$\Delta X = 1011 = B, \Delta Y = 0010 = 2$,出现了8次,于是 $(B, 2) = 8$;
- 至此,我们可以认为S盒被“穿透了”:找到了S盒上差分特征;

32. 一个差分密码分析的例子
33. 一个差分密码分析的例子

- 与线性分析时类似,可以得到$\Delta_P$与$\Delta_U$间关系,而不需要关心中间子密钥;
- 同样从SPN的输出反向分析,猜测第4个子密钥的所有偶数位,满足上面差分特征的就可能是真的密钥;需要$2^8$时间;
- 重复上面的过程,逐渐获得所有密钥;

33. 块密码注释
34. 块密码注释

- 块长度应该足够大;
- 块密码不能抵御消息篡改;
- Padding:填充n个内容为n的字节,或哑块;
- 流密码 与 分组密码:流密码更快但安全性更低,应该采用块密码的“流密码模式”;

34. 漫画

略;

35. 总结

略;
Expand Down
Binary file modified pdf/3.2privatekey.pdf
Binary file not shown.
Binary file modified pdf/4blockcipher.pdf
Binary file not shown.
Loading

0 comments on commit cedc4a5

Please sign in to comment.