文章目录
前言
- 本文设计了一个分组密码算法。算法采用Feistel结构,迭代轮数为32轮,其密钥长度为96-bit、分组长度为64-bit。并给出了该算法的一个五轮差分特征,一个三轮线性逼近偏差,一个五轮不可能差分区分器。
- 分组密码时对称密码的核心内容,该密码采用迭代结构,整体结构可分为Feistel结构、SP网络结构以及其他密码结构(IDEA,RC6)等。分组密码的设计主要集中在S盒的设计、置换方法的选择以及寻找更好的密钥扩散协议。
- 根据 Kerckhoffs假设,密码体制的安全性应该依赖于密钥的安全性。密码算法分析主要是攻击者根据密码算法的缺点对密码进行分析以获取密钥。密码系统的攻击手段主要由已知明文攻击、选择明文攻击、唯密文攻击以及选择密文攻击四种。密码算法分析是上述攻击方法的具体实现,主要方法有差分分析、线性分析、不可能差分分析、阶段差分分析、飞来去器攻击等。
对称算法介绍
加密算法
- 32轮Feistel结构。本文算法以
表示64-bit明文, 以
表示64-bit密文。对于i=1,...,32,
。

- 轮函数
,
,S和P分别代表混淆函数和扩散函数,OUT表示经过论函数的输出。

