什么是Rijndael?
Rijndael(发音为 rain-dahl)是一种高级加密标准 (AES) 算法。当美国国家标准与技术研究院 (NIST) 选择它作为标准对称密钥加密算法时,它取代了较旧且较弱的数据加密标准 (DES)。
Rijndael 是一种迭代分组密码,这意味着它通过特定转换的迭代或轮次来加密和解密数据块。它支持 128、192 和 256 位的加密密钥大小,并处理 128 位块中的数据。
Rijndael 作为高级加密标准
DES 自 1977 年以来一直在使用。然而,到 2000 年代初,它开始显示出安全弱点。很明显,威胁行为者可以使用暴力攻击并破解 DES。在美国,需要一种更好、更安全的算法来加密敏感的、非机密的联邦信息。2001年,NIST鼓励密码学家提出一种更具弹性的算法,以取代DES来加密关键任务数据。
提出了五种算法——MARS、Rivest Cipher 6、Serpent、Twofish 和 Rijndael。
最终,NIST选择了Rijndael作为AES。在确认其选择之前,NIST从几个因素评估了Rijndael,包括安全性,成本和实施。之所以选择Rijndael,是因为它提供了最佳的性能、安全性、效率、灵活性和易实施性。当联邦信息处理标准 197 发布时,NIST 的选择正式确定。
AES 在美国获得批准,可用于需要高级安全许可的政府文件。
Rijndael 以其两位创造者的名字命名:比利时密码学家 Vincent Rijmen 和 Joan Daemen。它起源于Square,这是两人设计的另一种算法。这种新算法基于三个基本指导原则改进了Square:
- 它可以抵抗所有已知的攻击。
- 它确保了多个计算平台上的源代码紧凑性和速度。
- 它具有简单的设计。
了解 Rijndael AES
Rijndael 接受输入为创建数据块的一维 8 位字节数组。明文输入映射到状态字节。对应的密码密钥也是一维 8 位字节数组。在算法中,不同的转换在中间密码结果上依次发生:
- 密钥和块大小。Rijndael 可以在不同的数据块和 128、192 或 256 位的密钥大小中运行。AES 128 位密钥是 DES 56 位密钥的 1,021 倍。
- 子项和密钥计划。Rijndael 的密钥调度从密码密钥派生子密钥。密码密钥扩展以创建扩展密钥,子密钥通过派生圆形密钥创建。为了确保安全性并保护算法免受针对其密钥生成方法的密码分析攻击,从不直接指定扩展密钥,而是始终从密码密钥派生。
- 整字节操作。这些运算包括有限域内和矩阵内的加法和乘法。这些字节被视为多项式,从而简化了实现。
莱恩代尔的主要时间表
密钥时间表根据 Rijndael 中密钥的长度而有所不同。
具有 128 位和 192 位长度的密钥
子键材料由按顺序排列的所有圆形键、原始键和拉伸键组成。每个延伸段由 4 字节字组成,其长度与原始密钥相同。每个字都是前一个 4 字节字的 XOR。
拉伸中的第一个单词向左旋转 1 个字节。然后使用来自 Byte Sub 步骤的 S-box 进行字节转换,然后使用与轮相关的常量进行 XOR 到第一个字节。
具有 256 位长度的密钥
在这里,仅来自 Byte Sub 步骤的 S-box 就应用于前一个延伸中的单词,用于延伸中的第五个单词。
Rijndael的工作
在 Rijndael 中,加密通过一系列矩阵转换或轮次进行。轮数是可变的,具体取决于使用的密钥或块大小:
- 128 位 = 9 轮
- 192 位 = 11 发子弹
- 256 位 = 13 发
Rijndael 算法基于逐字节替换、交换和 XOR 操作。具体操作步骤如下:
- 该算法从 128 位密钥生成 10 个 128 位密钥,这些密钥存储在 4x4 表中。
- 明文分为 4x4 个表,每个表的大小为 128 位。
- 如上所述,每个 128 位纯文本片段都经过可变数量的轮次。代码在第 10 轮之后生成。
每轮由四个步骤组成:
- 字节子。块的每个字节都替换为其在 S-box 中的替代项。
- 移位行。在由 1 到 16 字节组成的块中,字节排列成矩形并根据块大小进行移动。
- 混合柱。在这里,执行矩阵乘法,其中每列乘以矩阵。要相乘的字节被视为多项式,而不是数字。当结果超过 8 位时,通过将二进制 9 位字符串100011011与结果进行异或运算来抵消多余的位。此技术类似于循环冗余检查中使用的技术。
- 添加 Round 键。在这里,当前轮次的子项是 XORed。
当使用不同的圆键多次执行 Rijndael 时,其安全性显着提高。
Rijndael的优势和应用
与 DES 和 Triple DES 相比,Rijndael 具有许多优势。
首先,它的块大小可以反映它们各自密钥的大小,这使得该算法超出了 AES 设计条件所需的限制。它也很容易实现,只需简单的组件和易于验证的特性。此外,Rijndael 在软件方面的工作速度是 DES 的三倍。在 Rijndael 中,可以使用 160 位或 224 位密钥。该算法还支持 160 或 224 位的块大小。这样可以在加密期间的转换轮次中实现更大的灵活性。
Rijndael 所基于的 Square 分组密码容易受到多次网络攻击。Rijndael 通过使用交替的混合列和混合行转换来抵御此类攻击,从而提高了这种旧算法的安全性。由于密钥长度可以根据需要变化,因此该算法对于许多实际应用程序也是安全的,尤其是在添加更多转换轮次时。
这就是为什么 Rijndael 非常适合安全交换密钥和传输长度为 128 或 256 位的数据。
与作为 AES 候选者的其他算法相比,Rijndael 针对以下问题提供了强大的安全性:
- 线性密码分析
- 差分密码分析
- 机会主义攻击
- 强力攻击
- 定时攻击
Rijndael 还具有较低的内存要求,这使其适用于空间受限的环境。其丰富的代数结构使得可以轻松快速地评估其安全性。此外,它还在许多计算平台和硬件和软件环境中提供高效率和高性能,包括:
- 大型阵列
- 桌面
- 笔记本 电脑
- 移动设备
- 智能卡
Rijndael的缺点
Rijndael 可能容易受到一种称为方形攻击的攻击。但是,实际上,这种攻击不会损害算法的安全性。
该算法还受到其逆密码的限制,该密码需要更多的代码和周期,因此不适合某些实现。