aes 加密_AES加密算法及其差分故障分析

6e2e61a2f11411cfb5d0ed59f1e1ee25.png

作者:李悦

1

 AES算法加密原理

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

5fb8dab4c70e30e7a83af0eb4e1e22f0.png

图1 AES算法加密流程图

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

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

a914ec2c43524a062761b7bda2128c6a.png

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

1.1 字节代换

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

表1 S盒查找表

10839bda651746e49bf032534f644bf3.png

表2 逆S盒查找表

099af6ab5873f5fadcd32381f4dd42c9.png

1.2 行移位

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

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

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

e92ac9e5ad5f1339c4d025dc6f56d448.png

图3 正向行移位原理图

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

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

a97d7a2a2e30338575f879f436ed9b68.png

图4 行移位逆变换原理图

1.3 列混淆

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

(1)正向列混淆

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

28665be29781200b46187698f5dc551c.png

图5 正向列混淆原理图

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

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

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

(2)列混淆逆变换

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

120b58de9a1476bf6ac5e83e6787fbf9.png

图6 列混淆逆变换原理图

1.4 轮密钥加

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

1.5 密钥扩展

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

244680acf0d201918c0c08da9985c0a4.png

图7 秘钥扩展流程图

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

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

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

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

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

表3 轮常量表

55243396d7d6e0c1b228e45978a8f30f.png

2

  AES算法DFA攻击原理

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

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

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

2.1 故障传播分析

ebb8bc5d5900b66851497be25fa365d4.png

图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之后:

38fa73f0c713f862c0273cc395083b8a.png

第9轮MixColumns之后:

2b49fca0a77a4b4a6906e870844a5ad0.png

第9轮AddRoundKey之后:

a4053ecc4cab42099937cccc022beb88.png

第10轮SubBytes之后:

bbd0e8bf67b379427ed0221df04cfd82.png

第10轮ShiftRows之后:

2788c0506a11f05d4727b4246e8b2036.png

密结束之后:

71642279cd6c3f11ffebd11264882007.png

DFA攻击步骤:

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

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

01db61ac41f743e1665c6ce0dc7e0b5f.png

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

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

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

e4934773705a852cc20b9e658a9bf483.png

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

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

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

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

3

软件实现

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

49690d20ca977a5d9f7aca2ca0395371.png

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

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

ee01e5fd0032cfd53dd39d14252b4944.png你可能错过了的好文章:

DES加密算法及其差分故障分析

器件SEE薄弱点的激光测绘技术

单粒子锁定的幽灵再现28nm等工艺SRAM型FPGA

做实验,搞科研,学知识

0a63653eddb0658806535c9c14ce7560.png

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值