学习笔记——CPA相关功耗分析

    ##########经过评论里的旁友指出,这里应当是CPA不是DPA

以下为原文:

        最近在学习偏信道攻击,很多论文里都会提到或者用到DPA,它们主要讲的是DPA的步骤,但是对于为什么要那么做我看得不太懂,下面是我的一些个人理解,如果有理解错误的地方欢迎指正。内容除了相关的博硕论文以外,主要参考《能量分析攻击》一书。

    首先DPA的特点是它主要是分析能量消耗和被处理数据间的依赖关系,不像SPA通沿着时间直接分析密码设备的能量消耗。其他的相关概念就不再多提,基本都可以查得到,下面介绍DPA的每个步骤:

1.选择所执行算法的某个中间值。

        这个中间值表现为一个函数f(d,k),这里的d一般是明文或者密文,而k是密钥的一部分。为什么这样取中间值可以结合密码的差分分析方法来理解,在差分分析方法里,一般通过研究某一个点(比如S盒)的输入和输出来获取密钥。所以这里的中间值函数里,d是变量,通过改变d的输入来得到密钥k的值。

2.测量密码设备在加/解密时的能量消耗。

        这里取D个数据分组,将这些数据记作向量\vec{d}={\begin{pmatrix} d_{1} \\ d_{2}\\ ...\\ d_{D} \end{pmatrix}},d_i表示第i次加/解密操作对应的数值。

        在每次设备运行时,都记录下一个能量迹,(这里的能量迹是指电压差),对应于d_i的能量迹记为\vec{t_i^{'}}=(t_{i,1},..t_{i,T}),T为能量迹的长度。针对D个数据分组的每一个,都有一个条能量迹与之对应,由此得出一个D×T的矩阵T

\begin{pmatrix} d_{1,1} & d_{1,2} &...& d_{1,T}\\ d_{2,1} & d_{2,2} &...& d_{2,T}\\ ... \\ d_{D,1} & d_{D,2} & ...&d_{D,T} \end{pmatrix}

理解时可以把这个矩阵当作一个图,其中列值当作时间轴,而每一个元素就是在同一时间下的不同的点,大致是下面这样:

        也就是说矩阵的每一列都是由相同的操作所引起的能量消耗。在采集能量消耗时,有的密码设备会使用一些防御侧信道的手段导致能量轨迹错位,还需要进行对齐。

3.计算假设的中间值

        猜测k的值,针对每一个k值,计算假设的中间值。将这些值记为向量\vec{k}=(k_1,k_2,...k_K),K为k值可能取的值的数量。由中间值函数f(d,k)计算出假设的中间值,得到一个新的D×K的矩阵V

\begin{pmatrix} d_{1,1} & d_{1,2} &...& d_{1,K}\\ d_{2,1} & d_{2,2} &...& d_{2,K}\\ ... \\ d_{D,1} & d_{D,2} & ...&d_{D,K} \end{pmatrix}

        矩阵的每一列表示设备D次加/解密运行所计算出的中间值。这里的k是密钥所有可能取的值,而实际的k值就是其中的某个,所以要确定哪一列是设备在加/解密时处理的数据。

4.将中间值映射为能量值

        将假设的中间值映射为实际的能量值,通过能量模型,比如汉明距离模型和汉明重量模型(这两个模型在相关的论文里也经常提到),将假设的中间值V转化为假设的能量值矩阵H。

5.比较假设能量消耗值和实际的能量迹

        将得出的假设的能量值矩阵和实际测量的结果相比较,也就是把上面提到的矩阵H的每一列与矩阵T的每一列相对比,最后得出一个新的矩阵R,R的每个元素可以理解为假设值与实际值的匹配程度,值越高,就表明实际的密钥与猜测的密钥相关性越强,根据这个匹配程度可以找出正确的密钥。

        概括一下就是,

1.先选择一个中间值函数,这个函数以密钥k和已知的明文或者密文作为参数,求出中间值。

2.找出密钥k所有可能的取值,由此得出很多个可能的中间值。

3.使用能量模型把这个中间值转换为能量消耗值。

4.测量密码设备实际加/解密时的能量消耗

5.把实际的能量消耗跟刚才中间值转化出来的能量值相对比,比较哪一个k所生成的能量消耗数据与实际的能量消耗最匹配,就是所要求出的密钥k。

        以上是我理解的DPA的大体流程,而对于其中的每一步都还有很多细节,需要后续进一步学习和补充。如果有理解不对的地方欢迎交流。_(: 」∠)_

  • 4
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值