邓 彬 林永明
(1.威凯检测技术有限公司 广州 510000;2.中国电器科学研究院股份有限公司 广州 510000)
侧信道攻击技术的广泛应用和不断进化给计算设备安全带来了挑战,也加剧了对计算设备安全性的关注。许多研究者已经对侧信道攻击技术进行了深入研究,本文旨在介绍目前已知的各种攻击方法及其理论基础、技术原理和实际应用情况,分析现有的侧信道防御措施及其优缺点。本文的研究成果可以为相关领域的研究者和从业者提供有价值的参考和指导,促进侧信道攻击技术研究的发展和计算设备安全性的提高。
侧信道攻击技术起源于上世纪90年代,在密码学研究领域已经存在了很长时间。最早的侧信道攻击是对称密码算法的攻击,其中最早的一种是对芝加哥大学的Lucifer 算法进行的攻击。由于Lucifer 算法的密钥长度只有128 位,攻击者可以使用纯文本和密文分析攻击技术轻松地破解它。1999年,Paul Kocher 等人首次在文章中提出了差分功耗分析(Differential Power Analysis,DPA)的概念[1]。
随着技术的进步,侧信道攻击已经成为密码学研究领域中不可忽视的一部分。在过去的几十年中,学术界和业界已经提出了许多不同类型的侧信道攻击技术,包括能量分析攻击技术、时序攻击技术、电磁攻击技术、故障攻击技术等。
在能量分析攻击中,由于目标设备进行加密操作时能量消耗会因算法和数据不同而产生差异,攻击者利用这些差异实现密钥信息窃取。
在时序攻击中,攻击者利用统计学方法和高精度计时设备等工具对目标设备进行多次加密操作,获取加密时间序列,并通过对序列的分析,推断出加密操作的过程中存在的时序特征。
在电磁攻击中,攻击者利用电磁波辐射、传导和耦合等方式来获得设备运行时的机密信息。它是一种非侵入式攻击技术,无需接触目标设备,仅通过电磁辐射即可实现攻击。
在故障攻击中,攻击者通过人为引入设备故障实现攻击目标,其攻击理论是通过各种方式使得目标设备出现故障,通过故障信息进一步分析。主要分为三种类型,永久性故障是指设备的某些部分被毁坏,不能再次使用;持久性故障是指设备的某些部分受到了损坏,但是可以通过重新编程或者其他方法修复;暂时性故障是指设备在攻击时发生了一些暂时性的故障,但是在攻击结束后设备可以正常工作。
侧信道攻击是一种新型的攻击手段,往往不需要与被攻击设备进行物理接触即可实现攻击,窃取机密信息,对用户或系统造成严重后果,因此需要通过硬件和软件的方式为设备增加侧信道防御措施。在各种侧信道攻击方式出现之后,学术界也提出了针对侧信道攻击的防御措施,但是由于侧信道防御需面面俱到,所以针对不同类型的攻击方式要实施不同的防御对策。
下面本文将从侧信道攻击、侧信道防御两个方面介绍基本原理、攻击/防御模型、应用场景及发展现状。
侧信道攻击目的在于获取设备运行时产生的电压、电磁辐射、声音、温度等侧信息,从而实现密钥获取、信息窃取。与传统密钥破解不同,侧信道攻击者只要收集到足够多的侧信息,便可以花费极小代价恢复密钥。本章主要介绍能量分析攻击、时序攻击和故障攻击的基本原理、攻击方法和发展现状。
1.1.1 能量消耗模型
1)汉明距离模型(Hamming-distance model,HD 模型)
汉明距离模型的理论是通过对电路在一定时间内0 →1 转换的次数的记录来描绘该电路在该时间内所消耗的能量,将这个时间再进行细细划分就可得到描述电路运行情况的能量迹。
汉明距离模型对于电路消耗能量描述具有重要应用意义。下文给出汉明距离模型的形式化表述。值v0和v1的汉明距离等于v0v1的汉明重量,汉明重量等于逻辑值为“1”的比特个数所以HW(v0v1)表示v0和v1中相异比特的个数。
汉明距离模型假设所有的元件对能量消耗具有相同的影响,0 →1 转换和 1 →0 转换具有同样的能量消耗。值v0和v1的汉明距离可以计算如下:
式中:
v0,v1—电路中计算的两个值;
HD()—汉明距离的计算函数;
HW()—汉明重量的计算函数。
2)汉明重量模型(Hamming-weight model,HW 模型)汉明重量模型的理论是将电路能量消耗正比于电路处理数据中“1”的个数,但要说明这一点,需要着眼于一些具体的场景。对于所有的这些场景,均假设被攻击设备的某一部分依次处理数据v0,v1和v2。目标是在不知道v0和v2的情况下。对处理数据v1造成的能量消耗进行仿真。两种转换中均涉及v1分别是v0→v1和v1→v2。在接下来的场景中只考虑转换v0→v1。因为对该转换所作的所有考虑同样适用于v1→v2。
①v0的各个比特相等且恒定
考虑的第一种情形是每一次v0→v1转换中,v0的各个比特均相等的情况。例如,在处理v1之前,n 位数据总线总是先处理v0=0(v0的各个比特都为0)。在这种情况下汉明重量模型与汉明距离模型是等价的,即
在v0的所有比特均为1 的情况下有
式中:
n—数据总线位数。
在发生v0→v1转换之前无论将v0的所有比特置0 抑或置1,汉明重量模型与汉明距离模型事实上是等价的。
②v0的各个比特恒定但不相等
在此场景中意味着攻击者并不知道v0的值。在这种情况下只有在仅仅关注v0→v1转换中一个比特的情况下,才能得到和上一个攻击场景中同样的结论。由前一种场景中的推论可知,如果仅仅考虑一个比特。则对能量分析攻击而言,汉明重量模型与汉明距离模型效果一样。
事实上,存在比已讨论过的上述三种场景更多的情形。特别地有v0和v1相互依赖的情况,也有v0的各个比特不服从均匀分布的情况。对于HW 模型能在多大程度上刻画能量消耗作出具有一般意义的断言是很困难的。
1.1.2 攻击方法
1)简单能量分析
简单能量分析(Simple Power Analysis,SPA)是在获取目标设备的能量迹后进行的简单分析。但是由于能量迹易受噪声干扰,所以此种方法一般用于攻击前对系统的初步分析,或用于特征极其明显的系统。
2013年甘刚等人[2]对使用Montgomery 算法实现的模幂运算进行了简单能量分析,针对Montgomery 算法本身存在可被侧信道攻击利用的信息泄露问题,从理论和实际功耗数据两方面分析了Montgomery 算法存在的安全漏洞,并基于该漏洞提出了对使用Montgomery 算法实现的模幂运算进行简单能量分析(SPA,simple power analysis)攻击算法。利用该算法对实际模幂运算的能量曲线进行了功耗分析攻击。
2)差分能量分析
差分能量分析(Differential Power Analysis,DPA)的目标是记录目标设备在进行许多数据的加解密动作时泄漏的海量能量迹,并基于能量迹利用密码设备能量消耗的数据依赖性恢复出设备密钥。
假设攻击者获得N 个待加密明文m1,m2,…,mN,其中mi对应的能量迹为t(i,1),t(i,2),…,t(i,M),猜测密钥为k1,k2,…,kK,在确定的能量泄漏模型下有
式中:
H—能耗矩阵。
DPA 攻击中,使用相关系数ri,j确定列h(i)和t(j)之间的线性关系(其中,i=1,2,…,K;j=1,2,…,M)。
式中:
r—相关系数矩阵元素;
h—能耗矩阵元素;
t—能量迹。
当猜测密钥ki错误时,相关系数ri,j值较小;而当ki正确时,相关系数ri,j值表现为极大。此时则可确定密钥。
2014年,Luke 等人[3]使用简单工作站的小型集群有效地处理多达 32 位的关键假设消费类显卡。 这种能力使他们能够结合许多中间目标;在这项工作中,他们第一次认真地尝试探成功组合的特征。结果表明结合S-box+AddRoundKey 或者另外包括一个中间 MixColumns计算通常会产生最强的结果。 多目标攻击规模可预测的噪声和关于不精确的功率模型是稳健的。
2020年,Gellersen 等人[4]介绍了Picnic 签名方案的第一个差分侧信道分析,这是美国国家标准与技术研究院(NIST)正在进行的后量子密码学竞赛的备选方案。他们提出了一个成功的底层多方实施的旁路分析LowMC块密码(MPC-LowMC)并展示如何通过利用算法的两个不同部分来使用边信道信息来恢复整个密钥。LowMC 密钥恢复然后允许为调用 Picnic 后量子签名方案伪造签名。密钥恢复成功且少于1 000 个LowMC 跟踪,这可以从少于 30 个观察到的Picnic 签名中获得。
时序攻击(Timing Attack,TA)由Paul Kocher 等人在1996年提出,并对DiffieHellman、DSS、RSA 进行了时序攻击[5],该攻击方法旨在利用加密所消耗时间进行密钥破解。通过获取在不同的输入下设备操作的执行时间从而提取出关键信息。原理如图[6]
如下给出从左至右“平方-乘法算法描述”。
算法:m=bemod n
输入:基数b,模数n,指数e=(etet-1…e0)2,et=1
输出:m
1. s=1
2. for i from t to 0 do
3. if ei==1 then
4. m=s×b mod n
5. else
6. m=s
图1 时序攻击原理
7. end if
8. s=m×m mod n
9. end for
10. return m
在算法中可见,当指数e 为1 时执行语句4,为0 时执行语句6,体现在运行时间的区别是语句4 的模乘运算远大于语句6的赋值运算,在实际攻击中e即为密钥值,获取时间运行数据后进行方差运算进行密钥破解。
2011年,Billy 等人[7]描述了OpenSSL 对二进制字段上的曲线的阶梯实现中的一个定时攻击漏洞。他们使用此漏洞窃取TLS 服务器的私钥,其中服务器使用ECDSA签名进行身份验证。使用时间交换的消息、消息本身和签名,发起了一个恢复私钥的晶格攻击。
故障攻击通过技术手段对设备进行电压扰动、外部时钟、温度、外部光源、电磁等外部注入,从而使设备计算过程出现故障,攻击者利用正确密文、错误密文、密钥三者之间的关联性进行密钥的恢复。
故障攻击的思想由Boneh 等人[8]在1996年提出,基于模运算的代数性质使用故障注入技术实现了对RSACRT 公钥密码系统的攻击;Biham 等人[9]在1997年提出了差分故障攻击(Differential Fault Attack,DFA)技术,实现了对使用DES 算法的密码系统的密钥提取。2013年Fuhr 等人[10]在前人研究基础上利用统计学方法进行统计故障分析(Statistical Fault Analysis, SFA)。
1.3.1 激光注入技术
外部光源注入技术的基本原理是半导体材料的光电效应,当芯片未进行外部封装或已开封装,强光持续对其进行照射,此时由于光电效应,导致芯片内部电路中产生故障电流,从而进一步实现芯片寄存器存储临时值的目的[11]。
进行外部光源注入所使用的光源主要有强光、激光、x 光等,而其中激光注入是当前准确度最高的故障注入技术。在进行激光注入时需要将芯片开封装,暴露出硅表面,通过高精尖激光注入仪器进行空间和时间上的精准注入,引起芯片运算故障。Brummer 等人[12]在2015年成功实现了对90nm 和45nm 的FPGA 芯片进行精准激光注入,并达到了其芯片寄存器中临时值的改变的目标。
1.3.2 持久故障攻击
持久故障攻击由Zhang 等人[13]在2018年提出了持久性故障攻击。与传统的故障攻击不同,攻击者可以在加密阶段之前准备故障注入阶段,从而放宽了紧耦合时间同步的约束。 持续故障分析(PFA)是针对 AES-128的不同实现进行阐述的,特别是基于双模块冗余(DMR)的故障强化实现。
持久故障攻击的基本思想是对分组密码的查表实现的S 盒进行故障注入,目的在于使其中的某一表项出现错误,进而使得加密后的密文中字节值的分布出现偏差。具体原理[14]如下:设f 表示该分组密码的轮函数;L 表示其中的线性层;S 表示其中的非线性层,即S 盒部分,S′表示注入持久故障后的S 盒;p 表示轮函数的输入;c 表示轮函数的输出,若该轮函数为末轮的轮函数,则c表示最终的密文输出。那么就有:
式中:
f—分组密码的轮函数;
L—线性层;
S—非线性层,即盒部分;
S′—注入持久故障后的盒;
p—轮函数的输入;
c—轮函数的输出,若该轮函数为末轮的轮函数,表示最终的密文输出。
在过去的几十年里,缓存侧信道攻击(CSCA)严重威胁着用户信息的安全,这一再凸显了缓存的安全性。尽管安全缓存设计可以减轻或防御这种攻击,但高设计周期和挖掘成本降低了特定设计的开发。因此,许多研究人员专注于提出一个安全缓存模型来分析CSCA并简化安全设计。目前,缓存模型可以分为:①指标分析模型;② 缓存验证模型;③缓存抽象模型。然而,这些模型大多关注CSCA 的建立阶段,而不考虑CSCA的使用阶段。另一方面,缓存模型的粒度要么是整个缓存,要么是单个缓存行,这不能清楚地描述CSCA 中的缓存行为。为了克服这些限制,2022年Wang Chong 等人[15]提出了一种新的基于状态转换的缓存模型,并通过该模型给出了CSCA 的形式化规范。首先,我们总结了缓存集的11 个基本状态,并指出了CSCA 过程中的目标状态。然后从攻击前成本、状态转换成本和检测精度三个方面对CSCA 进行了描述,对CSCA 做了更全面的分析。
随着云计算的广泛应用,云安全的重要性日益凸显,VM 侧信道攻击会导致云中出现严重问题,因为攻击者正在执行导致可靠性问题的资源访问。2021年Hansraj等人[16]研究了针对云的各种攻击及其解决模型,通过使用各种技术(例如RSA 和AES)来检测针对云的侧信道攻击,整体分析提供了有关云资源级安全及其解决方案的完整信息。
2020年,Jin Xin 等人[17]进行了针对国密算法SM3的基于深度学习的侧信道攻击,他们使用相同的数据集针对不同的参数递归地训练网络,并用训练的网络攻击目标数据集以恢复不同的参数,成功恢复了密钥,证实了深度学习在侧信道攻击领域的适用性。
任何侧信道防御对策的目标都可以总结为以下两个:其一是掩盖密码设备侧信息,弱化其某些特征,最终使攻击者无法利用这些侧信息进行密钥恢复;其二是通过各种方式去除能量消耗、时间等侧信息的数据依赖性。因侧信道防御与侧信道攻击不同,侧信道攻击只需攻击一点,但是侧信道防御却要兼顾所有方面,所以侧信道防御难度极大,并且针对不同的攻击手段需要实施不同的侧信道防御对策,本章主要介绍针对能量分析攻击、时序攻击和故障攻击的防御对策及研究进展。
对能量分析攻击进行防御的主要手段是随机化和掩码,两种手段的目的均是尽可能消除能量消耗的数据依赖性。
2.1.1 随机化对策
对于随机化对策,由于能量分析攻击需要将目标设备的能量消耗在时间上执行“对齐”操作[18]。因此,可以采用将某一操作发生的时间随机化来进行抵御。2022年,罗玉玲等人[19]设计了一种基于两个混沌映射的密码系统,中间数据由明文、轮密钥和随机序列数三者通过异或操作生成,从而达到扩大密钥空间的目的。此外,随机序列数还控制随机化操作,通过随机化操作,将中间数据与能量消耗的关系进行隐藏,减少侧信道信息的泄露,以此达到抵抗能量分析攻击的目的。
2.1.2 掩码对策
而掩码对策的主要思想是将密码设备的每一个中间值都基于一个被称为“掩码”的随机数进行特定变换,即vm=v*m,该掩码m 由目标设备自身内部产生,即用即废,如此防止信息泄漏。而其中运算*是目标设备依据运行的加密算法中的操作进行定义,多为布尔异或○、模加运算+或模乘运算×。罗玉玲等人设计的密码系统采用加性掩码,掩码由混沌系统产生,将中间值v 与掩码m 进行异或,生成掩码中间值vm=vm,将掩码中间值作为线性运算的输入,则有
式中:
v—中间值;
m—掩码;
T()—线性运算。
由于T()是线性运算,式(7)可写为
当需要去除掩码时
对于时序攻击的防御,顾名思义需要在时间上实现。其中一种方法是算法改进,如对时序攻击中提到的算法进行改进
算法:m=bemod n
输入:基数b,模数n,指数e=(etet-1…e0)2,et=1
输出:m
1. s=1
2. for i from t to 0 do
3. if ei==1 then
4. m=s×b mod n
5. else
6. compute s×b mod n
7. m=s
8. end if
9. s=m×m mod n
10. end for
11. return m
在上述算法中不论ei是否为1,都做一次模乘运算s×b mod n,此时攻击者无法通过时间观测获取ei的信息。此方法固定了运算量,并且从结果来看确实是由较好的效果,但是不难看出,此方法也大大降低了算法的执行效率,要知道当ei不为1 时只需要进行赋值运算即可,此方法泛化了ei为1 和0 的操作,因此增加了许多模乘运算,算法执行效率大打折扣。
另一个思路是盲化技术,即先将数据进行盲化运算,再进行解密、去盲运算。将算法m=bemod n 修改为如下:
1)产生随机数r,r ∈[0,n-1];
2)计算r-1;
3)计算rpmod n,其中p 为公钥;
4)计算b'=brpmod n;
5)计算m'=(b')emod n;
6)计算m=m' r-1mod n。
该方法在第四步引入随机数产生b',使得无法将算法执行时间与输入的基数b 相联系,于是攻击者便无法获得关于e 的信息。
对于故障攻击的防护手段主要是随机化和增加故障监测机制。如在 2016年,Bindel 等人[20]调查了目前最有效的漏洞和阻力基于格的签名方案 BLISS(CRYPTO2013)、ring-TESLA(Africa Crypt 2016)和GLP 计划(CHES 2012)及其实施。对于每一个签名在方案中,他们发现了至少六次有效的攻击;Espitau 等人[21]特别研究了针对基于格的签名实现的故障攻击计划,同时关注 Fiat-Shamir 类型的结构(特别是 BLISS,还有GLP、PASSSing 和 Ring-TESLA)以及哈希和签名方案(特别是基于 GPV 的 Ducas-Prest 方案)柳巴舍夫斯基)。针对这些提出了几种故障攻击产生完整密钥恢复的方案,只有几个甚至一个错误的签名,并讨论可能的防范这些攻击的对策;2018年,Bruinderink 等人[22]将差分故障攻击的适用性扩展到基于格的密码学,展示了两种确定性的基于格的签名方案Dilithium 和qTESLA 如何容易受到此类攻击,证明了单个随机故障会导致允许密钥恢复的随机数重用场景,并将其扩展到错误诱导的部分随机数重用攻击,它不会破坏计算签名的有效性,因此更难检测;2019年,Howe 等人[23]提出了利用错误样本的预期分布,即高斯或二项式,通过使用统计测试来验证采样器运行正常。新颖的对策旨在防止所有以前的故障攻击错误采样器。
本文主要介绍了主流侧信道攻击技术的理论基础、技术原理以及研究进展,并介绍了对于不同攻击技术的防御对策和侧信道防御技术的研究成果等。