RijndaeI 算法是一种分组长和密钥长都可变的迭代分组密码算法。
Rijndael密钥生成步骤
Rijndael密钥的轮密钥生成经过了密钥扩展和轮密钥选择两个步骤,其基本原则是:
(1)轮密钥的总位数等于分组长乘以(1 + Nr),如分组长为128bit,轮数为 Nr = 10,则轮密钥的总长为 128 *(10 + 1)=1408bit;
(2)种子密钥扩展为扩展密钥,种子密钥长度为 4*Nk 个字节 ,Nk 是种子密钥字长;
(3)轮密钥由以下方法从扩展密钥中获得:对第 1 轮密钥由前 Nb 个字构成;第 2 轮密钥由第二个 Nb 个字即第 Nb + 1 个字到第 2Nb 个字构成;以下依次类推⋯。
密钥扩展
Subbyte (w)是一个返回 4 个字节的函数,每个字节都是它输入字中相应位置字节通过 S 盒作用后的结果;而函数 Rotbyte (w)返回的是这 4 个字节经循环置换后的字,这个循环置换为:若输入字为(a,b,c,d),则输出字为(b,c,d,a)。可以看出:扩展密钥的前 Nk 个字由种子密钥构成,随后的字w[i]等于字 w[i-1]经一些变换后得到的字 temp 和字[i -Nk]异或而成;而且对位置为 Nk 倍数的字变换中不仅运用了循环左移变换 Rotbyte 和子字节变换 Subbyte,还运用了轮常数Rcon。轮常数定义为:Rcon [i]=(Rc [i], ‘00’, ‘00’, ‘00’)其中 Rc [i]表示在有限域 GF (2 8 )中 x i-1的值,即:Rc [1]= 1 (即‘01’)Rc [i]= x·(Rc[i-1]= xi-1 (即‘02’·(Rc[i-1]))
(2)Nk> 6 时,用类 C 语言描述为:
这与 Nk # 6 的区别在于对指数满足 i - 4 是 Nk 的倍数的字,在异或前只对 w[i-1]进行了子字节变换。
新密钥生成方案
Rijndael 算法的子密钥的前 Nk 个字完全由种子密钥填充而成,这样做虽然密钥的离散性非常好,减少了密钥间的线性关系,但是密钥的雪崩效应就减弱了,同时它的轮密钥是通过递归定义生成的,也就是说,对某一轮的密钥可以由前一轮或几轮的轮密钥推导而来。如果我们知道了这前 Nk 个字的部分密钥字,就可以根据递推公式得到与这些部分密钥字相关的密钥字。当泄露的密钥信息达到一定程度时,其它的种子密钥或许就可以通过穷举法获得,进而获得全部轮子密钥。对于公开的算法来说,如果密钥已知,我们轻而易举地就可以由密文译出明文,信息的保密就受到了威胁。那么,怎样在优化线性关系和雪崩效应的同时提高密钥的保密性呢?从安全的角度来分析,为了使攻击者更难于找到加密密钥特别是种子密钥,我们应该提高密钥生成算法的混淆性来有效抵抗密码攻击。
新的密钥生成算法
取种子密钥的最后一个字的信息,并从低位开始逐次取这个字的四个 bit 进行幻常数运算,幻常数定义为:
Pt = odd ((pi- 2)2 t )其中,t 是种子密钥的最后一个字中的四个 bit,函数 odd (x)是与x最近的奇整数,pi 是圆周率,pi = 3.1415926⋯。这样依次得到8 个 16 位的数组,记为 pt [0],pt [1],⋯,pt [7]。接着,将种子密钥的 Nk 个字与前 Nk 个幻常数数组进行异或,并将结果赋值给轮子密钥的前 Nk 个字,然后用种子密钥去产生第二个 Nk 个字的轮子密钥,以后的轮子密钥用前 Nk 个字节递归生成。生成方法为:对第 Nk 个字用种子密钥进行向左循歪移 5 位,再进行子字节运算得到,而对后 Nk- 1 个字则为前一个字与种子密钥进行异或;以后的每 Nk 个字的轮子密钥都由前 Nk 个字递归生成,使用的运算方法和产生第二个 Nk 个字运算方法一样。这个密钥生成算法用类 C 语言描述为:
(1)Nk <6 时
(2)Nk> 6 时
新密钥生成算法的分析
新密钥生成算法克服了 Rijndael 算法的密钥生成方案易暴露种子密钥的特点,这是由于新的密钥生成方法生成的轮子密钥的前 Nk 个字不是种子密钥,而是取了种子密钥的最后的一个字信息进行幻常数计算,再与种子密钥进行异或运算,这样即使有人获得了轮子密钥的前 Nk 个字的部分字,也不能得到大量的种子密钥的信息。同时,幻常数的计算也不再是 RC6 中对 t 取固定值 16、32 或 64,而是取种子密钥的一部分。为了计算的便利并尽可能使轮密钥不泄露更多的种子密钥信息,我们取了四个 bit 并采用了常数π,这样幻常数的最大值为 37405 (十六进制为 921D)。为了避免出现和 Rijndael 一样的问题,新的密钥扩展算法的第二个 Nk 个字不是由第一个 Nk 个字生成,而是由种子密钥生成,这样也增强了密钥间的相关性,进一步改善了密钥的雪崩效应。随后密钥的生成遵从了原密钥扩展算法的思想:简单、快速,同时在兼顾抗线性和具有良好的雪崩效应之间有最优的选择。
新密钥生成算法的另一个优点是:对密钥字进行向左循环移 5 位,增强了密钥的抗差分分析的能力。市场上根据对密钥扩展算法的研究开发了许多软件工具,这些软件工具能从大量数据中非常有效、迅速地找到密钥。尽管这些软件是针序为 AC、CB、BA 的循环。