1

 AES算法加密原理

AES算法的数据分组长度为128位,**长度可指定为128位、192位或256位,不同的**长度分别对应不同的加密轮数:10、12、14轮。本文以**长度128位,加密10轮为例展开介绍。图1为AES算法的加密流程图。

AES加密算法及其差分故障分析 。

图1 AES算法加密流程图

AES每一轮加密包含4个操作:字节代换(SubBytes,SB)、行移位(ShiftRows, SR)、列混淆(MixColumns, MC)和轮**加(AddRoundKey)。最后一轮同其它轮变换基本相同,唯一的不同是移除了列混淆变换。解密过程为对应的逆操作。由于每一步操作都是可逆的,按照相反的顺序进行解密即可恢复明文。加解密中每轮的**由初始**扩展得到。

AES的一个特性是将称为状态(state)的密码中间结果用一个具有四行四列的二维字节数组来表示。图2为AES算法加密一轮的流程图。

AES加密算法及其差分故障分析 。

图2 AES算法加密一轮流程图

1.1字节代换

字节代换是一个非线性函数(S盒、逆S盒),用查找表的方式将中间状态的每个字节替换成对应的字节。S盒用于加密操作,逆S盒用于解密操作。它们都是由16*16字节组成的矩阵,即矩阵共有256个元素。每个元素的内容是1个字节(8bit)的值,且每个元素各不相同。状态矩阵中的元素映射为一个新字节的规则为:把该字节的高4位作为行值,低四位作为列值,取出S盒或者逆S盒中对应行列的元素作为输出。表1为S盒查找表,表2为逆S盒查找表。

表1 S盒查找表

AES加密算法及其差分故障分析 。

表2 逆S盒查找表

AES加密算法及其差分故障分析 。

1.2行移位

行移位是对状态数组的最后三行按字节执行循环移位运算,分为正向行移位和行移位逆变换两种操作。正向行移位用于加密操作,行移位逆变换用于解密操作。

(1)正向行移位(左移)

这是一个简单的左循环移位操作。状态矩阵的第0行左移0字节,第一行左移1字节,第2行左移2字节,第3行左移3字节,图3为正向行移位的原理图。

AES加密算法及其差分故障分析 。

图3 正向行移位原理图

 

(2)行移位逆变换(右移)

这是一个简单的右循环移位操作。状态矩阵的第0行右移0字节,第一行右移1字节,第2行右移2字节,第3行右移3字节,图4为行移位逆变换的原理图。

AES加密算法及其差分故障分析 。

图4 行移位逆变换原理图

1.3列混淆

列混淆是将状态数组的每一列乘以一个矩阵,其中乘法是在有限域F(28)上进行的,分为正向列混淆和列混淆逆变换两种操作。正向列混淆用于加密操作,列混淆逆变换用于解密操作。

(1)正向列混淆

经行移位后的状态矩阵与固定的矩阵相乘,得到混淆后的状态矩阵。图5为正向列混淆的原理图。

AES加密算法及其差分故障分析 。

图5 正向列混淆原理图

此处的乘法和加法都是定义在有限域F(28)上的,需要注意如下两点:

1)将某个字节所对应的值乘以2,其结果就是将该值的二进制位左移一位,如果该值的最高位为1(表示该数值不小于128),则还需要将移位后的结果异或00011011;

2) 此处的矩阵乘法与一般意义上矩阵的乘法有所不同,各个值在相加时使用的是模2加法(相当于是异或运算)。

 

(2)列混淆逆变换

图6为列混淆逆变换的原理图。

AES加密算法及其差分故障分析 。

图6 列混淆逆变换原理图

1.4轮**加

轮**加是将轮秘钥和状态数组进行按位异或。

1.5**扩展

AES的扩展秘钥由11个128位轮秘钥组成。秘钥扩展通过对AES秘钥数组的各列进行运算来实现,图7为秘钥扩展的流程图。

AES加密算法及其差分故障分析 。

图7 秘钥扩展流程图

AES秘钥扩展主要包括以下几个部分:

1)字代换(SubWord, SW):将输入的4个字节分别查找AES的S盒进行字节代换;

2)字移位(RotWord, RW):将输入的4个字节循环左移1个字节;

3)轮常量异或:对字移位的结果同轮常量Rcon[i]进行异或,其中i代表轮数。

