论文笔记:针对盲化的 RSA算法的水平聚类侧信道攻击

论文笔记:针对盲化的 RSA算法的水平聚类侧信道攻击

作者:史凡玉(天津大学,2020年1月硕士学位论文)
其文章发表:
Shi F , Wei J , Sun D , et al. A Systematic Approach to Horizontal Clustering Analysis on Embedded RSA Implementation[C]. 2019 IEEE 25th International Conference on Parallel and Distributed Systems (ICPADS). IEEE, 2019.

论文笔记:Systematic Approach to Horizontal Clustering Analysis on Embedded RSA Implementation

选择明文水平侧信道攻击

本文特殊明文𝑀 = 1,算法 5 只有步骤 6 与密钥位的值相关:
当𝑑𝑖−1 = 0,步骤 6 执行R[1] = R[1] × 1 𝑚od 𝑛 = 𝑟−1 × 1 𝑚od 𝑛.;
当𝑑𝑖−1 = 1,步骤 6 执行R[0] = R[0] × 1 𝑚od 𝑛 = r × 1 𝑚od 𝑛。
𝑀 = 1时,R[0]中寄存器的值维持为r;R[0]中寄存器的值维持为𝑟−1。

以 100M/s 的采样率采集加密的整个功耗曲线。在 RSA 加密算法中,很难分辨模幂曲线和蒙哥马利转化域曲线(图 3-1 中模幂开始点和结束点)。在这里插入图片描述
比特位对齐:

水平侧信道攻击中,每个密钥位相关的功耗曲线必须两两对齐,即模幂中每次循环造成的功耗曲线进行对齐。模幂功耗曲线记作 T,它由一维向量(1 × L)表示。每次循环操作的时间长度相等。以 Boscher 的从右到左算法为例,每个循环都由这两个模乘操作组成。因此,功耗曲线 T 可以平均分为 s 个子迹𝑂1:𝑠,其中 s 为密钥位的比特长度。功耗曲线 T 可以表示为以下矩阵:
在这里插入图片描述
𝑂1:𝑠分别对应各个密钥位。𝑡𝑖,𝑗记为功耗曲线 T 的各个元素。

基于希尔伯特-黄变换模幂边界检测结果

由于时域上的不连续性导致频域上的突变,通过分析瞬时频率函数便能找出有效功耗的边界位置。鉴于功耗曲线非平稳非线性,以及希尔伯特-黄变换的局部特性,用希尔伯特-黄变换进行了谱分析。经验模态分解可根据自身信号自动分解出由高频到低频排序的信号分量,且分解产生的经验模态函数两两正交。经验模态函数分解有以下假设:

1)信号具有至少两个极值,分别是一个极大值和一个极小值。
2)时间的特征尺度是两极值之间的时间长度。
3)如果数据完全没有极值,但仅包括突变点,可以对信号进行一次或者多次的差分来得到极值点。

记RSA 加密算法执行的功耗曲线为𝑋(𝑡)。首先根据三次样条插值,计算极大/极小值包络线。𝑚1记为两个包络的均值,ℎ1记为第一个分量,则:h1= X(t)- m1 (3-1)
该分解算法是一个筛选的过程,下一次分解中ℎ1被定义为数据,再进行筛选。其中𝑚11是新数据的极值包络均值。
h11=h1-m11 (3-2)
筛选过程将会重复 k 次,直到ℎ1𝑘是第一个满足上述条件的经验模态函数。
h1k=h1(k-1)- m1k (3-3 )
𝑥1即为第 i 个经验模态函数。因此,𝑥1 = ℎ1𝑘 (3-4)
我们将𝑥1从原信号中分解,得出余量𝑟1。将𝑟1作为原信号重复上述操作。𝑟1 = 𝑋(𝑡) − 𝑥1 (3-5)
直到余量序列𝑟𝑖为单调函数或者满足下述条件:
在这里插入图片描述
最后,功耗曲线𝑋(𝑡)被分解成了有限多个经验模态函数和一个余量序列。该余量序列是一个趋势项,表明功耗曲线的趋势。即:
在这里插入图片描述
其中,n 为功耗曲线分解为经验模态函数的个数;𝑟𝑛为第 n 次分解后所得余量序列;𝑐𝑖为第 i 个经验模式函数,且这些函数频率由高到低依次减小。经验模态函数的分解,使得功耗曲线分解为有限个满足希尔伯特变换的分量。每个经验模态函数中包含的频带各不相同。由于经验模态函数的时间尺度是两个极值点之间的时间长度。因此每个经验模态函数的平均周期可以通过以下公式计算:𝑇 = t/𝑘 × 2 (3-8)
其中 t 被定义为功耗曲线的时间长度。k 是极值点的个数。这里的极值点包括极大值和极小值。
由于经验模态函数是基于数据自身的局部特征时间尺度,因此可以确定存在唯一的经验模态函数包含起始(结束)点特征。功率曲线应该被切分为两段来确定模幂操作功耗的开始点和终点。否则,起始段和结束段的时间尺度必须近似相等。这是因为经验模态函数是窄带信号,唯有时间尺度相似的信号才能被分解到同一个经验模态函数中。为了避免额外的限制条件,我们分别使用功耗曲线的前半段和后半段来检测开始点和结束点。我们将两段功耗曲线分别进行经验模态分解。

