针对AES加密算法的安全检测

2022-05-30 04:29何利文国海轮
计算机技术与发展 2022年5期
关键词:汉明明文加密算法

何利文,安 聪,国海轮

(南京邮电大学,江苏 南京 210003)

0 引 言

近年来,信息安全问题日益突出,已成为人类共同面临的挑战,侧信道攻击对信息安全构成了巨大的威胁。密码芯片在工作过程中不可避免地会产生时间、功耗、电磁辐射等旁道信息[1]。这些信息与芯片内部的数据和操作有关。因此,侧信道信息可用于攻击密码芯片。利用侧信道信息破解密文信息的方法最早由Kocher于1996年提出,随后逐渐发现了差分功耗分析(DPA)、相关功耗分析(CPA)等侧信道攻击方法[2]。目前,已经成功地在许多设备上实现了多种侧信道攻击[3]。

差分功耗分析(differential power analysis,DPA)[4]可以从功耗曲线微小的差分信号分析出所需的关键信息,但需要采集大量的信息,并采集多组功耗曲线以及每条曲线对应的明文、密文记录,通常需要很强的分析经验和较长时间的分析运算,对分析平台的设备要求也比较高。而相关功耗分析(correlation power analysis,CPA)[5]是选择一个未知但是恒定的参考态,建立一个具有数据相关性的汉明模型,利用功耗样点与被处理数据的汉明权重之间的相关因子进行分析。因此CPA攻击的准确性要比DPA高很多。

1 背景介绍

1.1 高级加密标准

高级加密标准[6](advanced encryption standard,AES)是最常见的对称加密算法,加解密使用相同的密钥,可以在不同的平台上实现:

明文(p),可理解的消息或数据,机密算法的输入,解密算法的输出。AES-128的明文长度为128位。

密钥(k),在将明文转换为密文或者将密文转换为明文算法中输入的数据。AES-128的密钥长度为128位。

轮数(r),AES-128的加密轮数为10轮。

其中AES-128加密算法由10轮组成,每一轮使用一个由原始密钥产生的密钥。每一轮由四个基本步骤组成:字节替换、行移位、列混合变幻、轮密钥加密变换。

密文(c),加密算法的输出,解密算法的输入,其依赖于明文和密钥。AES-128的密文长度为128位。

1.2 相关功耗分析(CPA)

相关系数攻击模型是经典差分攻击的一个延伸[7],它选择一个未知但是恒定的参考态,建立一个具有数据相关性的汉明模型,利用功耗样点与被处理数据的汉明权重之间的相关性因子进行分析。其主要思路是攻击者已知明文,并可变化明文并采集相应的功耗曲线。攻击者猜测密钥,根据明文和密钥计算出某中间变量[8]。以中间变量的汉明权重(逻辑1的个数)和功耗的相关系数做分析,相关系数最高的即猜测正确的密钥。否则由于错误的密钥,导致中间变量必然与功耗没有预期的正比关系。这种分析是以功耗与处理的1的个数成正比为理论前提的,由芯片原理可知[9]:功耗是与逻辑门输出的0、1的转换次数(汉明距)成正比的,而不是与处理的1(汉明权重)的个数成正比。

1.3 侧信道分析攻击

侧信道分析攻击技术是相对于传统意义上基于通信的密码分析而言的。传统的密码分析是通过对密码处理器的算法进行破解分析,并对输入输出等数据辅之以监听等手段,在流程内实现攻击[10]。侧信道分析攻击技术的对象则是密码处理器的实现,即不是对加解密数据本身分析,而是对加解密过程中的时序、功耗等其他信道的信息进行分析,从而得到密钥等敏感信息[11]。

和传统的密码分析相比,侧信道分析攻击技术有成本上的优势。密码分析虽然通过一些分析方法可降低密码破解的强度,即缩小穷举密钥的空间,但目前通常采取的延长密钥位的办法可使实现穷举攻击需要的时间远远长于密钥的生存期。侧信道分析攻击技术的破解效率与密钥长度无关或只是线性相关,而非传统密码分析中,其效率与密钥长度的幂相关。若集成电路没有保护措施,那么侧信道分析攻击技术可能仅需很小的代价就能得到密钥。

1.4 ChipWhisperer

ChipWhisperer[12]是一种开源工具链,使学习侧信道攻击变得简单。它还充当一个平台,以有据可查、经济高效且可重复的方式执行侧信道研究。ChipWhisperer主要侧重于电源分析攻击以及电压和时钟故障,这些故障会中断设备的电源或时钟信号,从而导致意外行为。

1.5 Jupyter Notebook

Jupyter Notebook是基于网页的用于交互计算的应用程序。其可被应用于全过程计算:开发、文档编写、运行代码和展示结果[13]。Jupyter Notebook是以网页的形式打开,可以在网页页面中直接编写代码和运行代码,代码的运行结果也会直接在代码块下显示。如在编程过程中需要编写说明文档,可在同一个页面中直接编写,便于作及时的说明和解释。同时Jupyter Notebook也支持python语言,ChipWhisperer的Version5就是使用的Jupyter Notebook。

