Feistel密码结构相关知识

1. 分组密码介绍

        分组密码作用于n位明文分组,产生n位密文分组。共有2^{n}个不同的明文分组,由于加密是可逆的(即可以解密),因此每个明文分组将唯一的对应一个密文分组。这样的变换称可逆变换或非奇异变换。

        若限定于可逆映射,则不同变换的总数是2^{n}!个。

2. 理想分组密码的困难性

        对于Feistel分组密码,当n较小时,密码系统等价于传统代替密码,利用明文的统计分析方法攻击它很容易。如果n足够大,并且允许明密文之间采用任意的可逆变换,那么明文的统计特性将被掩盖。

        从实现和运行的角度看,采用大规模分组的任意可逆代替密码(即理想分组密码)是不可行的。对于这样的变换,映射本身就是密钥,对于n=2的一个可逆映射,这个映射可以直接由表中的第二列来定义,他给出了每个明文对应的密文。本质上它就是决定所有可能映射中的某个映射的密钥。在这种情况下,运用这种直接的方法定义密钥,密钥长度为(2位)×(4行)=8位。一般来说对于n位代替分组密码,密钥的规模是n\times 2^{n}位,对于一个64位分组密钥,若分组具有抵抗统计攻击的理想长度,则其密钥大小为64\times 2^{64}=2^{70}=10^{21}位。

代替密码的加解密表
0011
0110
1000
1101

3. Feistel密码

        Feistel密码使用乘积密码的概念来逼近理想分组密码,乘积密码是指依次使用两个或以上的基本密码,所得结果的密码强度强于所有单个密码的强度。这种方法的本质是开发一个分组密码,密钥长度为k位,分组长度为n位,采用2^{k}个变换,而不是理想分组密码的2^{n}!个可用变换。

4. 扩散和混淆

        Shannon关注于如何挫败基于统计方法的密码分析。在Shannon所指的强理想密码中,密文的所有统计特征都是独立于所用密钥的。前面所说的任意代替密码就是这样一种密码,不过它是不可能获得实际应用的。舍弃对理想系统的追求,Shannon提出了两种对付统计分析的方法:扩散和混淆。

        扩散:使明文的统计特征消散在密文中。

        这可以通过让每个明文数字尽可能地影响多个密文数字获得,等效于每个密文数字被许多明文数字影响。

        混淆:使密文和加密密钥间的统计关系变得复杂。

        这可以使用一些复杂的代替算法来实现,简单的线性代替函数几乎增加不了混淆。

5. Feistel密码结构

        Feistel结构的具体实现依赖于以下参数和特征。

        分组长度:分组越长意味着安全性越高(其他数据不变),但会降低加解密的速度,这种安全性的增加来自更好的扩散性。

        密钥长度:密钥较长同样意味着安全性较高,但会降低加解密速度。这种安全性的增加来自更好的抗穷尽攻击能力和更好的混淆性。

        迭代轮数:Feistel密码的本质是单轮加密不能提供足够的安全性,而多轮加密可获得很高的安全性。迭代轮数的选择标准是使密码分析的难度大于简单穷举攻击的难度。

        子密钥生成算法:子秘钥生成越复杂,密码分析就越困难。

        轮函数F:轮函数越复杂,抗攻击能力就越强。F的一个明显准则是非线性,F的非线性成分越多,分析就越困难。

        注意:Feistel结构在第16轮迭代之后还有一个交换,以抵消最后一轮迭代中的那个交换,可以从图中去掉两个交换,但这样会使问题的表述不一致。无论如何,去掉最后一轮中的交换将会使解密更简单。

6. 证明Feistel解密是加密的逆过程

        我们用LE_{i}RE_{i}表示加密过程的中间数据,用LD_{i}RD_{i}表示解密过程的中间数据。实际上,每轮解密过程中间值与加密过程中间值左右互换的结果是相同的。换句话说,第i轮加密的输出是LE_{i}||RE_{i},解密的第16-i轮的相应输入是RE_{i}||LE_{i}LD_{16-i}||RD_{16-i}

        现证明解密过程第一轮的输出等于加密过程第16轮的输入左右部分互换的值:

        加密过程的最后一轮迭代后,输出数据的左右两部分互换,所以密文是RE_{16}||LE_{16}。现在将其作为解密过程第一轮的输入。

        加密过程第16轮的输入为LE_{15}||RE_{15}

        解密过程第1轮的输出为LD_{1}||RD_{1}

        LD_{1}=RD_{0}=LE_{16}=RE_{15}

        RD_{1}=LD_{0}\oplus F(RD_{0},K_{16})\\.\; \; \; \; \; \; =RE_{16}\oplus F(LE_{16},K_{16})\\.\; \; \; \; \; \;=LE_{15}\oplus F(RE_{15},K_{16})\oplus F(RE_{15},K_{16})\\.\; \; \; \; \; \;=LE_{15}

        既解密过程第一轮的输出为RE_{15}||LE_{15}。证毕。

        对于其他各轮,亦有相同的结论。

        最后我们可以注意到解密过程最后一轮的输出是RE_{0}||LE_{0},左右互换后的结果正是原始明文,说明Feistel密码的解密过程是正确的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值