Rijndael密码算法

一 什么是Rijndael

Rijndael是由比利时密码学家设计的分组密码算法,于2000年被选为新一代的标准密码算法——AES。今后会有越来越多的密码软件支持这种算法。

Rijndael的分组长度和密钥长度可以分别以32比特为单位在128比特和256比特的范围内进行选择。不过在AES的规格中,分组长度固定为128比特,密钥长度只有128、192和256比特三种。

二 Rijndael的加密和解密

Rijndael算法也是由多轮构成的,其中每一轮分为SubBytes、ShiftRows、MixColumns和AddRoundKey4个步骤。它使用的是SPN结构。

1 SubBytes

Rijndael的输入分组为128比特,也就是16个字节。首先,需要逐个字节对16字节的输入数据进行SubBytes处理。所谓SubBytes处理,就是以每个字节的值(0-255的任意值)为索引,从一张拥有256个值的替换表中查找出对应值的处理。也就是说,将一个字节的值替换成另外一个字节的值。用图表示如下:

2 ShiftRows

以4个字节为单位的行(row)按照一定的规则向左平移,且每一行平移的字节数是不同的。下图是对其中一行进行处理的情形。

3 MixColumns

对一个4字节的值进行矩阵运算,将其变为另外一个4字节值,下图是对其中一列进行处理的情形:

4 AddRoundKey

对MixColumns的输出与轮密钥进行XOR,即进行AddRoundKey处理,下图展示了对1个字节进行处理的情形。

到此1轮迭代就结束了。实际上,在Rijndael中需要重复10到14轮计算。

Rijndael的加密过程,每一轮进行的处理为:

SubBytes->ShiftRows->MixColumns->AddRoundKey

Rijndael的解密过程,顺序相关:

AddRoundKey-> InvMixColumns-> InvShiftRows ->InvSubBytes

其中AddRoundKey是与轮密钥进行XOR运算,这一步在加密和解密时完全相同的。

其他三个步骤见下面三张图:

InvMixColumns:

InvShiftRows :

InvSubBytes:

三 Rijndael的破译

对Rijndael来说,每一步都是用数学公式来表达的,这是以前任何密码算法都不具备的性质。如果Rijndael的公式能够通过数学运算来求解,那就意味Rijndael能够通过数学方法进行破译,而这也就为新的攻击方式的产生提供了可能。

不过这还是一种假设,实际上,到现在还没出现针对Rijndael的有效攻击。

四 应该使用哪种对称密码算法

针对DES、3DES和AES对称密钥,到底选哪一种?

首先DES、3DES已经不安全了,不会再应用到任何新的用途。

现在大家应该使用AES(Rijndael),因为它快速、安全,并且能够在各种平台上工作。此外,全世界密码学家都在对AES进行不断的验证,因此即便万一发现它有什么缺陷,也会立刻告知全世界并修改这些缺陷。

AES最终候选算法应该可以作为AES的备份。和Rijndael一样,这些密码算法也都经过了严格的测试,且没发现任何的弱点。但NIST最终还是只选择了Rijndael作为标准,并没有官方认可作为最终的备份来使用。

一般来说,我们不应该使用任何自制的密码算法,而应该使用AES。因为AES在其选定过程中,经过了全世界密码学家所进行的高品质的验证工作,而对于自制的密码算法很难进行这样的验证。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值