- 混淆层S。8个并行的S盒组成了轮函数F的混淆层。X表示输入S层的32-bit值,z表示输入输入S盒的4-bit值,S(z)表示S盒代换后的4-bit值,S(X)表示输出S层的32-bit值。
,
,
z | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | A | B | C | D | E | F |
E | 4 | D | 1 | 2 | F | B | 8 | 3 | A | 6 | C | 5 | 9 | 0 | 7 |
- 扩散层P。P层对32-bit的值进行置换。
。
z | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | ... | 29 | 30 | 31 | 32 |
1 | 5 | 9 | 13 | 2 | 6 | 10 | 14 | ... | 20 | 24 | 28 | 32 |
解密算法
- 解密算法是加密算法的逆过程。以
作为解密算法的64-bit输入,以
作为64-bit输出,对于j=31,..,0,
。
密钥扩展算法
- 加密密钥MK长度为96-bit,系统参数FK长度为96-bit,轮密钥rk长度为32-bit。
差分分析
- 若密码分析者用穷举方式去破解密钥会花费很多时间,若猜测一个合理的输入S盒的值和输出S盒的值,那么破解密钥所花费的时间将大大减少。差分分析是一种通过分析明文对的差值对密文差值的影响来恢复某些密钥比特的分析方法。同时它也是一种选择明文攻击方法,构造若干个明文串对,每对明文的异或结果相同,观察相应的密文异或结果。非均匀的输出分布将会是成功的差分攻击的基础。
- 差分分布表。令输入对为
,则输入差分为
。令输出对为
,则输出差分为
,那么
是一对差分。对于任意一个a(m-bit)一定有
个输入对。对于同一输入差分,输出差分是不均匀分布的。
b | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | A | B | C | D | E | F | |
a | 0 | 16 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
1 | 0 | 0 | 6 | 0 | 0 | 0 | 0 | 2 | 0 | 2 | 0 | 0 | 2 | 0 | 4 | 0 | |
2 | 0 | 6 | 6 | 0 | 0 | 0 | 0 | 0 | 0 | 2 | 2 | 0 | 0 | 0 | 0 | 0 | |
3 | 0 | 0 | 0 | 6 | 0 | 2 | 0 | 0 | 2 | 0 | 0 | 0 | 4 | 0 | 2 | 0 | |
4 | 0 | 0 | 0 | 2 | 0 | 2 | 4 | 0 | 0 | 2 | 2 | 2 | 0 | 0 | 2 | 0 | |
5 | 0 | 2 | 2 | 0 | 4 | 0 | 0 | 4 | 2 | 0 | 0 | 2 | 0 | 0 | 0 | 0 | |
6 | 0 | 0 | 2 | 0 | 4 | 0 | 0 | 2 | 2 | 0 | 2 | 2 | 2 | 0 | 0 | 0 | |
7 | 0 | 0 | 0 | 0 | 0 | 4 | 4 | 0 | 2 | 2 | 2 | 2 | 0 | 0 | 0 | 0 | |
8 | 0 | 0 | 0 | 0 | 0 | 2 | 0 | 2 | 4 | 0 | 0 | 4 | 0 | 2 | 0 | 2 | |
9 | 0 | 2 | 0 | 0 | 0 | 2 | 2 | 2 | 0 | 4 | 2 | 0 | 0 | 0 | 0 | 2 | |
A | 0 | 0 | 0 | 0 | 2 | 2 | 0 | 0 | 0 | 4 | 4 | 0 | 2 | 2 | 0 | 0 | |
B | 0 | 0 | 0 | 2 | 2 | 0 | 2 | 2 | 2 | 0 | 0 | 4 | 0 | 0 | 2 | 0 | |
C | 0 | 4 | 0 | 2 | 0 | 2 | 0 | 0 | 2 | 0 | 0 | 0 | 0 | 0 | 6 | 0 | |
D | 0 | 0 | 0 | 0 | 0 | 0 | 2 | 2 | 0 | 0 | 0 | 0 | 6 | 2 | 0 | 4 | |
E | 0 | 2 | 0 | 4 | 2 | 0 | 0 | 0 | 0 | 0 | 2 | 0 | 0 | 0 | 0 | 6 | |
F | 0 | 0 | 0 | 0 | 2 | 6 | 2 | 0 | 0 | 0 | 0 | 0 | 0 | 10 | 0 | 2 |
- 五轮差分区分器及差分特征。对于给定的明文差分,得到密文的概率为
- 找到了 五轮差分区分器。就可以一定程度恢复密钥。以8轮迭代为例子。明文满足选择的输入差分,对应的8轮输出密文经过三轮的解密后,对于正确对,用正确的密钥能够满足五轮区分器的尾部,而用错误的密钥,由密文解密回来则是以
概率满足区分器的尾部。
线性分析
- 线性分析简介。通过分析S盒的线性特征,发现明文比特、密文比特盒密钥比特之间可能存在着概率线性关系,即存在一个比特子集使得其中元素的异或表现出非随机的分布。线性密码分析是一种已知明文的攻击方法,已经明文x和密文y,确定密钥k或者k的部分比特。
- 线性逼近表。所谓线性逼近是从输入x和输出y中任意选择若干比特通过异或运算构成一个随机变量
,如果这个随机变量以很大的概率偏向0或者1,就说有概率线性关系,即线性逼近关系。令
表示满足
的8元组
的个数,其中
。线性逼近表中的值要减去8。
b | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | A | B | C | D | E | F | |
a | 0 | 8 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
1 | 0 | 2 | 2 | 0 | 4 | -2 | 2 | 0 | 2 | 0 | -4 | -2 | 2 | 0 | 0 | 2 | |
2 | 0 | 2 | 0 | 2 | 0 | 2 | 4 | -2 | 2 | 0 | 2 | 0 | -2 | -4 | 2 | 0 | |
3 | 0 | 0 | 2 | -2 | 0 | 0 | 2 | 6 | 0 | 0 | 2 | -2 | 0 | 0 | 2 | -2 | |
4 | 0 | -2 | 2 | 0 | -4 | -2 | -2 | 0 | 2 | 0 | 0 | -2 | 2 | -4 | 0 | 2 | |
5 | 0 | 0 | -4 | 0 | 0 | -4 | 0 | 0 | 0 | -4 | 0 | 0 | 0 | 0 | 4 | 0 | |
6 | 0 | 0 | -2 | -2 | 0 | -4 | 2 | -2 | 0 | 4 | 2 | -2 | 0 | 0 | -2 | -2 | |
7 | 0 | -2 | 0 | -6 | 0 | 2 | 0 | -2 | 2 | 0 | -2 | 0 | -2 | 0 | 2 | 0 | |
8 | 0 | 4 | 0 | 0 | -4 | 0 | 0 | 0 | 4 | 0 | 0 | 0 | 0 | 4 | 0 | 0 | |
9 | 0 | 2 | -2 | 0 | 0 | 2 | -2 | 0 | -2 | 4 | 0 | -2 | 2 | 0 | 4 | 2 | |
A | 0 | -2 | 0 | 2 | 0 | -2 | 0 | 2 | 2 | 4 | -2 | 4 | -2 | 0 | 2 | 0 | |
B | 0 | 0 | -2 | -2 | 0 | 0 | 2 | 2 | 0 | 0 | 2 | 2 | 0 | 0 | -2 | 6 | |
C | 0 | 2 | 2 | 0 | 0 | -2 | -2 | 0 | -2 | 0 | 0 | -2 | -6 | 0 | 0 | 2 | |
D | 0 | 0 | 0 | 0 | -4 | 0 | 4 | 0 | -4 | 0 | -4 | 0 | 0 | 0 | 0 | 0 | |
E | 0 | 4 | -2 | -2 | 0 | 0 | -2 | 2 | 0 | 0 | -2 | 2 | 0 | -4 | -2 | -2 | |
F | 0 | -2 | -4 | 2 | 0 | 2 | 0 | 2 | 2 | 0 | -2 | -4 | -2 | 0 | -2 | 0 |
- 三轮线性逼近 。定义偏差
,设取值于
上的随机变量取值为0的概率为p,取值为1的概率为1-p,则偏差
,也就是线性逼近表中的值除以16。偏差的绝对值越大越逼近线性关系。通过掩码表示随机变量的取值,对于64-bit的明文,0B00000000000000表示输入的随机变量为
。

- 可以根据偏差来分析最后一轮的部分子密钥。收集尽可能多的在同一未知密钥加密的T对明密文对。对每个候选密钥分配一个计数器,初始值为0。对每对明密文对,尝试所有候选子密钥,计算随机变量的结果,如果结果为0,则相应的计数器加1。真子密钥对应的计数值接近
,其他接近
。
不可能差分分析
- 不可能差分攻击利用概率为0的差分路径,筛选出满足这条路径的子密钥,以此排除错误密钥。构建不可能差分区分器,常用的方法是中间相遇的方法,即通过加密明文和解密密文得到中间过程来连接两段差分,且这两段差分在中间相连的部分是互相矛盾的。
- 差分特征为