轮常量Rcon[i]是一个字,其值如表3所示。

表3 轮常量表

AES加密算法及其差分故障分析 。

2

  AES算法DFA攻击原理

攻击条件:攻击者能够采集到若干个密文对(C,C’);

故障模型:在第9轮ShiftRows之后引入故障;

攻击原理:通过分析C与C’之间的差分值来推倒秘钥。

2.1故障传播分析

AES加密算法及其差分故障分析 。

图8 第9轮ShiftRows之后注入单字节故障的

故障传播过程

图8为在第9轮ShiftRows之后注入单字节故障的故障传播过程。图中阴影格子代表该字节注入了故障。

1)假设故障注入在第9轮ShiftRows之后中间状态的第一个字节S0;

2)经过第9轮MixColumns变换,故障传播至S0、S1、S2、S3这4个字节;

3)经过第9轮AddRoundKey以及第10轮SubBytes变换,故障仍处于这4个字节;

4)经过第10轮ShiftRows变换,故障传播至S0、S13、S10、S7这4个字节;

5)随后的变换过程该4个故障字节的位置将不再发生变化,也就是说密文同样是S0、S13、S10、S7这4个字节将含有故障。

2.2DFA攻击过程

假设故障注入在第9轮ShiftRows之后中间状态的第一个字节S0。等式(1)表示在第9轮ShiftRows之后的中间状态上注入一个故障,等式左边是错误的中间状态(F),等式右边是正确的中间状态(S)异或故障(ε)。

第9轮ShiftRows之后:

AES加密算法及其差分故障分析 。

第9轮MixColumns之后:

AES加密算法及其差分故障分析 。

第9轮AddRoundKey之后:

AES加密算法及其差分故障分析 。

第10轮SubBytes之后:

AES加密算法及其差分故障分析 。

第10轮ShiftRows之后:

AES加密算法及其差分故障分析 。

密结束之后:

AES加密算法及其差分故障分析 。

DFA攻击步骤:

1)针对等式(6),ε0、ε1、ε2、ε3的值可以通过异或正确和错误密文得到;

2)第10轮SubBytes变换如等式(7)所示。其中,S表示S盒代换,X0、X1、X2、X3分别表示第10轮SubBytes之前中间状态对应4个字节的值。针对该方程组中第一个等式,通过遍历ε和X0(由于两者都是字节类型数据,因此需遍历256×256次),可得到满足该方程的(ε,X0)可能值构成的集合;

AES加密算法及其差分故障分析 。

3)同样的,对于其余的3个等式也可以得到(ε,X1)、(ε,X2)、(ε,X3)的集合;

4)对于同一次故障注入,ε的值是唯一的,通过对这4个集合中ε值取交集可以进一步缩减4个集合元素个数;

5)至此得到了中间状态X0、X1、X2、X3的可能值。再根据等式(8)可以得到末轮**K10,0、K10,7、K10,10、K10,13的可能值;

AES加密算法及其差分故障分析 。

6)重复进行故障注入和上述整个过程,直到筛选出最终正确的末轮**的4个字节;

7)在第9轮ShiftRows之后中间状态的不同字节上注入故障,又能得到末轮**的其余字节的值,最后得到完整的末轮**;

8)对获得的末轮秘钥进行逆秘钥扩展置换,可最终获得原始加密秘钥;

9)过一组明文-密文对验证获得的秘钥是否正确。

3

软件实现

根据上述章节内容,本节在DES差分故障分析软件的基础上实现了针对AES算法的加密、解密运算以及基于差分分析思想的密码故障攻击算法,其软件界面如图9所示。

AES加密算法及其差分故障分析 。

图9 DES/AES算法差分故障分析软件界面

 

 

热烈欢迎对密码差分故障分析感兴趣的老师、朋友们交流学习。

品略图书馆 http://www.pinlue.com

 

 

 

相关文章:

  • 2021-11-14
  • 2020-06-29
  • 2021-11-14
  • 2021-12-07
  • 2021-08-25
  • 2021-10-19
  • 2021-12-10
  • 2021-08-06
猜你喜欢
  • 2021-04-04
  • 2021-06-27
  • 2021-07-21
  • 2021-08-06
  • 2021-11-03
相关资源
相似解决方案