2 CPA攻击检测算法安全性

2.1 CPA攻击步骤

第一步:将密钥分成16个子密钥分别破解,每一子密钥为一个字节[14]。首先考虑第一个子密钥GuessKey的破解。根据能量迹随机地选择明文中的字节P1,P2,…,PN,将P输入到目标密码算法的执行单元。

第二步:猜测K的候选值,然后每遍历一个值,参照AES的一轮加密过程,将其与明文P进行异或得到X,异或之后再经过S-BOX的字节替换即可得到用于求解汉明重量的输入Y,求出Y的汉明重量后最终得到h的样本值[15],如图1所示。

第三步:计算V和h的person相关系数r(v,h),相关性最大的那个点就是S盒的输出。

在CPA攻击中,根据不同采样点位置的电压值与汉明重量的关系可以判断正确和错误密钥[16],也就是有无明显的尖峰。只需要对全部的位置都做相关系数,然后找到最大值,这样就找到了正确的密钥,S盒的输出位置也就找到了

图1 样本值h

2.2 CPA完整攻击流程

高级加密标准是最常见的对称加密算法,加解密使用相同的密钥,可以在不同的平台上实现。

CPA完整攻击流程[17]程序的主体是两个循环,随机选择明文P1,P2,…,PN,采集加密规程中的能量迹:电压V,每条能量迹上有M个采样点。

For byte = 1∶16//外部循环:循环猜测16个byte的密钥;

ForK= 0∶255 //内部循环:每个猜测的密钥共有256种可能需要将其从0遍历到255;

H=HW(Sbox(Pbyte⊕K))//猜测密钥与明文异或,经过S盒处理后计算汉明重量,Pbyte表示各PN的第byte个字节[18];

Form= 1∶M//计算每个采样点的person相关系数;

V=Vm//Vm各能量迹V的第m个采样点;

Corr(K)=r(V,h)Rightkeybyte = find(max (corr))//取相关系数最大的值。

3 ChipWhisperer使用CPA检测AES-128加密算法

3.1 捕获部分

首先在命令行下启动Jupyter Notebook,启动成功后可以在网页上打开。在Jupyter Notebook下找到ChipWhisperer的项目位置,打开ChipWhisperer里面的CPA攻击脚本,这个脚本里的内容是CW预设的一些参数和攻击步骤,需要根据攻击环境进行更改。

在CPA的攻击脚本中,需要修改PLATFORM的值,这个值是根据目标板的种类修改的,本实验使用的是CW303的目标板,因此需要把PLATFORM的值改为PLATFORM='CW303'。

ChipWhisperer的连接是写在脚本Setup_Generic.ipynb中的,里面含有一些参数的设置,例如:PLATFORM值、间隔时间、时钟频率等。如果要在攻击脚本里进行连接,需要运行这个脚本进行连接。但是单独运行其他的脚本会使实验结构复杂化,每次调试都要去重启它,增加实验的难度,本实验利用run命令在攻击脚本中直接调用Setup_Generic.ipynb连接设备,避免了每次调试都需要单独连接设备。

本实验使用XMEGA目标进行实验,XMEGA目标需要对XMEGA进行编程,XMEGA编程需要首先将XMEGA设备里的内容清空,然后重新写入需要的内容[19],成功写入后并给出提示。

成功连接并确认内容已编程到XMEGA设备中,就可以捕获目标的能量迹了。为了更好地展示能量迹的捕获进程,该文利用python里面的tqdm模块,构建进度条[20]。因此从运行结果中可以看到捕获能量迹的进度,成功运行后还需要把捕获到的能量迹保存下来。本实验统一把能量迹保存在project下,方便后续的使用。

本实验使用Python中的holoviewsSuJu数据分析/可视化库具有快速生成交互性和高维可视化非常适合于数据的交互式探索的特点,利用其功能对捕获到的能量迹进行制作[21],以采样点位5 000为例,捕获到的能量迹如图2所示。

图2 捕获能量迹

3.2 分析部分

计算相关性之前需要获取一个字节的输入和一个字节的猜测密钥,并且返回S-Box的输出,根据猜测密钥计算其汉明权重,利用下面的公式:

HW=[bin(n).count(″1″) fornin range(0,256)]

来计算汉明权重。

首先是计算相关性问题。Personal相关系数[22](皮尔逊相关系数)的计算方法如下:

根据皮尔逊相关系数的计算方法可以得到每个猜测密钥的相关性,利用这些相关性可以找出那些猜测密钥符合捕捉到的能量轨迹。对于相关系数而言,只需要关注其绝对值[23](即存在线性相关性),而不关心符号。此外,虽然没考虑到相关性的计算,但是每条记录的trace实际上是由一堆样本点组成的,这意味着实验实际拥有的是每个子猜测密钥与每个样本点的相关性[24]。通常只有跟踪中的几个点是相关的,它是需要关注的整个跟踪中的最大值,因此本实验通过获取最大值的方式选择每个子猜测密钥的相关性。最后,通过找到相关性最大的子猜测密钥确定与数据最匹配的子猜测密钥[25]。

