1. 块密码(block cipher)定义
将明文消息编码表示后的二进制序列,划分成固定大小的块,每块分别在密钥的控制下变换成等长的二进制序列。
- 密文块的任意一位与明文块的所有位相关,从而如果明文的单个位发生了变化,那么平均将有一半的密文块的位也要发生变化
- 区别于夺标代换密码:维吉尼亚密码中,明文块中单个字符的改变只是导致密文块中单个字符的改变。

1.1. Number of keys for ideal block cipher

2. 设计原则
Shannon:混淆原则和扩散原则 (**Confusion and Diffusion
**)
- 混淆
- 所设计的密码应使得密钥和明文以及密文之间的依赖关系相当复杂,以至于这种依赖性对密码分析者来说是无法利用的
- 代换
- 扩散
- 所设计的密码应使得密钥的每一位数字影响密文的许多位数字,以防止对密钥进行逐段破译
- 置换
SP网络(Substitution Permutation Network)
- 代换-置换网络
- 迭代密码的一种
3. Feistel密码结构

要素
- 分组长度
- 密钥长度
- 轮函数复杂性
- 迭代轮数
- 子密钥的生成方法
3.1. construction detail

4. DES(数据加密标准)
- 明文组长度:64比特
- 密钥长度:64比特
- 实际只使用56比特
- 其它用作奇偶校验
- 加密过程包括16轮编码
- 在每轮编码中,DES从56位密钥中产生出一个48位的临时密钥,并用这个密钥进行这一轮的加密
过程

- Key schedule
- (选择置换1)从64位输入密钥中选出56位的密钥—剩下的8位要么直接丢弃,要么作为奇偶校验位
- 56位分成两个28位的半密钥
- 两个半密钥都被左移1或2位(由回次数决定)
- (选择置换2)将两个28结合,并选择置换后产生48位子密钥Subkey
- Expansion Permutation

- S-box Substitution

具体算法

- P-box permutation

- XOR and swap

4.1. 安全性
- 密钥的长度问题
- 1999年在超级计算机上只要22小时
- 弱密钥
- 在产生密钥时初始密钥分成两半,以后各自独立地移位
- 若每一半都是0或都是1,则所有密钥都是相同的
- DES密码有良好的雪崩效应(Avalanche Effect)
- 输入1bit变化会导致一半输出的变化
- DES不能抵御时序工具差分分析、线性分析
- 时序攻击:Timing Attacks
攻击者试图通过分析执行密码算法所需的时间来破坏一个密码系统。计算机中的每一个逻辑操作都需要时间来执行,而时间可以根据输入而不同;有了对每个操作时间的精确测量,攻击者就可以倒推到输入。通过时间信息寻找秘密可能比使用已知明文、密码文本对的密码分析要容易得多
- 时序攻击:Timing Attacks
- 差分分析: differential cryptanalysis. 一种选择明文攻击,系统地研究明文中的一个细小变化是如何影响密文的
- 线性密码分析: Linear Cryptanalysis. 寻找明文、密文和密钥间的有效线性逼近,当该逼近的线性偏差足够大时,就可以由一定量的明密文对推测出部分密钥信息
4.2. 2DES
- Meet-in-the-middle attack
- 对二重DES的攻击:中途相遇攻击
- 抵抗中途相遇攻击的一种方法是使用3个不同的密钥做3次加密一一三个密钥的三重DES

4.3. 3DES Triple DES(TDEA)
- ede mode Encrypt-decrypt-encrypt (EDE)
- 还有另一种eee mode Encrypt-encrypt-encrypt
- 密文 = EK3(DK2(EK1(明文))),也就是说,使用K1为密钥进行DES加密,再用K2为密钥进行DES“解密”,最后以K3进行DES加密。
- 三重资料加密算法(3DES)使用了三把56 bits的秘钥(168 bits),却只有两把秘钥的强度(112 bits)
加密-解密-加密(EDE)是首选的方法,因为如果一个单一的密钥被用于所有3个操作,它相当于常规的56位DES。也就是说,一个56位的DES实现可以解密该信息。这使得这个版本的3DES与DES向后**兼容(即k1=k2)**。
不过,加密-加密-加密(EEE)也是一种有效的方法。它的有效性不比EDE高或低。然而,由于上述原因,EDE通常是首选。
- 另外一个点是:ede只用2个密钥,eee需要3个
5. AES(高级加密标准)
- 数据分组长度为128位
- 密钥长度为128/192/256位
- AES没有使用Feistel密码结构,解密过程和加密过程是不同的
- AES加密过程是在一个4×4的字节矩阵上运作,这个矩阵又称为“体(state)”,其初值就是一个明文区块(矩阵中一个元素大小就是明文区块中的一个Byte)。各轮AES加密循环(除最后一轮外)均包含4个步骤
- SubBytes:透过一个非线性的替换函数,用查找表的方式把每个字节替换成对应的字节
- ShiftRows:将矩阵中的每个横列进行循环式移位
- MixColumns:使用线性转换来混合每内联的四个字节
- AddRoundKey:矩阵中的每一个字节都与该次回合密钥(round key)(相当于Subkey)做XOR运算
- 最后一个加密循环中省略MixColumns步骤


- key schedule

1 | 密钥扩展过程说明: |
5.1. DES vs AES

