1、ARIA 密钥扩展简单功耗分析攻击【摘要】介绍针对 ARIA 密码算法密钥扩展时产生的中间值泄漏的功耗信息,进行简单功耗分析攻击,通过分析中间值泄漏汉明重信息,能有效的减少密钥空间,利用已知的明文和密文来确定密钥的唯一性。 【关键词】密钥扩展,功耗分析 通常,攻击者关注的是密码算法在加/解密过程中功耗泄漏的信息,通过 DPA、 CPA 等方法进行分析来破解密钥,一旦在这个过程中加入一些防护手段(如掩码策略) ,这会给功耗分析攻击带来很大的困难,甚至会失效。然而掩码防护手段对密码算法进行密钥扩展时无法起到保护作用,因此,可以对密钥扩展算法中的密钥中间值泄露的功耗信息进行功耗分析,从而得到密钥值。
2、 一、简单功耗分析方法 针对密钥扩展的简单功耗分析攻击,需要攻击者知道或分析出功耗轨迹中执行操作数的功耗特征,即操作数的功耗特征和汉明重有直接的成比例的对应关系。 这里做一个简单的实验例子来说明: 密码设备中的每一算法都有一定的执行顺序,算法的定义及其操作被编译成设备所支持的指令,这些指令包括算术指令(如加法) 、逻辑指令(如异或) 、数据传送指令(如移动)和转移指令(如跳转) ,其在物理设备上的功能和方式实现都各不相同,因此它们具有不同的能量消耗特征,这将在功耗迹中产生具有不同特征的模式,同种指令执行不同的操作数时,也有不同的能量消耗特征:如在 AT59C52 单片机中执行往累加器 A 中赋
3、值的语句: MOV A, X。其中源操作数 X 的汉明重量为 0到 8 共 9 种不同的值(#00H,#01H,#03H,#07H,#0FH,#1FH,#3FH,#7FH,#FFH) ,同时采集赋值语句执行时的功耗轨迹,上述指令各执行 100 遍并对各种情况下的 100 条功耗轨迹求平均值得到 9 种不同汉明重量下赋值语句对应的功耗迹 从图中可以看到,9 条功耗轨迹基本形状类似,在于操作数相关的位置,轨迹的幅值和操作数的汉明重量呈现反比例的情形。假设简单的创建 9 个模板,每一个模板对应于一个汉明重量的数,如果一个未知的值也执行同样的操作得到一条功耗轨迹,必然会和其中的一条汉明重量的模板相匹配
4、,称为发生了值的碰撞。如果,在功耗轨迹中某个 8-bit中间值的汉明重为 3,那么这个中间值的可能值空间将从 28=256 下降到=56 个,可以得知这个未知的值的汉明重量,从而大大减少未知值的搜索空间。 二、仿真实验结果和分析 2.1 攻击过程分析 在算法运行中,中间值所泄露的的汉明重信息对于攻击者来说是非常有用的。假设攻击者能知道所有轮密钥字节的汉明重信息,即 ARIA 密钥扩展时产生的中间值(包含有四个初始化值和 12 个轮密钥值)的字节汉明重16*16=256,对于每个汉明重的值都有 9 个可能值,因此理论上存在着 9256=2811.5 个不同组合值,这个数量值远远大于密码算法中 2
5、128 不同的密钥组合值;显而易见的是,不是所有观测到的汉明重值都会出现在实际操作中,这也是攻击中的一个难点在密钥扩展过程中,需要观测多少个汉明重组合值才能有效的把真实的密钥值推测出来,是不是存在很多个密钥值导致有相同 256 个汉明重值。 事实上,由于密钥扩展算法初始化过程中的置换和混淆操作,使得出现这种有相同汉明重的密钥值数量很少。这个重要的特性表明:虽然密钥字节的汉明重信息给攻击者提供了很多有用的信息,但不是每一个汉明重信息都需要,这使得通过汉明重信息,能否唯一地将密钥值识别出来也显得不是那么重要了。如果能够将密钥的可能值数量减少到一定范围内,在一个合理的时间内,利用已知的明文、密文,通
6、过模式匹配的方法推导出真实密钥也是可行的。 在攻击前就要选择好所需被观测的汉明重数量的自由度和计算有效性所需的汉明重数量,对于 ARIA 密钥扩展中,笔者将初始值 W0,切分成 8 个不同的部分,一定程度上这 8个部分是相互独立的,如图中 这样分割的动机在于:3 个字节值为一组,其他的中间字节就能够被计算出来,依据其相互依赖性会使得观测的汉明重数量在计算时间和效率上较均衡。以 part0 为例,如下图所示,记号为.的字节值是依赖于 Part0 的字节将要被计算比较用的,图中标记为 o 字节值是用来遍历所有可能值,舍弃不满足要求的值,以便减少密钥空间。 现在,遍历 Part03 个字节的所有可能
7、值, 根据前面所讲,意味着大约有 50.273(217)次计算。 对于每一个遍历可能值, 攻击者都会计算和其有依赖关系中间值字节的汉明重,且唯一对应于目前攻击的 Part0 值,攻击者将证实是否计算出的中间值字节汉明重满足真实密钥值产生的汉明重的值;如果大部分汉明重值能满足,将这个猜测值保留下来,依次将其他的 7 个 Part 部分猜测出来。由于 S 盒的特性,只有少数的可能值被保留下,根据我们实验结果得出,每一个 Part 被保留的可能值是 24 个,即一个 16 个字节的密钥值有 48(=216)个,使得密钥空间从 2128 降到了 216 个,将这 216 个猜测密钥组合值,和已知明文进
8、行加密,得到的密文和真实密文进行对比,一致值即是密钥值。 2.2 实验结果和分析 仿真实验所用的配置情况: 硬件:普通 PC 机,CPU 为 AMD Athlon 32 3000+ 1.81 GHz,内存为 512M。 软件:Windows XP+SP2 操作系统,VC+6.0。 编程仿真实现了 ARIA 密钥扩展算法的简单功耗分析攻击。见图 5-4,实验中先按步骤一产生 5 组输入随机明文和 128 位的密钥用于算法进行加密;步骤二对密钥扩展算法中所需的采集点进行了汉明重值的采集;步骤三对按照上节描述的 Part 中的密钥值进 行遍历比较,将满足要求的可能值保存并显示出来。 步骤四中将所有的
9、 Part 组合值连接成 128 位的猜测密钥,和一个已知的明文进行加密操作得到一个相应的密文,猜测密钥所得的密文和已知的密文进行匹配分析,进而得到正确的密钥值,如图所示。 通过仿真实验得知,一次成功的简单功耗分析攻击需要两个因素,第一个因素是在功耗轨迹上能够采集和识别出到中间值泄露的汉明重信息,这主要由密码设备本身和操作数功耗泄露的特性决定的;第二个因素是分析过程中实际需要的中间值泄露的汉明重信息数量,这个数量需要和分割的 Part 中的字节要有依赖关系,如果存在的依赖关系的数太多,真实的密钥值有可能被遗漏掉,这次攻击会失败;太少,则每个Part 中的保留值多,组合值也相应的增多,后期匹配的实验的时间会很长。