AES是美国的加密标准。第三部分

图片



周期中的其他文章
AES — . I

ES — . II

AES — . III

AES — . IV

AES — . V.





发布有关AES标准的此类详细文本的动机是,使您有机会详细熟悉它,不仅足以开发加密算法的独立软件实现,而且足以创建用于对密码进行可能的密码分析攻击的算法,即用于在不知道密钥的情况下解密密码的算法...



网络上可用的那些出版物不符合这些目标,并且在培训专家的过程中我无法使用。



对密码的主要(旧的或什至较旧的)要求之一是创建一种开放的(可供研究使用的)加密算法,并将除密码密钥之外的所有内容(模式,协议等)包装在该算法周围。关键是必须所有人严格保密。在这种情况下,密钥不必分类为“秘密”。这种条件的限制是只有密码的接收者才拥有密钥,原则上他必须自己设置密钥。



对于对称加密系统,此条件是不可行的。这是非对称(两键)系统与对称系统之间的根本区别,其中关键信息泄漏的来源可能不是唯一的。前面已经提到,AES是RIJNDAEL密码的简化版本,在这里我们将在某些地方使用完整版本。



AES (Key Schedule).



在加密消息时选择密钥是一项负责任的任务。通常的方法是选择多维向量空间中的随机二进制向量并将其用作密钥。通常,许多加密算法和密码都以弱密钥或无效密钥为特征,这些密钥或密码在密码学发展过程中或在其他研究过程中都会揭示出来。作者或密码学家分析人员提供的算法,以及相应的出版物。



反过来,这对密钥生成过程施加了限制,这是不希望的,因为它使密钥变得复杂。关于加密的数学基础与生成密钥的数学基础非常相似,您可以在此处阅读有关它们的更多信息



选定的二进制向量称为密码密钥,并将其转换为4×4 = 16字节的“平方”。然后,轮密钥从使用两个专用程序,这是在加密/解密过程,其详细描述使用它形成这里



一个过程称为密钥扩展,另一个过程称为回合密钥选择。具有固定长度的所选随机随机向量被扩展。仔细考虑选择随机数生成器以对其进行测试和认可也很重要。



密钥扩展



扩展原始(选定)密钥的含义是将其拆分为非块(每个32位),然后从中生成许多新块,每轮具有相同长度。

因此,对于Nk = 4,让选定的(128位)密码密钥AES = 2b 7e 15 16 28 ae d2 a6 ab f7 15 88 09 cf 4f 3c,它以4个字节的块表示,并且其初始循环扩展为w [0 ] = 2b7e1516; w [1] = 28aed2a6; w [2] = abf71588; w [3] = 09cf4f3c。 QC表中的符号w [i],i = 0(1)43,表示一列4字节的轮回密钥。



加密会话是消息(例如字母)的准备和算法转换。以位表示形式的字母文本分为固定长度Nb = 128、192或256位的块。在AES标准中,块长度仅为128位。



然后,每个块用一个正方形或(带有4条线的矩形)表示,并分别固定轮数Nr = Nr(Nb,Nk)加密,这是两个变量的函数:块的长度Nb和密钥Nk的长度,它们可以独立取值128、192、256位。



选择加密密钥不会对位序列本身施加任何限制。每个Nr回合都使用自己的预先形成或直接计算的回合密钥{w [i]}。



圆形密钥是使用特殊算法由加密密钥形成的,该算法包括密钥扩展过程和圆形密钥选择过程。绕过这些过程直接指定圆形键是不可接受的。



第一个过程的本质和目的是将给定的原始加密密钥转换为更长的扩展密钥(Expanded Key)。从中选择回合密钥的扩展密钥的总位数由乘积K = Nk(Nr + 1)决定-密钥块的位数乘以增加的回合数。



例子1。假设Nb = Nk = 4,给定长度为4×32 = 128位的块,则Nr =10。

扩展密钥的K长度为K = 128∙11 = 1408位。



第二个过程(RoundKey选择)是对32Nk的顺序选择,即从扩展密钥中选择4个32位字,即第一个回合密钥由最初新形成的Nk个字表示,第二个回合密钥由接下来的Nk个字表示,依此类推直到最后一轮。



例子2。使用相同的初始数据(请参见前面的示例),扩展密钥的总字节长度为Nk(Nr + 1)= 4∙11 = 44个四字节字W(i),

i = 0(1)Nk(Nr + 1)-1 QC表的行由自然数编号。第一行的编号为4,因为QC表中不包括带有密码密钥的4行(编号分别为0、1、2、3)。



所有10个回合的表密码密钥AES(请参阅下表QC)。







该表的行分为几组(每行4行)。在每个组中,所有字段仅填充在一个顶行中。在接下来的三行中,仅填充了极限(左和右)字段。从其上方行的右边界获取值将输入到下一行和后两行的左边界(temp)中。



我们举一个用QC表的数字i = 4填充第一行的示例。左列-当前行号以值(4)开头,因为表中未包含前0、1、2、3个值。通常,索引(行号)i贯穿32位数字中总共44个单词的i = 0(1)Nk(Nr + 1)-1或i = 0(1)43值。



临时放置值w [i-1] = 09cf4f3c并通过旋转(一个字节的循环移位)RotWord()得到值CF4F3C09,它放置在第三列中。第四列包含8A84EB01的结果,该结果替换了第三列中值的SubBytes字节,即CF→8A; 4F→84; 3C→EB; 09→01 => 8A84EB01。



