能耗分析攻击
在介绍能耗分析攻击(power analysis attack)之前,需要先介绍基于不同层面对攻击类型的分类。
基于攻击者是主动的还是被动的
- 主动攻击
在主动攻击中,为了密码设备表现异常,其处理的数据、环境可能被修改。攻击者可以通过表现异常的设备来恢复密钥。 - 被动攻击
被动攻击中,密码设备的基本上甚至完全在其规范范围内运行,攻击者只能通过观察设备的性质来恢复密钥。
基于攻击的攻击面
- 侵入式攻击
通过特殊工具对芯片进行物理篡改,需要打开封装直接访问芯片表面。- 如果可以直接借助芯片,可以直接在数据总线上连线,观察数据的传输。
- 半侵入式攻击
- 同样可以打开封装,访问芯片的表面,但不能对芯片表面进行电接触。
- 由于不能进行电接触,因此导致芯片受损害的概率大大降低。
- 非侵入式攻击
- 仅仅利用暴露在外部的可用信息,例如-运行时间、能量消耗等。
测信道攻击属于被动非侵入攻击。而能量分析攻击是测信道攻击最重要的一种攻击方法。
能耗分析攻击分类
- SPA (Simple power analysis)
需要相对少的能耗分析曲线,只需要肉眼观察曲线,便可达到攻击目的。 - DPA(Differential power analysis)
需要大量功耗曲线,需要用到数理统计方法达到攻击的目的。
DPA攻击实例
如何生成能量迹
\quad 我们一般使用示波器分析数据,示波器记录的是电压信号。电压信号可以由插入在电源和密码装置之间的功率测量电路或者由经由装置的电磁场测量功率消耗的EM探针产生。
\quad 最常见的方法是第一种。通常,将小电阻(典型电阻值为 1 Ω 1Ω 1Ω至 50 Ω 50Ω 50Ω)插入到设备的 G N D GND GND或者 V D D V_{DD} VDD线上。于是通过电阻的电压降可以被测量出来,这个电压与流入密码设备的电流是成正比的。假定KaTeX parse error: Expected '}', got 'EOF' at end of input: V_{DD电压恒定,电阻的电压降就与设备的功耗成正比。这是最简单的能量测量方法。
\quad 本实例使用的trace来自网站(http://dpabook.iaik.tugraz.at/).
对AES的S盒输出进行分析
首先收集能量迹,收集关于200个随机明文关于 L o a d i n g o f t h e p l a i n t e x t 、 A d d R o u n d K e y 、 S u b B y t e Loading\ of\ the\ plaintext、AddRoundKey、SubByte Loading of the plaintext、AddRoundKey、SubByte操作的能耗曲线,存放在 200 × 5000 200\times 5000 200×5000 的矩阵 t r a c e trace trace中。
我们关注S盒的结果,具体地,对于所有 k e y key key的所有可能(256种),生成 S b o x ( A d d R o u n d K e y ( P l a i n t e x t , k e y ) ) Sbox(AddRoundKey(Plaintext,key)) Sbox(AddRoundKey(Plaintext,key)),并将结果存放到矩阵 200 × 256 200\times 256 200×256矩阵 p o w e r c o n s u m p t i o n power_consumption powerconsumption中。
使用LSB攻击
\quad 在LSB攻击中,我们关注 L S B ( S b o x ( A d d R o u n d K e y ( P l a i n t e x t , k e y ) ) ) LSB(Sbox(AddRoundKey(Plaintext,key))) LSB(Sbox(AddRoundKey(Plaintext,key))),在某个 k e y ′ key^{\prime} key′与 L S B = 1 o r 0 LSB=1\ or\ 0 LSB=1 or 0,将明文分成两组 b i n k e y , 1 , b i n k e y , b i n 0 bin_{key,1},bin_{key,bin0} binkey,1,binkey,bin0,然后将两组明文的功耗分别取和然后做差,比较两者的能耗差值,若差值出现尖峰,则说明该 k e y ′ key^{\prime} key′可能为正确密钥。原因如下:
\quad 芯片在加密过程中,某些操作必须依赖 L S B ( S b o x ( A d d R o u n d K e y ( P l a i n t e x t , k e y ) ) ) LSB(Sbox(AddRoundKey(Plaintext,key))) LSB(Sbox(AddRoundKey(Plaintext,key))),若 k e y ′ key^{\prime} key′是正确的密钥,那么芯片的功耗肯定会由于 L S B LSB LSB的不同而有所差别,相反若 k e y ′ key^{\prime} key′是错误的密钥,那么根据错误的密钥计算出来 S b o x ( A d d R o u n d K e y ( P l a i n t e x t , k e y ) ) Sbox(AddRoundKey(Plaintext,key)) Sbox(AddRoundKey(Plaintext,key))也是不正确的,那么计算出来的 L S B LSB LSB也是不正确的,即与正确密钥无关,可以认为通过错误密钥计算出来的 L S B LSB LSB是随机分布的,所以如果能耗的差值图中出现尖峰时,说明当前地密钥很有可能是正确密钥。下图是猜测的第44个密钥的能耗差异图。我们猜测第44个密钥大概率是正确的,而事实正是如此。
使用Hamming weight模型攻击
不同于前面的攻击方法,Hamming weight模型是针对 S b o x ( A d d R o u n d K e y ( P l a i n t e x t , k e y ) ) Sbox(AddRoundKey(Plaintext,key)) Sbox(AddRoundKey(Plaintext,key))的汉明重量,算出中间结果进而得到汉明重量,然后计算出汉明重量与功耗矩阵 t r a c e trace trace的相关度。如果相关度很高,大概率是正确密钥。下图是猜测的第44个密钥的相关度曲线。我们猜测第44个密钥大概率是正确的,而事实正是如此。
遇到的问题
- 为什么选择S盒输出作为分析对象? 其它中间结果结果不可以吗?例如异或密钥的结果?
- 为什么选择LSB而不是其他比特分析呢?
- 什么技术可以避免DPA攻击?
在接下来的文章中会着力解决这些问题。