选择特殊分量的方法

当功耗曲线被分解后,通过对时间尺度的估计,可以找到包含开始点和结束点时间尺度的经验模态函数。将估计蒙哥马利域与各个经验模态函数的时间尺度做对比。各个符号在表 3-1 中给予说明。
在这里插入图片描述
为了保证加密的安全性,私钥一般为长整数(512bit 或 1024bit),因此满足以下条件:
tstart ≤ 𝑡exp (3-9)
t𝑒nd ≤ 𝑡𝑒xp (3-10)
由于公钥密码体制中的参数个数总是大于 2,因此转换至少需要 2 个域转化。由此可得:
t𝑠tart > 𝑡𝑏it (3-11) t𝑒nd > 𝑡𝑏it (3-12)
其中𝑡bit ≈ 𝑡total/m (3-13)
𝑇find记为包含开始点的经验模态函数的时间尺度。
𝑇find= tpart1/𝑘 = (tstart+texp)/𝑘 (3-14)
其中 k 为周期数。由于这个经验模态函数的时间尺度近似于t𝑠tart,因此 k 的极小值为 2,并且随着 m 的增加而增加。因此:k ≥ 2 (3-15)
综上:𝑇𝑓ind = (t𝑠tart + t𝑒xp)/𝑘 ≥ 2t𝑠tart/𝑘 ≥ 2t𝑏it /𝑘 (3-16)
该式在k ≥ 2的条件下都满足。因此:
𝑇𝑓ind ∈ (t𝑏it,𝑡𝑝art1/2] (3-17)

针对特殊分量的谱分析

通过分析得到特殊的经验模态函数,得到包含模幂的开始点和结束点特殊分量。分析该分量的瞬时频率,可以得到各个时间的频率变化。利用希尔伯特分解
可以得到调频信息和调幅信息,从而得到瞬时频率函数。
相较于傅里叶变换:
在这里插入图片描述
希尔伯特变换为:
在这里插入图片描述
利用标准化调幅调频分解方式,该经验模态函数可以被分解为纯调幅信号和纯调频信号的乘积,瞬时频率可以由纯调频信号求得。
求得经验模态函数|𝑥(𝑡)|的所有极大值点(𝑡𝑘, 𝑥𝑘), 𝑘 = 1,2, … , 𝑀 ,为了抑制端点效应,在数据两端延括出新的极值点:
在这里插入图片描述
其中,𝑡为该单分量信号的时间长度。通过包络函数进行信号 x (t) 标准化,即x1(t)=x(t)/b11(t) (3-22)
采用三次样条插值拟合|𝑥(𝑡)|所有极值点得到包络函数𝑎11(𝑡)。
检查𝑥1(𝑡)是否存在骑波,若存在,则将骑波关于极值点的连线进行翻折,得到的数据仍然记为𝑥1(𝑡),如𝑥1(𝑡)不是纯调频信号,重复上述步骤
在这里插入图片描述

检测开始点

以开始点为例,采用前半段功耗曲线𝑡𝑝art1作为实验数据。

1)功耗曲线的经验模态分解
𝑡𝑝art1通过经验模态分解为有限个经验模态函数(窄带信号)。
2)分量的选择
模幂内各循环操作的时间长度:t𝑏it = 𝑡𝑡otal /(1024×10) = 4936 (4-1)
在这里插入图片描述
通过查表,只有第 11 个经验模态函数满足T ∈ (t𝑏it,𝑡𝑝art1/2] = (𝑇10, 𝑡𝑝art1/2 ] (4-2),即开始点。

3)对经验模态函数进行谱分析
经过希尔伯特变换,经验模态函数被分解为振幅函数A(t)和频率函数F(t),如图 4-5 。图 4-6 描述了振幅函数,数据中时域的突变将导致频率突变从而在频率函数中形成尖刺。这是由于时域的不连续性。
在这里插入图片描述
在这里插入图片描述
4)边界点的验证
通过将频率函数进行差分,可观察到频率突变点。如图 4-7 。其中在数据段中最后一个突变点即为模幂结束点。之后的频率突变间隔长度,与模幂操作中每次循环操作的时间长度大致一致。这些突变位置对应于一个指数位的处理的片段边界。
在这里插入图片描述
同样的方法可在后半段功耗曲线的长度找结束点。