经过以上部分计算皮尔逊相关系数并得出相关性最大的猜测子密钥,本实验将这些猜测子密钥存在results中,利用print函数可以输出这些猜测子密钥,输出的内容为最大猜测子密钥的值以及相关系数的值。本实验还使用python里面的pandas库,更好地在数据帧中输出它们[26]。

除此之外,还使用style方法来进一步刻画它,使它可以链接格式化函数。例如,由于猜测密钥是从0-255,因此有很多相关性很小甚至无限趋近于0的数据,可以删除多余的0并清理数据。本实验更进一步地对得到的密钥进行处理,如输出不同颜色的密钥,并把正确密钥用红色输出且在表格的最顶部。这样,就完成了对AES-128的CPA攻击。

4 相关系数方法的改进

相关函数的实现可以作为一个遍历所有跟踪的循环运行。理想情况下,希望将相关系数作为一种“在线”计算。为了实现这种“在线”计算,可以添加一个跟踪,观察输出,再添加另一个跟踪,观察输出[27]。当生成部分猜测熵(PGE)与轨迹数量的图时,这是非常可取的,如果没有这种输出的存储方法,在得到最后的结果时需要多次运行循环,这些循环是用来计算不同阶段的输出[28]。

根据上面这种情况,可以使用相关方程的另一种形式,它会显式地存储变量的和,这更容易执行在线计算。它把每次添加跟踪得到的结果保存起来,当添加新的跟踪时,根据之前存储的计算结果,很容易更新这些总和,而不需要循环地运行之前得到的计算结果[29]。

下面两个公式就是改进后显式的存储变量的和。

5 实验结果分析

通过捕获到的能量迹上的采样点设置猜测密钥,计算各个明文在猜测密钥下的S和输出得到的样本值,并利用能量迹和样本值计算相关系数。实验成功破解出AES的16组密钥,如图3和图4所示。

(a)前8组

(b)后8组图3 密钥

(a)前8组

(b)后8组图4 密钥

CPA破解密钥的成功率与能量迹的条数和采样点的个数有很大的关系,实验首先固定能量迹的数量对采样点的数量进行修改,得到图4(3 000采样点)和图5(4 000采样点)的密钥破解结果。

(a)前8组

(b)后8组图5 密钥

固定能量迹的条数以及调整采样点的大小反复实验,最终得到采样点与成功率之间的关系图。根据实验结果可以发现,在采样点数量为0到5 000之间时,成功率会随着采样点数量的增加而增加,超过5 000之后,成功率基本处于平稳状态,如图6所示。

图6 采样点个数和密钥破解成功率

固定最佳采样点5 000,调整能量迹的条数,每次增加5条能量迹,实验得到具体的密钥破解结果如图7(20条能量迹)和图8(25条能量迹)。

(a)前8组

(b)后8组图7 密钥

(a)前8组

(b)后8组图8 密钥

实验中固定采样点的大小以及调整能量迹的条数实验,最终得到能量迹与成功率之间的关系图。根据实验结果可以发现,在采样点数量为0到30之间时,成功率会随着采样点数量的增加而增加,超过30之后,成功率处于平稳状态,如图9所示。

图9 能量迹条数和密钥破解成功率

CPA攻击的成功率正常情况下会随着采样点和能量迹数量的增加而增加,但同时运算速度也会下降,本实验在保证成功率的同时提高了运算速度,采用不同的采样点和能量迹进行反复实验,最终得到能量迹为30条、采样点位5 000时,CPA对AES的密钥破解情况最好,此时几乎可以达到100%的密钥破解率,再增加数量就会导致运算速度降低。

6 结束语

随着信息化水平的不断提高,AES加密算法的安全问题尤为重要。虽然AES加密算法可以防御一些基本的攻击方式,但针对侧信道攻击的防御还是较为薄弱的。该文针对AES-128加密算法实施了相关功耗分析攻击,并成功破解了128位完整的密钥。攻击过程中使用ChipWhisperer成功捕获了功耗曲线,通过计算汉明权重,得出了功耗数据的相关系数,并推测密钥是否正确。实验结果表明,对AES-128加密算法的破解成功率达到了90%以上。AES-128加密算法容易受到相关功耗分析的攻击,因此,在实际中使用AES加密算法时需要考虑芯片的安全测试,增加芯片抗侧信道攻击的防护。

猜你喜欢
汉明明文加密算法
奇怪的处罚
教育云平台的敏感信息保护技术研究
一种改进的加密算法在空调群控系统中的研究与实现
基于Jave的AES加密算法的实现
奇怪的处罚
媳妇管钱
奇怪的处罚
AES加密算法的实现及应用
一种新的计算汉明距方法