段晓毅 刘承远 李 邮
北京电子科技学院,北京市 100070
能量分析攻击针对智能卡或存储密钥的专用嵌入式系统具有显著效果,严重威胁了此类密码设备的安全性。 通过利用能量分析攻击方法分析智能卡密码算法的途径,来有效揭示智能卡密码算法在硬件实现上的安全性问题,从而可以显著提升智能卡芯片的安全设计水平,因此开展对密码芯片能量分析攻击方法的研究,对于实现信息安全的快速发展具有重大意义。
能量分析攻击是侧信道攻击中最强有力的手段之一,具有实施设备简单,易于实现的优势。能量分析攻击的原理是密码芯片在执行密码算法时,所消耗的能量与密钥之间具有一定的相关性,即利用密码芯片工作时泄漏出来与密钥信息相关的能量信息进行攻击的方法。
1999 年,Paul Kocher 和Joshua Jaffe 等人提出了差分能量分析(Differential Power Analysis,DPA)恢复出DES(Data Encryption Standard)的密钥[1]。 2003 年,Chari S[2]等人通过采集大量能量迹样本建立统计信息,利用模板攻击(Template Attack, TA) 获取密钥。 2003 年, Eric Brier[3]等提出了使用相关功耗分析的方法。
近年来,随着机器学习的不断发展,越来越多的学者将机器学习应用到功率分析攻击中。2009 年,Massimo Alioto 等人[4]根据对称算法的特点和处理器的结构,设计了一种通用的预充电电路多比特功耗模型。 该模型对预充电电路具有较高的精度。 2011 年,Gabrielet 等人首次将机器学习技术应用到侧信道攻击中,利用具有明显汉明重量泄漏的数据集进行功率分析攻击,利用最小二乘支持向量机(LS-SVM)[5]成功攻击了一些高级加密标准(AES)的软件实现。 2013年Oswald 研究发现,通过对功耗曲线进行线性变换,可以准确量化线性滤波器对功率分析攻击的影响,从而有效选择最优线性滤波器提高攻击效率[6]。 Satoh R 等人提出了一种新的功率分析攻击方法,可以用来提高密码LSI 的抗性评估效率,该方法不是在传统的时域进行功率分析,而是在频域进行功率分析[7]。 2014 年,Kim 等人发现由于功率消耗曲线中存在噪声信息,攻击效率会降低,他们提出了基于原始数据的主成分分析方法,提出了相关系数分析的思想,该方法首先寻找原始数据的主成分,然后根据主成分选择质量较好的功耗曲线进行功耗分析,该方法的效率高于普通方法[8]。 论文[9]探讨了使用机器学习技术来执行功率分析攻击和处理高维特征向量。 论文[10]研究了SIMON 和LED 轻量级分组密码对差分功率分析(DPA)攻击的脆弱性。 2015 年Pozo 针对采样率低影响信号分析的问题,将奇异谱分析(SSA)应用于功率分析攻击,提高信号的信噪比和攻击效率[11]。 L Guo等人提出了一种基于SM3 算法[12]的动态密码令牌差分功率分析攻击。 2016 年,L Guo 等人提出了一种针对HMAC-SM3[13]的选择明文差分功率分析攻击。 Masoumi 等人提出了一种实用的高级加密标准(AES-128)算法的智能卡实现,结合一种简单而有效的屏蔽方案,保护其免受时域和频域的一阶功率分析攻击[14]。 论文[15]提出了一种对SIMECK 进行功率分析攻击的方法。 2017 年,Eleonora 等人提出了一个基于卷积神经网络的端到端攻击方法对功率曲线错位的问题,可有效实现对没有提前调整功率曲线的攻击[16]。 Chakraborty 等人对STT-MRAM 加密设计使用一个新的功耗模型,提出了一个通用的相关功率分析(Correlation Power Analysis,CPA)攻击策略[17]。 2018 年,Wiemers A 等人基于对如何量化剩余熵的理论分析,推导出一种实用的搜索算法,即使在高噪声或少量能量曲线的环境中,也可以成功地恢复整个AES 密钥或显著降低其熵[18]。 2019 年,Kim 等人[19]介绍了一种使用卷积神经网络分析侧通道的方法。 论文[20]利用卷积神经网络(CNN)对单片机上的算法实现进行了掩码和抗干扰攻击。 2020 年,Cai X 等人提出了差分功率分析攻击[21]的能量曲线压缩方法。 在论文[22]中段晓毅等使用数据增强技术解决了机器学习中SBOX 输出值的汉明重量不平衡问题。
本文对功率分析攻击及其技术进行了综述。同时,简要介绍了一些针对智能卡和FPGA 的功率分析攻击。 针对未知防御的智能卡,本文采用机器学习,建立了密钥和能量曲线的图谱,成功实现了针对未知防御智能卡的攻击,通过训练的模型,能量分析攻击中每个字节的猜测熵为12.4 次,完全攻击出8 字节密钥仅需要12.48次DES 计算,比暴力攻击的1288极大地减小了计算量。 实验验证了对未知防御技术的智能卡来说,攻击点的不同,会影响攻击的成功率。 同时,在保证成功率的前提下,通过采用机器学习算法进行建模,会很大程度提高攻击效率。 另外,本文实验验证了使用机器学习算法进行能量分析攻击时,分类模型的不同,也会导致攻击成功率和攻击效率的不同。 本文通过机器学习算法对未知防御技术的智能卡进行攻击,不仅成功破解密钥,而且提高了攻击效率。 最后,本文给出了针对未知防御技术的智能卡算法模块的攻击思路,如图1 所示。
图1 针对未知防御技术的智能卡算法模块的攻击思路
本文的结构如下,在第2 章中,介绍了数据加密标准DES 算法的原理及其S 盒输出特性。在第3 章,介绍了传统能量分析攻击原理、基于机器学习能量分析攻击原理、结合DES 算法S盒输出特性进行的模型构建和能量分析防御技术。 第4 章中进行了实验验证及讨论。 第5 章进行了总结并对未来研究进行了展望。
数据加密标准DES[23],为对称密码算法。它是1972 年美国IBM 公司研制的一种分组加密算法。 DES 算法密钥长度为64 位,其中56 位参与DES 运算,其以64 位(8 字节)为分组对数据进行加密。 DES 算法加密流程图如图2 所示。
图2 DES 算法加密流程图
S 盒是DES 算法的关键步骤,它是DES 算法中唯一的非线性部件,它提供了算法所需要的混乱特性,相比于其他步骤,提供了更好的安全性。 DES 算法共有8 个S 盒。 输入n 比特输出m 比特的S 盒本质上可以表示为如公式(1)所示的一个映射。
2.2.1 DES SBOX 输出完整字节特性
如图2 所示,在每一轮运算f 中,经初始置换IP 后,明文数据被分为左右两个32 位的分组,分别用Ln、Rn 表示。 通过扩展置换,数据的右半部分Rn 从32 位扩展到48 位,与用初始密钥生成的48 位子密钥进行异或,所得数值分为8 个6 位的分组,这8 个分组分别为8 个S 盒的输入值。 DES 的每个S 盒将6 个输入位变成4个输出位。 因此,对于DES 算法来说,对于每一字节明文输入,S 盒的输出值都在[0,15]这一区间,共有16 种可能值。
2.2.2 DES SBOX 输出汉明重量特性
汉明重量[24]是指一个二进制数值中1 的个数,DES 的每个S 盒将6 个输入位变成4 个输出位,所以DES 算法,S 盒输出的汉明重量值在[0,4]这一区间,共有5 种可能值,因为S 盒输出的“01”平衡性,会导致汉明重量的不平衡性,DES SBOX 输出汉明重量特性符合正态分布。每字节明文经过S 盒后,输出的汉明重量分布及其分布概率如表1 所示。
表1 DES 算法S 盒输出的汉明重量分布及其分布概率
能量分析攻击是侧信道攻击中最强有力的手段之一,具有实施设备简单,易于实现的优势。能量分析攻击的原理是密码芯片在执行密码算法时,所消耗的能量与密钥之间具有一定的相关性,即利用密码芯片工作时泄漏出来与密钥信息相关的能量信息进行攻击的方法。
根据分析方法不同,传统能量分析攻击可以分为简单功耗分析SPA(Simple Power Analysis)攻击、差分功耗分析DPA 攻击、相关功耗分析CPA 攻击等不同攻击类型[25]。
简单功耗分析攻击[25]是一种通过观察密码芯片加密获得的功耗曲线的特征,来猜测密钥的攻击方法。 其攻击方法简单,但受噪声影响较大,在攻击过程中很难区分真实的运算功耗和噪声,常常导致攻击失败。 因此它常用作为差分功耗分析攻击等攻击方法的辅助攻击方法。 例如,首先通过SPA 攻击,确定密码算法执行的时间区间,然后通过其他攻击方法对这一时间段进行攻击。
与简单功耗分析攻击相比,差分功耗分析攻击[1]是一种更强大的攻击手段,即使所采集到的功耗曲线中包含大量的噪声,差分功耗分析攻击也可以成功地从中恢复出密钥。 差分功耗分析攻击关注的是所有能量迹在同一时刻的统计特性。 其需要采集大量的能量曲线,将采集到的能量曲线照一定的规则划分成不同的两个集合,然后对这两个集合求平均值,最后对两个均值进行差值处理。 利用统计学分析方法,找到这些能量曲线与密钥的相关性,从而恢复出密钥。
使用相关系数模型改进后的差分能量分析被称为相关功耗分析[3]。 其中,相关功耗分析攻击采用相关系数的统计学方法。 该方法首先利用功耗模型对进行攻击的实际电路进行理论功耗的预测,然后将实际的电路功耗与预测的理论功耗联系起来,得出两者之间的相关系数。 因为如果猜测的密钥正确,那么根据电路功耗模型计算的理论功耗一定与实际电路的功耗具有一定的相关性。 根据相关性的大小也就是相关系数的大小来判定密钥的猜测是否正确。 图3 为相关功耗分析攻击的数据处理流程图。
图3 相关功耗分析攻击的数据处理流程图
如图3 所示,相关功耗分析攻击分为五个步骤:
第一步:选择攻击点。 计算密码算法该攻击点的中间值X。 中间值X 与输入的N 个明文Ii( 1 ≤i ≤N)和K 个密钥Kj( 1 ≤j≤K)有关。如公式(2)所示。
式(2)中,Xij表示当输入明文为Ii( 1 ≤i ≤N),密钥为Kj( 1 ≤j≤K)时中间变量的值,f由密码算法决定。
第二步:输入N 个不同的明文,得到N 条能量曲线,每条能量曲线上有W 个采样点。 因此,得到一个N 行W 列的实际功耗矩阵,用P表示。
第三步:当第一步选择好攻击点后,输入N个明文和K 个密钥。 将所有可能的Kj( 1 ≤j≤K)与输入的明文Ii( 1 ≤i ≤N)计算得出中间变量xij。 得到的所有中间变量组成了一个N 行K 列的矩阵。 根据选择的功耗模型,将中间值xij映射成理论功耗hij,所有的理论功耗组成了一个N 行K 列的矩阵,用H 表示。
第四步:利用相关系数方法计算理论功耗矩阵H 的列(记为hi)与实际功耗矩阵P 的列(记为pj)的线性相关程度,并得出正确的密钥。 这些相关系数构成了一个K 行W 列的相关系数矩阵R。 相关系数计算方法如公式(7)所示的方法。
能量迹的正确分类依赖于正确的猜测密钥,当密钥猜测正确时,相关功耗分析攻击出现一个尖峰,尖峰出现的采样点,表示中间变量正在被执行的时刻;当猜测密钥错误时,相关功耗分析攻击不会出现尖峰。
其中c 类是根据给定密钥猜测k*和输入的泄漏模型计算的。
3.2.1 SBOX 输出汉明重量模型
由于DES 中S 盒的非线性度最高,对于能量分析攻击来说,选择S 盒作为攻击点,会得到更多与算法相关的信息,因此,能量分析攻击中,经常选用SBOX 输出值为攻击点,其攻击对象如图4 所示。
图4 能量分析攻击点
在能量分析攻击中,一般使用汉明重量模型来表示芯片中操作数据的功耗模型[26]。 对于DES 算法来说,对于每一字节明文输入,S 输出的汉明重量值都在[0,4]这一区间,因此,使用机器学习对密码芯片SBOX 输出值的汉明重量建立标签模型,首先训练出一个5 分类的模型,然后再进行测试攻击。
3.2.2 SBOX 输出完整字节模型
对于DES 算法来说,对于每一字节明文输入,S 盒的输出值都在[0,15]这一区间,并且互不相等。 因此,使用机器学习对密码芯片SBOX输出完整字节建立标签模型,首先训练出一个16 分类的模型,然后再进行测试攻击。
3.2.3 评估指标
为了评估不同机器学习模型攻击效果,本文用两个指标来评估模型的性能,这两个指标是:猜测熵和精确度。
猜测熵是Side Channel Attacks (SCA)[2]中评估攻击性能的常用指标。 其定义如下:设g 为每次实验所有可能密钥的递减概率排序,设I 为定义正确密钥的索引。 在进行s 次实验时,得到一个矩阵[g1,g2,...gs] 和相应的向量[i1,i2,...is],猜测熵为确定正确密钥的平均位置如公式(12)所示:
换句话说,猜测熵描述了恢复实际密钥所需的平均猜测次数。
机器学习中常用的度量标准是精确度。 定义为分类正确的样本数除以所有的样本数,通常来说,正确率越高,分类器越好。 二分类模型其定义如公式(13)所示:
其中,TP、TN、FP、FN 均为混淆矩阵,分别表示为将正类预测为正类数、将负类预测为负类数、将负类预测为正类数误报和将正类预测为负类数漏报。 二分类混淆矩阵[27]如表2 所示。
表2 混淆矩阵
在使用正确率作为性能度量的同时,用查全率(recall)和查准率(precision)进行评估,能全面的评价模型的性能好坏。
则查准率P[28]为:
查全率R[28]为:
本文使用机器学习对DES 算法S 盒输出汉明重量进行攻击并构建模型时,分类结果就不仅仅包括正类和反类,一共包括五类,分别是汉明重量H0-H4,五种类别都看成正类,把分类正确的样本数分别记为T0,T1…T4,分类错误的样本数记为F01(表示将真实样本H0 预测为H1),F02(表示将真实样本H0 预测为H2)…F04,F12…F34。 五分类混淆矩阵[27][29]如表3 所示。
表3 五分类混淆矩阵
每一类的查准率与查全率可以分别使用公式(16)和公式(17)表示[27][29],其中i∈[0,8]。
当建立DES 算法SBOX 输出完整字节模型时,SBOX 输出完整字节分为16 类,当直接对密钥进行攻击时,需建立256 种分类,其正确率定义均同上。
能量分析攻击实施的依据是密码芯片的能量消耗依赖于芯片所执行的密码算法的中间值。因此,如果试图抵御这种攻击,就要降低甚至消除这种依赖性。 根据能量分析攻击防御技术是否改变算法的中间值,现有的防御技术可分为掩码型防御措施和隐藏型防御措施[30]。
3.3.1 隐藏型防御措施
隐藏型防御措施[30]不会改变算法的中间值,它的思想是通过随机插入伪操作和随机乱序等操作,切断密码算法中间值和功耗之间的关系,这样即使采用了隐藏技术的密码芯片和未加任何保护的密码芯片执行了同样的算法操作,产生了同样的中间值,但是相比未加任何保护的密码芯片,采用了隐藏技术的芯片,攻击者很难从它的能量曲线中获得相关的密钥信息。
随机插入伪操作的基本思想是在密码执行过程中和芯片执行前后随机插入操作。 它是根据在每一次执行密码算法时生成的随机数,来确定在不同位置插入伪操作的数量。
随机乱序操作的基本思想是,通过改变某些密码算法中特定操作的执行顺序来引入随机性。以DES 为例,其每一轮函数都需要执行8 次S盒查表操作,而且这些查表操作相互独立,所以可以打乱这些操作的执行顺序,即在每一次DES算法执行中,需要生成随机数用来确定8 个S 盒查表操作的执行顺序。
3.3.2 掩码型防御措施
掩码型防御措施[30]会改变算法的中间值,它是通过随机化密码芯片所处理的中间值来使密码芯片的能量消耗不依赖于密码芯片所执行的密码算法的中间值。
掩码技术首先生成一个随机数,然后使用随机数对中间敏感数据进行掩码,从而使算法所有的中间数据随机分布,这样就去除了算法中间数据与密钥之间的相关性。 具体操作步骤如公式(18)所示。 即密码芯片在T1,T2,T3 时刻分别执行了三个操作:生成随机数即掩码值r、对中间值x 进行掩码得到xr,掩码后的结果xr与密钥k 异或得到p。
由于r 是随机产生的,因此攻击者无法获得经过掩码计算的中间结果p,也就无法得到中间结果与密钥之间的关系,从而能够抵御能量分析攻击。
针对未知防御技术的智能卡算法模块的攻击思路如图1 所示。
首先选择传统能量分析攻击方法CPA 进行攻击,选择包含更多算法信息的S 盒作为攻击点,选择准确率更高的汉明重量模型作为攻击模型。 倘若攻击失败,由3.1 节相关系数分析CPA攻击原理可知,假设的密钥形成的理论功耗矩阵H 和实际功耗矩阵P 不匹配而导致攻击失败,这种现象可能是由于该DES 算法加了防护措施。
当传统能量分析攻击没有攻击成功时,本文进一步选择更强大的机器学习与能量分析攻击相结合的方式进行破解密钥。 攻击点仍选择包含更多算法信息的S 盒作为攻击点,选择准确率更高的汉明重量模型作为攻击模型。 倘若实验结果表明,其猜测熵低于或略等于理论上的平均猜测熵时,此时本文认为基于该方法进行能量分析攻击,攻击失败。 因为它的攻击效果几乎与随机猜测的效果相同,甚至略低于随机猜测的效果,对提高攻击效率起不到任何的指导作用。
当传统能量分析攻击没有攻击成功、且基于SBOX 输出汉明重量模型的能量分析攻击也未攻击成功时,本文采用基于SBOX 输出完整字节模型进行破解密钥。 倘若实验结果表明,它的攻击效果几乎与随机猜测的效果相同,甚至略低于随机猜测的效果,对提高攻击效率起不到任何的指导作用。 此时本文认为基于该方法进行能量分析攻击,攻击失败。
当传统能量分析攻击和使用机器学习算法选择S 盒输出作为攻击点均攻击失败时,说明该智能卡算法模块已经添加了安全防护,如进行了掩码型防御措施和隐藏型防御措施。 此时,本文采用基于密钥的能量分析攻击,建立密钥与功耗曲线的关系。
本实验的攻击对象为一款未知防御技术的智能卡,采集智能卡加密时的能量曲线。 通过依次采用相关性功率分析CPA 攻击、基于SBOX输出汉明重量模型的能量分析攻击、基于SBOX输出完整字节模型的能量分析攻击和基于密钥的能量分析攻击来对该未知防御技术数据集进行攻击并进行分析,由于智能卡上DES 算法有防御,所以前三种攻击均未成功,基于密钥的能量分析攻击成功。
针对智能卡上未知防御技术的能量分析攻击,本文首先选用传统能量分析攻击中最具代表性的攻击方法-相关系数分析CPA 攻击。 本实验的攻击点为SBOX 输出值,使用汉明重量作为标签。 本实验设定功耗曲线条数为30000 条,每条能量曲线上特征点为1200。 其实验结果如图5 所示。 由图5 可知,用该方法进行能量分析攻击时,各特征点的皮尔森相关系数均小于0.015,即具有极弱的相关性或不相关,此时,可认定为该攻击方法无效,即无法成功破解密钥。
图5 CPA 攻击结果
针对智能卡上未知防御技术的能量分析攻击,当传统能量分析攻击没有攻击成功时,本文使用机器学习与能量分析攻击相结合的方式进行破解密钥。 根据DES 算法特性,对于每一字节明文输入,S 盒输出的汉明重量值都在[0,4]这一区间,因此,使用机器学习与汉明重量模型进行能量分析攻击时,首先根据汉明重量标签,训练出一个5 分类的模型,然后再进行测试攻击。 本实验设定功耗曲线条数为50000 条,其中40000 条用来训练模型,10000 条用来验证。 本实验采用机器学习算法卷积神经网络,随着迭代次数的增加,损失函数和精确度的变化如图6 所示。 由图6 可知,随着迭代次数的增加,损失函数逐渐下降并稳定,精确度逐渐上升稳定于0.37。 猜测熵为2.1986。
图6 损失函数和精确度的变化
由表1 可知,DES 算法S 盒输出的汉明重量分布不均匀,呈正态分布。 对16 种可能的SBOX 输出值,定义汉明重量值和权重占比的映射关系为f:(0,1,2,3,4) →(1,4,6,4,1),按照先猜测概率最大的可能密钥的原则,依次猜测汉明重量为2 →1 →4 →0 →5 时,其理论上平均的汉明重量猜测熵如公式(19)所示。
即对DES 算法,当随机猜测一字节密钥时,其理论上平均猜测熵为2.1875。 而通过基于SBOX 输出汉明重量模型的能量分析攻击,实验结果显示猜测熵为2.1986,略高于理论上平均猜测熵为2.1875,此时本文认为基于该方法进行能量分析攻击,攻击失败。 因为它的攻击效果几乎与随机猜测的效果相同,甚至略低于随机猜测的效果,对提高攻击效率起不到任何的指导作用。
针对智能卡上未知防御技术的能量分析攻击,当传统能量分析攻击没有攻击成功、且基于SBOX 输出汉明重量模型的能量分析攻击也未攻击成功时,本文采用基于SBOX 输出完整字节模型进行破解密钥。 对于DES 算法来说,对于每一字节明文输入,S 盒的输出值都在[0,15]这一区间,并且互不相等。 因此,使用机器学习与SBOX 输出完整字节模型进行能量分析攻击时,首先根据S 盒输出完整字节标签,训练出一个16 分类的模型,然后再进行测试攻击。 本实验设定功耗曲线条数为50000 条,其中40000 条用来训练模型,10000 条用来验证。 本实验采用机器学习算法卷积神经网络,随着迭代次数的增加,损失函数和精确度的变化如图7 所示。 由图7 可知,随着迭代次数的增加,损失函数逐渐下降并稳定,精确度逐渐上升稳定于0.069。 猜测熵为8.424。
图7 损失函数和精确度的变化
由2.2.1 小节,DES 算法SBOX 输出完整字节特性可知,DES 算法S 盒的输出值都在[0,15]这一区间,共有16 种可能值。 当随机猜测一个字节密钥时,其理论上猜测熵为8.5,其计算方法如公式(20)所示。
而由实验结果可知,基于SBOX 输出完整字节模型的能量分析攻击,猜测熵为8.424,几乎与随机猜测一个字节密钥时的理论猜测熵相等,即使用该攻击方法的攻击效果几乎与随机猜测的效果相同,对提高攻击效率起不到任何的指导作用。 此时本文认为基于该方法进行能量分析攻击,攻击失败。
针对智能卡上未知防御技术的能量分析攻击,当传统能量分析攻击和使用机器学习算法选择S 盒输出作为攻击点均攻击失败时,说明该智能卡算法模块已经添加了安全防护,如进行了掩码型防御措施和隐藏型防御措施。 此时,本文采用基于密钥的能量分析攻击,建立密钥与功耗曲线的关系。 当破解DES 算法一个字节密钥时,首先使用机器学习算法训练出一个256 分类的模型,然后再进行测试攻击。 本实验采用机器学习算法卷积神经网络,随着迭代次数的增加,损失函数和精确度的变化如图8 所示。 由图8 可知,随着迭代次数的增加,损失函数逐渐下降并稳定,精确度逐渐上升稳定于0.1445。 猜测熵为12.4792,即平均需要猜测12.4792 次即可恢复一个字节密钥。
图8 损失函数和精确度的变化
DES 算法以8 字节为分组对数据进行加密,即攻击时需要攻击8 字节的密钥,用本文的基于密钥的能量分析攻击方法,攻击8 字节密钥仅需12.48次即可攻击成功,与采取暴力攻击方法需进行1288次攻击相比,非常大程度地提高了攻击效率,此时,本文认为基于该方法进行能量分析攻击,攻击成功。
本文针对未知防御技术的智能卡密码算法,研究了使用传统能量分析攻击方法CPA 以及机器学习能量攻击方法。 针对SBOX 输出汉明重量、输出完整字节进行攻击均失败,最后使用机器学习对密钥进行建模并攻击成功。 攻击对于未知防御技术的智能卡中使用DES 算法的密钥的猜测熵为12.4,完成DES 算法中8 个字节密钥的攻击仅需要12.48次暴力破解,比原来的1288次有很大提高。