针对密码芯片的模板攻击属于侧信道攻击的一种,它要求攻击者能够获得一个与目标芯片相同且可控的芯片,称为测试芯片,继而通过采集测试芯片工作中的功耗信息,分析其数据相关性与操作相关性,实现对密码芯片的攻击。
模板攻击的一般步骤
模板攻击通常由两个阶段构成:第一个阶段对侧信道信息数据进行刻画(又称为模板构建);第二个阶段利用第一步所得特征实施攻击(又称为模板匹配)。
模板构建
在对密码芯片攻击前,需要在测试芯片上,为每个猜测密钥构建一个模板。这里的模板即是由一个均值向量 M M M 和协方差矩阵 C O V COV COV构成。假设所攻击的密码芯片所使用的密钥长度为 n n n bits,因此该算法所有可能的密钥个数为 2 n 2^n 2n个,所需要构建的模板总数也为 2 n 2^n 2n个。具体构建方法如下:
a) 求取均值矩阵 M M M
首先针对每一个猜测密钥,采集测试芯片使用该密钥进行运算时的侧信道信息。为确保所构建模板的精确性,需要进行多次测量。即测量次数为 m m m ,采样点个数为 l l l,即得到的侧信道信息对应的曲线有 m m m 条,每条曲线包含 l l l 个点,这样就得到了一个 m × l m \times l m×l的矩阵。其中,第 i i i 条曲线可表示为 [ t i 1 , t i 2 , ⋯ t i l ] , i ∈ { 1 , 2 , ⋯ m } [t_{i1}, t_{i2}, \cdots t_{il}], i\in \{1,2,\cdots m\} [ti1,ti2,⋯til],i∈{
1,2,⋯m}。然后,对所有 m m m 次测量结果求取平均值,将第 j j j 个采样点的平均值记录为 M j M_j Mj,计算公式如下:
M j = ∑ i = 1 m t i j / m M_j = \sum_{i=1}^mt_{ij}/m Mj=i=1∑mtij/m
计算所有采样点的均值,组成均值向量 M M M, 如下式:
M = [ M 1 , M 2 , ⋯ , M l ] = [ ∑ i = 1 m t i 1 / m , ∑ i = 1 m t i 2 / m , ⋯ , ∑ i = 1 m t i l / m ] M = [M_1, M_2, \cdots, M_l] = [\sum_{i=1}^mt_{i1}/m, \sum_{i=1}^mt_{i2}/m, \cdots, \sum_{i=1}^mt_{il}/m] M=[M1,M2,⋯,Ml]=[i=1∑mti1/m,i=1∑mti2/m,⋯,i=1∑mtil/m]
b) 求取噪声矩阵 N N N
在求取均值矩阵的过程中,每次测量的噪声都得到了抑制。由于所采集的泄露信息都是密码芯片处理相同数据产生。因此,泄露信息中的随机噪声可以通过使用每一次采集的曲线与均值矩阵做差的方法获得。
N = [ t 11 − M 1 t 12 − M 2 ⋯ t 1 l − M l t 21 − M 1 t 22 − M 2 ⋯ t 2 l − M l