密码学中的扩散和混淆

在学习AES的时候,遇到了两个不太理解的名词:扩散(Diffusion)混淆(Confusion)

浅显的学习了一番之后,大概能给出以下解释:

扩散(Diffusion)混淆(Confusion) 是香农(Claude Shannon)于 1949 年提出的两大核心设计原则,是确保加密算法安全性的基础。二者通过不同的机制对抗攻击者的统计分析和数学推导,共同实现 “明文、密钥与密文之间的关联性被隐藏” 的目标。

也就是说我们不希望攻击者通过观察密文就能够反推出明文和密钥的信息,需要一定的手段淡化规律。

扩散

扩散是指通过变换操作,将明文或密钥中单个比特的变化尽可能扩散到密文的多个比特上,使密文的每一个比特都依赖于明文和密钥的多个比特。

扩散常常通过线性变换来实现,例如AES中的行移位和列混合

在进行行移位之后,让每列的元素掺杂起来

列混合进行矩阵乘法得到的结果又与每列的四个元素都相关

这样通过这两步操作,变动明文中的每个元素都会对最终结果产生巨大的影响

从这个例子可以看出扩散的作用,简单来说就是使得局部可以影响整体

混淆

定义:混淆是指通过变换操作,使密文与密钥之间的关系变得复杂且难以描述,隐藏密钥的统计特征,让攻击者无法通过密文的统计规律推导出密钥的结构或取值。

混淆常常通过非线性变换来实现,例如AES中的S盒

经过S盒的字节替换,输入与输出的结果是非线性的,无法使用线性方程来描述,不存在通过解线性方程组得到密钥的可能。混淆打破密文与密钥的直接关联

这里插一句,S盒是经过严格的优化与论证得到的,能够很好的隐藏统计特征,不是随便填几个数上去就能当S盒来用的