分组密码是将明文数字序列按固定长度分组,并使用一个密钥和同一加密算法逐组加密的密码。
二进制明文分组长度 为分组长度或分组规模。明密文空间 。
二进制密钥的长度 为密钥长度或密钥规模。密钥空间 。
安全原则
混淆,扩散
混淆:明文与密钥关系复杂。
扩散:明文和密钥影响尽可能大,隐藏明文的统计特性和结构规律。
DES 数据加密标准
迭代型分组密码算法。
分组长度:64 bit
密钥长度:64 bit
有效密钥长度: 56 bit(去掉8个校验位)
迭代圈数:16 r
圈密钥长度:48 bit

前15次都一样,最后一次不交换。
初始置换IP

它的本质是:将输入每个字节的第 个位集中到输出的一个字节。如第一行 均为 2。
逆变换也是一样的道理,只是将其反转。
圈函数
前15次:
第16次:
f函数

- 输入拓展 48 位,与 48 位轮密钥异或。

- 每 6 位进入 s 盒变换输出 4 位,共计输出 32 位。
非线性变换,s 盒固定,输入第 1,6 位作列、第 2,3,4,5 位作行,查表得到输出。
- 32 位进入 p 盒置换得到输出。

圈密钥生成算法

置换选择1:64 位丢弃最高位,选 56 位,分为两个 28 位。
置换选择2:从56 位,即两个 28 位中选 24 + 24 = 48 位,即为圈密钥。
循环移位人为设计,迭代 16 次后回到初态。
脱密
加密可拆分为两个对合变换:
- Feistel函数:
- 左右块变换:
因为对合变换两次得到自身,故脱密就是圈密钥顺序相反的加密过程。
IDEA 国际数据加密标准
迭代型分组密码算法。
分组长度:64 bit
密钥长度:128 bit
迭代圈数:8 + 1输出 r
圈密钥长度:16 bit 为一块,每圈 6 个, 输出 4 个,共 56 个。
基本运算
圈函数

考试不考,也不太想用这种结构,这里我就不求甚解了。
子密钥生成算法
一开始的 128 位直接作为最开始的 8 个 16 位密钥子块。
然后将 128 位循环左移 25 位,得到随后的 8 个密钥子块。
重复这个过程,直到产生 52 个所需的 16 位密钥子块。
脱密
与加密算法相同,密钥变为脱密密钥。
依然,共处理 和中间块对换 都是对合变换,所以直接再次操作即可。
群运算 需要使用对应的逆变换 。
AES 高级加密标准
也是迭代型分组密码算法。
分组长度:128 bit
密钥长度:128、192 或 256 bit
圈数:10、12 或 14 r

以 128 为例。最开始与原密钥 ,经过 9 轮圈函数,第 10 轮即出口处理变换。
圈函数

字节代替变换
非线性层,混淆&局部扩散

包含两个操作:
每个字节变换为有限域 上的乘法逆元。0 变换为自身:


二元域上的仿射变换:
依然认为规定,查表。
行移位变换
线性混合层,扩散
列混合变换
线性混合层,扩散
圈密钥加
密钥参与层