声明:作者梳理论文仅为学习,如有侵权请联系作者删除博文,谢谢!
PRINTcipher的一种高效相关性功耗分析
Authors:Kan Yuan ; Dawu Gu ; Zheng Guo ; Sigang Bao
转载请注明出处,理论证明部分与原论文有一点不同,希望相互交流学习~
背景
侧信道
- 美国密码学家Paul Kocher 等人于上世纪九十年代末期提出侧信道攻击的概念,其作为一种针对密码设备的密码分析技术,目前对部分密码设备、密码算法都产生了严重的安全威胁。
- 侧信道攻击并不受限于算法的复杂数学结构,而是利用密码设备的能够反映其内部运行的相关信息,即通过信息泄露的物理特征与算法的中间值的相互依赖关系来恢复密钥。
- 功耗分析攻击是最强有力的手段之一,其具有原理简单易行,实验限制条件较少等优点,主流的功耗分析方法主要有简单功耗分析(SPA)、差分功耗分析(DPA)、相关功耗分析(CPA)、模板攻击(TA)以及高阶差分功耗分析(HoDPA)等。
PRINTcipher
- PRINTcipher是Knudsen [ 2 ] ^{[2]} [2]等人在2010年的CHES会议上提出的一种轻量级分组密码算法。为廉价的计算设备提供了轻量级的安全问题解决方案。相比PRESENT算法,其在电路面积上的要求更低。
PRINTcipher
- 算法引入了与密钥相关的非线性层设计;
- 算法取消了密钥生成的过程,并在每一轮中使用了相同的轮密钥。
基本介绍
- PRINTcipher算法采用了SPN结构,有两个变体(PRINTcipher-48, PRINTcipher-96)。
分组长度(bit) | 密钥长度(bit) | 迭代轮数(轮) | |
---|---|---|---|
PRINTcipher-48 | 48 | 80 | 48 |
PRINTcipher-96 | 96 | 160 | 96 |
- 在加密过程中,PRINTcipher算法首先读取明文数据,作为初始状态。
- 在轮函数的计算过程中,算法将密钥k分成两部分,k=sk1∥sk2。在轮函数中,sk1用于密钥加层的密钥加操作,sk2用于非线性层的选择信号。
设计
- 密钥加层:xor sk1,轮密钥为原始密钥的一部分。
- 线性扩散层:
P ( i ) = { 3 × i m o d n − 1 f o r 0 ≤ i ≤ n − 2 n − 1 f o r i = n − 1 P(i)= \begin{cases} 3×i&mod&n−1&for&0≤i≤n−2\\ n−1&for&i=n−1 \end{cases} P(i)={ 3×in−1modforn−1i=n−1for0≤i≤n−2 - 轮常数加层: xor RCi ,m=⌈log2n⌉。
- 选择置换层:将密码状态分成16/32个3比特长的块(𝑐(𝑖+2) ||𝑐(𝑖+1) ||𝑐(𝑖+0))。轮函数将sk2拆分成16/32个2比特的选择信号(𝑘(𝑖+1) ||𝑘(𝑖+0)) 。
- 非线性层:由16/32个3比特进3比特出的S盒构成。
x | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
---|---|---|---|---|---|---|---|---|
S[x] | 0 | 1 | 3 | 6 | 7 | 4 | 5 | 2 |
- 合并选择置换层和非线性层,等效S盒:5比特输入(𝑘(𝑖+1)∥𝑘(𝑖+0)∥𝑐(i+2)∥𝑐(𝑖+1)∥𝑐(𝑖+0)),3比特输出。
攻击方法
- PRINTcipher以串行实现方式、以轮为基础的实现方法。由于并行操作有利于对抗功耗分析,本文以PRINTcipher-48为例,仅考虑以轮为基础的实现方式。
- 中间值选取算法第一轮轮函数的输出或者最后一轮轮函数的输入,功耗模型采用汉明距离模型。
DPA
- 选取算法中的某个中间值,𝑓(𝑑, 𝑘);
- 测量能量消耗,数据向量𝒅=(𝑑1, …, 𝑑𝐷)′,能量迹𝑻=(𝑡1, …, 𝑡𝐷),均包含T个采样点;
- 计算假设中间值,𝒌=(𝑘1, …, 𝑘𝐾)′。给定𝒅和密钥假设𝒌,计算假设中间值矩阵V;
- 将中间值映射为功耗值,通过功耗模型将V转换为假设功耗值矩阵H;
- 比较假设功耗和实际采集得到的功耗值,对H的每一列和T的每一列进行比较,通过统计方法计算出结果矩阵R,寻找R中的最大值,确定正确密钥及泄露位置。
CPA
Pearson相关系数:用来表达两个变量之间线性相关程度的一个统计量。
ρ X , Y = c o v ( X , Y ) σ X σ Y = E [ ( X − μ X ) ( Y − μ Y ) ] σ X σ Y \rho_{X,Y}=\frac{cov(X,Y)}{\sigma_X \sigma_Y}=\frac{E[(X-\mu_X)(Y-\mu_Y)]}{\sigma_X \sigma_Y} ρX,Y=σXσYcov(X,Y)=σXσYE[(X−μX)(Y−μY)]
- 以等效S盒为单位,每次求出部分密钥。每个等效S盒只和5比特密钥( s u b k e y ( i ) subkey^{(i)} subkey(i))相关,猜测子密钥为0~31;
- 建立汉明距离模型,计算假设功耗值; h j , k ( i ) = H W ( v ( j , k ) ( i ) ⊕ d ( j , 3 i + 0 ) ∥ d ( j , 3 i + 0 ) ∥ d ( j , 3 i + 0 ) ) h_{j,k}^{(i)}=HW(v_{(j,k)}^{(i)}\oplus{d_{(j,3i+0)}}\parallel{d_{(j,3i+0)}}\parallel{d_{(j,3i+0)}}) hj,k(i)=HW(v(j,k)(i)⊕