在第5列的表格的每第4行中填充值Rcon [i / Nk],该常数由公式Rcon(J)= 01000000计算,j = [i / Nk] = 2 j-1 = 2 0 = 1)值01 00 00 00是从4个字节的字中写入的,其第一个字节为2 0 = 1,即0000 0001 2,此32位字的剩余字节为零。



列6的字段包含第4个和第5个884EB01+ 01000000 = 8B84EB01的字段的总和(XOR);

列7字段包含W [i-Nk] = W [4-4] = W [0] = 2B7E1516;

第8列字段包含第6列和第7字段的总和W [i = 4] =884EB01+ 2B7E1516 = A0FAFE17;

现在,我们将详细讨论详细的命名过程。



密钥扩展程序



让我们详细考虑从原始密码密钥生成扩展密钥的过程。形式上,扩展密钥W将由一系列块W [i]来描述,i = 0(1)Nk(Nr + 1)-1,包含在KK表的最后一列中的4字节字(圆形密钥),其中第一个Nk 32位单词代表原始密钥,即

W = {W [0],W [1],W [2],W [3],W [4],...,W [K-1]}



后继第i个根据求和为XOR的表达式,从前面的单词递归形成单词。







对于索引为Nk的倍数的关键字W [i],在执行XOR操作之前,对W [i-1]的值进行附加转换。该变换描述如下。



转换说明包含以下功能:



RotWord()-根据规则

{a(0)a(1)a(2)a(3)}→{a ,对32位字a(0)a(1)a(2)a(3)进行字节循环移位(3)a(0)a(1)a(2)};



SubWord()-用SubBytes()函数的S块的元素替换字节a(j),例如,用S块的字节s(a,f)替换字节(af);操作与处理消息时相同,

Rcon [j]-XOR项为2 j-1





选择Nb的倍数,其值是使用SubWord(),RotWord(),Rcon()函数形成的。根据给定的初始数据填充位置W [0] –W [3],然后根据W [i]的比率计算所有后续位置。



圆键选择



圆形键选择(RoundKeySelection)。对于当前回合,数字为r。循环键选择为{W [Nb(r)-1],...,W [Nb(r + 1)-1]},

r = 1(1)Nr。



在这里,我们注意到,通用加密算法提供了变量集Nb,Nk,Nr的不同变体。对于固定选项的特定实现,可以将其大大简化。回合密钥可以动态计算,不需要大量内存即可存储整个序列W。您可以将自己限制为Nk个字的缓冲区。



例子3。让我们用一个数值例子解释给定的理论命题。令Nb = Nk = 4,Nr =10。密码密钥以十六进制序列K = 2b7e1516 282ed2a6 abf71588 09cf4f3c的形式给出







下表定义了体系结构“平方”和面向字节的计算。





左列已添加到表格中-轮数(r)。

在第一行r = 1,i = 4,前一个字节W [i-1] = W [3]写在第三列,即 K密码密钥的最后一个字节。由于索引i = 4是Nk = 4的倍数,因此在第6列中,我们写出(Rcon(J)= 01000000,j = [i / Nk] = 2 j-1 = 2 0 = 1),值01 00 00 00 4-第一个字节为2 0 = 1的x字节字,即 0000 0001,此32位字的其余字节为零。



在表的第四列中,我们输入前一列的值,但向左循环移位1个字节(单词旋转-RotWord)。第五列包含用S-块中的字节值(SubWord函数-替换字节)替换前一列的值的结果。之后,对第5列和第6列的内容进行mod2(XOR)加法运算,8a84eb01 + 0100 0000 = 8b84eb01,并将求和的结果输入第7列。



在字节0000 0001 2 = 01 16的二进制表示中最低有效位位于右侧。



第8列包含单词W [i-Nk] = W [0]的值(对于第一行,这是加密密钥W [0]的第一个(左字节)4字节字的值),该值由XOR操作8b 84 eb 01+求和2b 7e 15 16 = a0 fa fe 17,内容为7列。相加的结果(第9列)仅是第一轮回合密钥的四个4字节字中的第一个。



由于第一轮回合密钥的数目不是Nk的倍数,因此不使用循环移位,替换和Rcon [j]的功能来形成第一轮回合密钥的其他三个词。第9列的内容被传输到表的下一行的第三列。



Rcon的定义[j]。此过程是根据特殊算法执行的,我们将通过示例说明其操作。 Rcon [j]函数的自变量j是整数,由变量i的当前值-关键字的编号确定。显然

,对于i = Nk,2Nk,3Nk ...,j = 1,2,3,...。



由于在我们的示例中Nk等于4,因此对于i = 4、8、12,我们有整数值j。然后,对于每个整数j Rcon [j] = 2 j-1 = 1、2、4、8、16 ....

只要Rcon [j]是字段GF(2 8的元素,加倍就有效



对于i> 32,我们得到j> 8.字段外的值必须返回到该字段。这是通过减少字段Rcon [j](modφ(x))的元素的多项式表示来实现的。



例子4令i = 32、36、40。则j = 8、9、10。这些值不在字段范围内。我们通过减少模φ(x)将它们返回到字段并计算所需的值。

让我们确定Rcon的对应值[j]。计算结果汇总在表格中。





这样就完成了对生成圆形AES密码密钥的步骤的审查。



All Articles