5AES算法掩码方案
下面将讨论如何对AES轮变换的4个操作进行掩码,然后从整体上描述掩码方案,最后给出掩码方案的性能指标。
5.1轮操作掩码
5.1.1轮密钥异或AddRoundKey
因为该方案使用m对子密钥的字节k进行掩码,所以执行AddRoundKey会自动对状态字节d进行掩码,即d⊕(k⊕m)=(d⊕k)⊕m。为了抵御SPA对密钥编排方案的攻击,对子密钥进行掩码也很重要。
5.1.2字节替换SubBytes
AES中唯一的非线性操作是SubBytes。在微控制器上软件实现中,往往是通过查表实现SubBytes。因此需要用一个掩码型S盒来实现这个操作。
5.1.3行移位变换ShiftRows
ShiftRows操作将状态中的各字节移到不同的位置。在此方案中,算法状态的所有字节均使用同一个掩码。所以,这个操作对掩码方案没有影响。
5.1.4列混合变换MixColumns
MixColumns操作非常重要,因为它对同一列中不同行的字节进行混合。所以,MixColumns操作需要至少两个掩码。如果同一列中只用两个掩码,为了确保所有的中间值都被掩码,需要小心处理MixColumns操作,这可能会导致效率很低。所以,最好在此处算法状态的每一行都采用一个单独的掩码。
这在整个AES掩码方案中,共使用了6个相互独立的掩码。前两个掩码m和m'分别为掩码SubBytes操作输入和输出的掩码。剩下的4个掩码m1、m2、m3和m4则为MixColumns操作的输入掩码。每一次AES加密开始时,需要进行两个预计算。首先,计算一个满足d(km)=(dk)m的掩码型S盒S;而后,将(m1、m2、m3和m4)应用于MixColumns操作,计算MixColumns操作输出的掩码。用(m'1、m'2、m'3、m'4)表示MixColumns操作输出结果的掩码。
5.2掩码流程
AES算法掩码一轮的流程如下:
1)每一轮开始时,用m1'、m2'、m3'和m4'对明文进行掩码。
2)执行AddRoundKey操作,其中子密钥是掩码的,并且会使得状态掩码从m1'、m2'、m3'和m4'变为m。
3)在SubBytes操作中执行与S盒对应的查找表Sm,这样掩码改变为m'。
4)在MixColumns操作之前,第一、二、三、四行的掩码从m'变为m1、m2、m3和m4。MixColumns操作把掩码从mi变为mi',其中,i=1,…,4。
5)通过以上方式对任意轮操作进行掩码,当最后一轮加密结束时,通过最后的AddRoundKey操作消除掩码。
5.3掩码性能分析
掩码处理在计算时间上的开销是很高的。提高的开销并非来自每一轮增加的操作,而是来自对掩码型S盒查找表的预计算。上节设计的AES掩码方案在8位微处理器上实现总共需要8240个时钟周期,同样的平台上的原始AES实现则需要4427个时钟周期。也就是说,掩码AES实现大约需要两倍的耗时。在8240个时钟周期中,大约2800个时钟周期,既有1/3的运行时间用来预算,包括:掩码型S盒、掩码型MixColumns输出以及掩码的预置。由于掩码处理不需要对AES算法的实现流程做太多修改,所以AES的每一轮操作(包括每轮密钥编排)由掩码所导致的额外运算仅需要78个时钟周期。
由于对AES算法的功耗分析攻击,多是从第一轮发起,因此认为只对前几轮进行掩码,而去掉中间几轮的掩码,可以很大的改善掩码AES算法实现的性能,但实验表明:这种观点是错误的。在上节的实现方案中,去掉AES中间六轮的掩码仅仅减少了大约468个时钟周期,性能只提高了5.6%。
6结束语
本文提出了基于安全芯片的抗功耗攻击的AES掩码算法实现技术。将AES算法中不同的变换转换为原子操作的序列,并使用不同的随机量对所有的中间值结果进行掩码。为达到运算性能与硬件复杂度之间较好的折衷,给出此掩码的性能分析。实验结果表明,本文提出的AES算法掩码方案实现技术可以一定的运算性能开销获得了高安全性,抵御功耗攻击。 |
核心期刊网(www.hexinqk.com)秉承“诚以为基,信以为本”的宗旨,为广大学者老师提供投稿辅导、写作指导、核心期刊推荐等服务。 核心期刊网专业期刊发表机构,为学术研究工作者解决北大核心、CSSCI核心、统计源核心、EI核心等投稿辅导咨询与写作指导的问题。 投稿辅导咨询电话:18915033935 投稿辅导客服QQ: 投稿辅导投稿邮箱:1003158336@qq.com |