什么是信息安全中的 Feistel 密码?
Feistel 密码是一种在构建基于块密码的算法和结构中使用的密码学方法。Feistel 网络在信息块上实现一系列迭代密码,并且通常设计用于加密大量数据的块密码。
Feistel 网络通过将数据块分成两个相同的部分并使用多轮加密来工作。每一轮都实现来自主函数或密钥的排列和序列。实现 Feistel 网络的每个密码的轮数都不同。
Feistel 密码是一种多轮密码,它将密码的当前私有状态分成两部分,并且在每一轮加密或解密中只对其中一部分进行操作。
Feistel 提出可以使用产品密码的概念来近似概念块密码,产品密码是指以某种方式依次执行两个或多个简单密码,使得最终结果或产品在密码学上优于任何一个组成密码。
该方法的本质是创建一个密钥长度为 k 位、块长度为 n 位的块密码,从而能够实现总共 2k 种可能的转换,而不是理想块密码可用的 2n! 种转换。
Feistel 提出使用交替进行替换和置换的密码,其中这些方法定义如下:
替换 - 每个明文组件或组件集都被唯一地恢复为相应的密文组件或组件集。
置换 - 明文组件的顺序通过该顺序的置换重新保存。也就是说,在序列中没有插入、删除或替换元素,而是改变元素在序列中出现的顺序。
Feistel 密码被称为密钥调度,它作为密码每一轮的输入。密钥调度有两个可用的选择。
第一个是密码每一轮的密钥(或“轮密钥”)包含在双方共享的密钥中(导致一个高共享密钥)。
另一种选择是将共享密钥用作“密钥扩展”函数的输入,该函数对上一轮密钥或密钥生成算法的当前内部状态执行某些操作以创建下一轮密钥。
K 函数将原始密钥转换为加密每一轮的轮密钥。应选择此函数以支持加密函数的密钥空间。
如果需要 64 位密钥,但在类似情况下有效密钥空间缩小到 32 位,因此攻击者只需要搜索 32 位密钥的空间即可解密密文。