密码学 - AES密钥扩展算法



为了用于AES加密,可以使用AES(高级加密标准)密钥扩展技术将单个初始密钥扩展为一系列轮密钥。这些轮密钥在AES加密和解密的每一轮中都是必需的。

AES密钥扩展方法接收一个四字(16字节)密钥并返回一个包含44个字(176字节)的线性数组。这足以提供初始的轮密钥加步骤以及密码的十轮中的每一轮的四字轮密钥。

AES Key Expansion

算法如何工作?

简单来说,AES密钥扩展算法的工作原理如下:

  • 初始密钥 - 算法使用初始密钥。此密钥的长度可以从128位到256位不等,具体取决于所需的安全性级别。
  • 轮常数 - 该方法使用一组轮常数,这些常数是在密钥扩展过程中使用的预定义值。
  • 字大小 - 密钥将单词划分为单独的块。一个字通常包含32位。例如,从128位密钥创建四个32位字。
  • 密钥调度 - “密钥调度”是指使用密钥扩展过程生成的一组轮密钥。此调度表中包含初始轮密钥以及从中派生的其他轮密钥。
  • 扩展轮 - 算法在每一轮扩展中执行多项任务,例如:
    • RotWord - 此函数旋转单词中的字节。
    • SubWord - 使用预定的S盒应用替换操作。
    • Rcon - 使用轮常数对单词进行异或运算。
  • 轮密钥 - 在所有扩展轮之后仍然存在的轮密钥的顺序定义了密钥调度。每个轮密钥都用于AES加密或解密的相应轮中。

总的来说,密钥扩展方法通过确保AES加密和解密的每一轮都有一个唯一的轮密钥来提高安全性并防止密码攻击。

数学表示

让我们表示:

  • K是第一个密钥,其长度为N位。
  • 密钥的字数(Nk)是其总字数(例如,128位密钥为4,192位密钥为6,256位密钥为8)。
  • Nr,AES轮标识符,对于AES-128为10,对于AES-192为12,对于AES-256为14。

密钥扩展过程

  • 步骤1:首先创建轮密钥。在单词数组W中建立第一个单词K。迭代生成(Nr + 1)个轮密钥:
for i = N_k to (4 * (N_r + 1) - 1):
   if i mod N_k == 0:
      temp = RotWord(W[i-1]) ^ SubWord(W[i-1]) ^ Rcon(i / N_k)
   else:
      temp = W[i-1] ^ W[i-N_k]
   W[i] = temp
  • 步骤2:完成轮密钥:循环结束后,数组W包含所有轮密钥。

符号

  • RotWord(w) - 以循环方式旋转单词w的字节。
  • SubWord(w) - 使用AES S盒替换单词w中的每个字节。
  • Rcon(i) - 生成当前第i轮的轮常数,或Rcon。

计算轮常数Rcon

可以通过计算Rcon(i)=(RC[i],0,0,0)找到第i轮的轮常数,其中RC[i]是轮常数数组的第i个元素。

此表示提供了关于如何将原始密钥转换为用于AES加密和解密的一组轮密钥的数学描述。

AES密钥扩展示例

现在我们将讨论AES(高级加密标准)密钥扩展算法的一个示例。对于此示例,我们将使用AES-128,因此我们的初始密钥将为128位(16字节)。

第一个密钥可以被认为是一组字节:

2b 7e 15 16 28 ae d2 a6 ab f7 97 66 76 15 13 1

此密钥长128位。

让我们看看密钥扩展过程的每个步骤:

初始密钥

2b 7e 15 16
28 ae d2 a6
ab f7 97 66
76 15 13 1

扩展轮

我们首先将第一个密钥添加到我们的轮密钥列表中。然后,我们迭代生成更多轮密钥,直到达到总共11个。

第1轮

在RotWord、SubWord和XOR运算中,我们使用轮常数:

RotWord: 7e 15 16 2b
SubWord: 63 cb e7 8c
Rcon: 01 00 00 00
Round 1 Key: 63 cb e7 8c 09 cf 4f 3c 3b a9 82 fb 11 13 d8 2c

第2轮

前一轮密钥中的单词向后异或四个位置:

Round 2 Key: a0 fa fe 17 88 54 2c b1 23 a3 39 39 2a 6c 76 05

后续轮

以这种方式生成轮密钥,直到生成总共11个密钥。

最终轮密钥

Round 0 (Initial Key): 2b 7e 15 16 28 ae d2 a6 ab f7 97 66 76 15 13 1
Round 1: 63 cb e7 8c 09 cf 4f 3c 3b a9 82 fb 11 13 d8 2c
Round 2: a0 fa fe 17 88 54 2c b1 23 a3 39 39 2a 6c 76 05
...
Round 10: 3d 47 0e 52 77 37 2e 10 1f 7e 0e 20 6a 51 7f a7

在此示例中,使用AES密钥扩展技术将原始密钥扩展为多个轮密钥。每个轮密钥都是使用轮常数以及XOR、RotWord和SubWord等运算从前一个轮密钥创建的。然后,这些轮密钥用于AES加密的每一轮中,以提高安全性并防止密码攻击。

总结

AES密钥扩展方法创建初始密钥和一组轮密钥,这些密钥是AES加密和解密所必需的。它使用轮常数在诸如RotWord、SubWord和XOR之类的运算中。安全性得到了提高,因为每个轮密钥都确保了每轮加密都有一个唯一的密钥。该过程增强了安全性并通过AES加密防止密码攻击。

广告