1. 分组密码介绍
分组密码作用于n位明文分组,产生n位密文分组。共有个不同的明文分组,由于加密是可逆的(即可以解密),因此每个明文分组将唯一的对应一个密文分组。这样的变换称可逆变换或非奇异变换。
若限定于可逆映射,则不同变换的总数是个。
2. 理想分组密码的困难性
对于Feistel分组密码,当n较小时,密码系统等价于传统代替密码,利用明文的统计分析方法攻击它很容易。如果n足够大,并且允许明密文之间采用任意的可逆变换,那么明文的统计特性将被掩盖。
从实现和运行的角度看,采用大规模分组的任意可逆代替密码(即理想分组密码)是不可行的。对于这样的变换,映射本身就是密钥,对于n=2的一个可逆映射,这个映射可以直接由表中的第二列来定义,他给出了每个明文对应的密文。本质上它就是决定所有可能映射中的某个映射的密钥。在这种情况下,运用这种直接的方法定义密钥,密钥长度为(2位)×(4行)=8位。一般来说对于n位代替分组密码,密钥的规模是位,对于一个64位分组密钥,若分组具有抵抗统计攻击的理想长度,则其密钥大小为位。
00 | 11 |
---|---|
01 | 10 |
10 | 00 |
11 | 01 |
3. Feistel密码
Feistel密码使用乘积密码的概念来逼近理想分组密码,乘积密码是指依次使用两个或以上的基本密码,所得结果的密码强度强于所有单个密码的强度。这种方法的本质是开发一个分组密码,密钥长度为k位,分组长度为n位,采用个变换,而不是理想分组密码的个可用变换。
4. 扩散和混淆
Shannon关注于如何挫败基于统计方法的密码分析。在Shannon所指的强理想密码中,密文的所有统计特征都是独立于所用密钥的。前面所说的任意代替密码就是这样一种密码,不过它是不可能获得实际应用的。舍弃对理想系统的追求,Shannon提出了两种对付统计分析的方法:扩散和混淆。
扩散:使明文的统计特征消散在密文中。
这可以通过让每个明文数字尽可能地影响多个密文数字获得,等效于每个密文数字被许多明文数字影响。
混淆:使密文和加密密钥间的统计关系变得复杂。
这可以使用一些复杂的代替算法来实现,简单的线性代替函数几乎增加不了混淆。
5. Feistel密码结构
Feistel结构的具体实现依赖于以下参数和特征。
分组长度:分组越长意味着安全性越高(其他数据不变),但会降低加解密的速度,这种安全性的增加来自更好的扩散性。
密钥长度:密钥较长同样意味着安全性较高,但会降低加解密速度。这种安全性的增加来自更好的抗穷尽攻击能力和更好的混淆性。
迭代轮数:Feistel密码的本质是单轮加密不能提供足够的安全性,而多轮加密可获得很高的安全性。迭代轮数的选择标准是使密码分析的难度大于简单穷举攻击的难度。
子密钥生成算法:子秘钥生成越复杂,密码分析就越困难。
轮函数F:轮函数越复杂,抗攻击能力就越强。F的一个明显准则是非线性,F的非线性成分越多,分析就越困难。
注意:Feistel结构在第16轮迭代之后还有一个交换,以抵消最后一轮迭代中的那个交换,可以从图中去掉两个交换,但这样会使问题的表述不一致。无论如何,去掉最后一轮中的交换将会使解密更简单。
6. 证明Feistel解密是加密的逆过程
我们用,表示加密过程的中间数据,用,表示解密过程的中间数据。实际上,每轮解密过程中间值与加密过程中间值左右互换的结果是相同的。换句话说,第i轮加密的输出是,解密的第16-i轮的相应输入是或。
现证明解密过程第一轮的输出等于加密过程第16轮的输入左右部分互换的值:
加密过程的最后一轮迭代后,输出数据的左右两部分互换,所以密文是。现在将其作为解密过程第一轮的输入。
加密过程第16轮的输入为。
解密过程第1轮的输出为。
既解密过程第一轮的输出为。证毕。
对于其他各轮,亦有相同的结论。
最后我们可以注意到解密过程最后一轮的输出是,左右互换后的结果正是原始明文,说明Feistel密码的解密过程是正确的。