作者:李悦
1AES算法加密原理
AES算法的数据分组长度为128位,密钥长度可指定为128位、192位或256位,不同的密钥长度分别对应不同的加密轮数:10、12、14轮。本文以密钥长度128位,加密10轮为例展开介绍。图1为AES算法的加密流程图。
图1 AES算法加密流程图
AES每一轮加密包含4个操作:字节代换(SubBytes,SB)、行移位(ShiftRows, SR)、列混淆(MixColumns, MC)和轮密钥加(AddRoundKey)。最后一轮同其它轮变换基本相同,唯一的不同是移除了列混淆变换。解密过程为对应的逆操作。由于每一步操作都是可逆的,按照相反的顺序进行解密即可恢复明文。加解密中每轮的密钥由初始密钥扩展得到。
AES的一个特性是将称为状态(state)的密码中间结果用一个具有四行四列的二维字节数组来表示。图2为AES算法加密一轮的流程图。
图2 AES算法加密一轮流程图
1.1 字节代换字节代换是一个非线性函数(S盒、逆S盒),用查找表的方式将中间状态的每个字节替换成对应的字节。S盒用于加密操作,逆S盒用于解密操作。它们都是由16*16字节组成的矩阵,即矩阵共有256个元素。每个元素的内容是1个字节(8bit)的值,且每个元素各不相同。状态矩阵中的元素映射为一个新字节的规则为:把该字节的高4位作为行值,低四位作为列值,取出S盒或者逆S盒中对应行列的元素作为输出。表1为S盒查找表,表2为逆S盒查找表。
表1 S盒查找表
表2 逆S盒查找表
1.2 行移位行移位是对状态数组的最后三行按字节执行循环移位运算,分为正向行移位和行移位逆变换两种操作。正向行移位用于加密操作,行移位逆变换用于解密操作。
(1)正向行移位(左移)
这是一个简单的左循环移位操作。状态矩阵的第0行左移0字节,第一行左移1字节,第2行左移2字节,第3行左移3字节,图3为正向行移位的原理图。
图3 正向行移位原理图
(2)行移位逆变换(右移)
这是一个简单的右循环移位操作。状态矩阵的第0行右移0字节,第一行右移1字节,第2行右移2字节,第3行右移3字节,图4为行移位逆变换的原理图。
图4 行移位逆变换原理图
1.3 列混淆列混淆是将状态数组的每一列乘以一个矩阵,其中乘法是在有限域F(28)上进行的,分为正向列混淆和列混淆逆变换两种操作。正向列混淆用于加密操作,列混淆逆变换用于解密操作。
(1)正向列混淆
经行移位后的状态矩阵与固定的矩阵相乘,得到混淆后的状态矩阵。图5为正向列混淆的原理图。
图5 正向列混淆原理图
此处的乘法和加法都是定义在有限域F(28)上的,需要注意如下两点:
1)将某个字节所对应的值乘以2,其结果就是将该值的二进制位左移一位,如果该值的最高位为1(表示该数值不小于128),则还需要将移位后的结果异或00011011;
2) 此处的矩阵乘法与一般意义上矩阵的乘法有所不同,各个值在相加时使用的是模2加法(相当于是异或运算)。
(2)列混淆逆变换
图6为列混淆逆变换的原理图。
图6 列混淆逆变换原理图
1.4 轮密钥加轮密钥加是将轮秘钥和状态数组进行按位异或。
1.5 密钥扩展AES的扩展秘钥由11个128位轮秘钥组成。秘钥扩展通过对AES秘钥数组的各列进行运算来实现,图7为秘钥扩展的流程图。
图7 秘钥扩展流程图
AES秘钥扩展主要包括以下几个部分:
1)字代换(SubWord, SW):将输入的4个字节分别查找AES的S盒进行字节代换;
2)字移位(RotWord, RW):将输入的4个字节循环左移1个字节;
3)轮常量异或:对字移位的结果同轮常量Rcon[i]进行异或,其中i代表轮数。
轮常量Rcon[i]是一个字,其值如表3所示。
表3 轮常量表
2AES算法DFA攻击原理
攻击条件:攻击者能够采集到若干个密文对(C,C’);
故障模型:在第9轮ShiftRows之后引入故障;
攻击原理:通过分析C与C’之间的差分值来推倒秘钥。
2.1 故障传播分析图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.2 DFA攻击过程假设故障注入在第9轮ShiftRows之后中间状态的第一个字节S0。等式(1)表示在第9轮ShiftRows之后的中间状态上注入一个故障,等式左边是错误的中间状态(F),等式右边是正确的中间状态(S)异或故障(ε)。
第9轮ShiftRows之后:
第9轮MixColumns之后:
第9轮AddRoundKey之后:
第10轮SubBytes之后:
第10轮ShiftRows之后:
密结束之后:
DFA攻击步骤:
1)针对等式(6),ε0、ε1、ε2、ε3的值可以通过异或正确和错误密文得到;
2)第10轮SubBytes变换如等式(7)所示。其中,S表示S盒代换,X0、X1、X2、X3分别表示第10轮SubBytes之前中间状态对应4个字节的值。针对该方程组中第一个等式,通过遍历ε和X0(由于两者都是字节类型数据,因此需遍历256×256次),可得到满足该方程的(ε,X0)可能值构成的集合;
3)同样的,对于其余的3个等式也可以得到(ε,X1)、(ε,X2)、(ε,X3)的集合;
4)对于同一次故障注入,ε的值是唯一的,通过对这4个集合中ε值取交集可以进一步缩减4个集合元素个数;
5)至此得到了中间状态X0、X1、X2、X3的可能值。再根据等式(8)可以得到末轮密钥K10,0、K10,7、K10,10、K10,13的可能值;
6)重复进行故障注入和上述整个过程,直到筛选出最终正确的末轮密钥的4个字节;
7)在第9轮ShiftRows之后中间状态的不同字节上注入故障,又能得到末轮密钥的其余字节的值,最后得到完整的末轮密钥;
8)对获得的末轮秘钥进行逆秘钥扩展置换,可最终获得原始加密秘钥;
9)过一组明文-密文对验证获得的秘钥是否正确。
3软件实现
根据上述章节内容,本节在DES差分故障分析软件的基础上实现了针对AES算法的加密、解密运算以及基于差分分析思想的密码故障攻击算法,其软件界面如图9所示。
图9 DES/AES算法差分故障分析软件界面
热烈欢迎对密码差分故障分析感兴趣的老师、朋友们交流学习。
你可能错过了的好文章:
DES加密算法及其差分故障分析
器件SEE薄弱点的激光测绘技术
单粒子锁定的幽灵再现28nm等工艺SRAM型FPGA
做实验,搞科研,学知识
▼