在找开始/结束点过程中,出现了端点效应(端点处的值不精确,发生“过冲”现象)。这是因为在经验模态分解的过程中,以极值点为节点作样条插值来构造包络,无法确保数据序列左右两端点恰为极值点,所以在端点处插值的误差较大。为了抑制端点效应问题,我们使用了镜像延括,使得信号内部的极值点向外部镜像延括合适长度,以此来缓解端点值不准确的问题。

过滤带宽的选择(降噪)

基于希尔伯特-黄变换的滤波策略,将每个子迹串联预处理(本文只截取了前 56bit 的密钥位𝑂1:56。):

  • 使用与功耗曲线𝑂1:56相同的数据量来构造虚拟高斯白噪音。
  • 将其分解成多个经验模态函数,计算各经验模态函数的平均周期。
  • 将其与𝑂1:56对应进行经验模态函数对比(平均周期大致相等,则为噪声,本文噪声为高频分量),以此来确定需要过滤掉的频率分量和带宽。

如图 4-13 ,从第 6 个经验模态函数开始,白噪声和功耗曲线的平均周期开始出现较大差异。即从第 7 个经验模态函数开始包含较多的有效信息。将第 7 个以后的经验模态函数进行累加,重构出新曲线𝑂′1:56。
在这里插入图片描述

基于聚类的密钥恢复

将处理后的数据根据 k 均值(见下图)进行聚类分析,所得的两类结果分别对应密钥位的 0,1。
在这里插入图片描述

接下来,应用 k 均值算法将新曲线𝑂′1:56聚为两类。这两类分别对应密钥位二进制表示中的 0 或者 1。我们使用贝叶斯概率来分析聚类结果。设联合概率分布:在这里插入图片描述
其中,µ 和 σ是每个集群的均值和标准差。根据联合概率分布P(𝑂′1:56, µ𝑐)和先验概率中p(𝜇𝑐),可以计算后验概率𝑃𝑃(𝜇𝑐|𝑂′1:56)
在这里插入图片描述
通过贝叶斯公式,我们收到了后验概率𝑃𝑃(𝜇𝑐|𝑂𝑂′)。图 4-14 显示了对于每个功耗曲线𝑂1:56的概率值𝑃𝑃(𝜇1|𝑂′1:56)。当概率值大约这个阈值时,该密钥位为 1。
在这里插入图片描述
实验在 56 个密钥位中成功恢复了 55 个密钥位,正确率达 98.2%。若攻击者确定可能错误的位置,使用暴力攻击便可以恢复完整的正确指数。这些概率𝑃(𝜇1|𝑂′1:56)趋近于 0.5的点,可以优先考虑为错误点,从而增加暴力破解的效率。

表中列出近年来对公钥密码进行攻击的所用功耗曲线条数和密钥恢复率,以此与本文进行比较。在这里插入图片描述

泄露分析及防护

泄露分析

算法 5采取了所有的盲化措施,但仍可从功耗曲线中找到信息泄露。基于特殊明文攻击,步骤6如下:

私钥位为 0 :R[1] = R[1] × 1 𝑚od 𝑛 = r−1 × 1 𝑚od 𝑛 (5-1)
私钥位为 1 :R[0] = R[0] × 1 𝑚od 𝑛 = r × 1 𝑚od 𝑛 (5-2)

在长整数模乘LIM(x, y).过程中,LIM(x, y).表示为:在这里插入图片描述
其中,b = 2𝑡,t = 0, … , k − 1.。这个过程可以用下列矩阵表示:
在这里插入图片描述
寄存器𝑧𝑖, 𝑖 = 0, … , 𝑘 − 1存储第 i 列的累计和。𝑧𝑖,𝑗即为第 j 次迭代后寄存器𝑧𝑖的结果。在这里插入图片描述
很显然,𝑧𝑖,𝑗依赖于操作数的值,但是操作数是由密钥位决定的。这个𝑧𝑖,𝑗和 𝑧𝑖,𝑗−1的汉明重量差造成了主要的泄露。

防护方法

通过使相同密钥位对应模乘功耗产生差异来隐藏功耗泄露。即使两个模乘操作数相同,但寄存器的值相互调换会导致不同的中间值结果。长整数模乘LIM(x, y)将会改变为LIM(y, x),其中:在这里插入图片描述
在这里插入图片描述
寄存器中值的调换改变了汉明距离。LIM(x, y) 和 LIM(y, x)交替完成模乘操作。交替的顺序将由随机产生的随机数来决定。这种防护减少了存储数据和泄露的相关性,且无额外开销。
同样,选择前56bit 密钥位进行防护实验,用前 10 个密钥位的贝叶斯概率来分析结果。图 5-1为正确密钥位(0000010011)2的攻击结果,表明防护成功。
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值