密码算法的软硬件实现对其安全性提出了新的挑战,算法在理论上的安全性并不能代表其在具体实现和应用上的真正安全,算法的设计除了要抵抗常规的数学分析,还需要能够抵抗算法运行时针对泄漏出的电磁、能耗、时间等信息的侧信道分析。对密码设备抗侧信道敌手攻击能力的评估,成为一个越来越重要的问题,泄漏检测技术,也因此成为当前一个新的研究热点。
泄漏检测及其关键技术
区分器初探
侧信道分析和泄漏评估方法都是区分器(Distinguisher)的应用,大家可能对这个概念很陌生。其实,这里的“区分器”就是我们常说的分类器(Classifier)。举一个简单的例子,让一个人蒙着眼睛对一堆不同面值的硬币(含1元、5毛和1毛)进行分类,他能够根据硬币的不同重量,准确地将硬币分成三堆。也就是说,硬币的重量泄漏了硬币的面值信息,可以利用(硬币,重量)构建一个区分器,将硬币成功分类。如果仍然让这个蒙着眼睛的人去分一堆黑子和白子重量相同的五子棋棋子。那么,他分类得到的两堆子中,黑子和白子仍然约占一半。即(棋子,重量)不能作为一个分类器。但是,摘下眼罩,他能够通过不同的颜色对棋子进行分类。也就是说,(棋子,颜色)可以构建一个区分器。
图1 一堆不同面值的硬币和一堆五子棋棋子
泄漏检测原理
为了提高设备的效率,运算中间值(Intermediate Value)通常会暂存于寄存器(Register)中。寄存器存储数值的变化将引发功耗(Power Consumption)的变化。如,一个8位的寄存器,就像一个房间里的八个灯。由4盏灯切换到另外4盏,总线上的电流值基本不变。但若由4盏切换到8盏,那么我们能够显著地检测到电流变化。因为电流的大小与开灯的数量有明显的线性相关关系,根据电流的变化情况,我们就可以判断房间里面开了多少盏灯。
图2 亮不同数量的灯时,总线上的电流区别
跟灯与电流变化例子的道理类似,泄漏检测(Leakage Detection)算法如相关性检验(ρ-test),t检验,互信息检验等,利用不同的中间值与其产生不同的功耗泄漏的密切关系来进行检验。假设泄漏检测者采集到了加密过程中的功耗泄漏,现在他要确定泄漏是否与密钥运算的中间值相关。以相关性泄漏检验为例,只需根据正确的密钥对每一个样本点进行划分。若正确的密钥下,信号呈现较好的分类,使得每一类的功耗值与中间值的功耗模型(如汉明重量模型)呈较高的相关性,即可认为存在泄漏。
以AES-128在AT89S52微控制器系统上软件实现的相关性泄漏检验为例,当采集了1300个明文加密的泄露信息时,第一个密钥字节(值为213)对应的第一个S盒输出的功耗,每条信号包含5000个样本点(Samples)。正确密钥下,第2141个样本点的功耗与中间值具有较高的相关性。因而得到检测结果:该点泄漏了第一个S盒输出的与密钥相关的中间值(如下图左图所示)。但第700个样本点的相关性泄漏检验结果如下图右图所示,可以认为该点不存在密钥相关泄漏。
图3 样本点2141(左)、700(右)的相关性泄漏检测结果
当然,上面两图仅仅反映了两个样本点是否存在泄漏。对于泄漏检测而言,评估者需要对所有的样本点进行检验,才能得到最终结论。下图所示,对S盒输出中间值的相关性泄漏检测表明,在AT89S52上实现的AES-128加密算法的第一个S盒多次泄漏了密钥相关信息。可以通过修改算法,消除信号与敏感信息的相关性,从而消除泄漏,保证算法的安全实现。
图4 所有5000个样本点的相关性泄漏检测结果
泄漏检测平台
常用侧信道分析平台,如Riscure公司的Inspector分析测试平台,也可以用作泄漏检测。该平台主要包括泄漏采集(示波器)和泄漏分析设备(台式机)等。泄漏检测过程一般为,攻击者利用示波器等信号采集设备采集泄漏信息并进行预处理,利用泄漏检测算法进行检验,评估设备泄漏情况和安全性。
图5 Riscure公司的Inspector分析测试平台
设备的安全性度量
就目前而言,并没有哪一种检测方法能够以100%的概率得到设备是否存在泄漏的结论。故而,检测者需要根据密码算法的实现,多尝试几种泄漏检测方法,提高检测结果的可信度(Confidence)。
评估者会想,需要采集多少条信号来检测泄漏呢?现在用条信号都没有检测到泄漏,那么是否没有泄漏呢?不尽然,也许当我们使用条信号进行检测时,就检测到泄漏了。因此,评估者通常将安全性划分成若干等级。如,条信号没有检测到泄漏,将安全等级划分6级;条信号没有检测到泄漏,将安全等级划分5级;以此类推。
研究现状和未来发展趋势
随着侧信道分析的发展,攻击者能够更加精确地刻画设备的泄漏信息、提出更加精准的功耗模型、提出更加高效的区分器,使得其能够在更少的能量迹、更小的代价下成功恢复密钥。而最好的防御侧信道攻击的方法,就是设备不存在敏感信息相关的泄漏。泄漏检测的目的,就是检测密码芯片在密码运算过程中,是否泄漏与密钥相关的关键信息,以便于更好地防止泄漏。
泄漏检测与评估框架完善
相对于侧信道分析和防御的研究,侧信道泄漏检测的研究比较滞后。最早可追溯到2009年,Standaert等人侧信道评估(Side Channel Assessment)框架的首次提出。2011年,NIST组织招开研讨会,希望能够建立被公认的方法来评估设备的安全性,并首次通过实验来检测泄漏。这些方法通过观测对设备执行一系列攻击实验时的是否成功,以及在成功的情况下所消耗的代价(如时间复杂度、空间复杂度和采样复杂度等)来评估设备的安全性。相关的工作为侧信道泄漏检测与评估提供了参考。但是,侧信道泄漏检测与评估体系十分不完善,大量的工作有待研究。
泄漏检测算法的优化
2013年,Luke等人提出了新的泄漏评估方法,他们在一系列实际相关的侧信道分析场景中,比较了t检验、连续互信息和离散互信息这三种检验的效果,并考虑样本容量、泄漏函数、噪声和其他假设检验标准对检测性能的影响。但是,他们的方案具有较高的复杂度。在单核CPU上,需要近1一个月的时间。在使用两个AMD Radeon 7970型号的GPU,吞吐量达到每秒3000亿次浮点运算的情况下,仍需要约14个小时来完成校验。可见,使用该方法来评估设备的安全性,仍然十分的困难。类似的研究是近几年的主流,更多的检测算法和优化算法被陆续提出。
高阶掩码泄漏检测
Durvaux等人利用基于相关性的漏检实验来检测不同信噪比和汉明重量下的信息泄漏情况,并使用该方法改进了其在COSASE 2015 上提出的高阶掩码(Higher-Order Masking)算法特征点的快速检测工具,为泄漏检测开辟了一个新的研究方向。
高阶掩码将中间值分成多片,至少要寻找到一组分片的样本点才能恢复该中间值。串行实现的高阶掩码的泄漏检测,其困难性在于随着掩码阶数的增加,分片的位置越难找。比如10个点里有5个点分别对应5个分片的泄漏,穷举很快就可以找到这5个点。但是100万个点里面寻找5个点将变得十分困难。此外,随着分片的增加,组合分片得到的信号的噪声迅速增大,这使得即使设备存在泄漏仍然难以被检测出来。而且,检测需要大量的信号,也极大增加了检测难度。
掩码方案泄漏预检验
Oscar于FSE 2016上提出了一种带掩码方案的密码算法在设备实现上之前,验证其是否存在泄漏的方法。该方案的好处在于,省去泄漏采样和特征点检测环节。此外,直接利用中间值的组合进行泄漏检测,避免了噪声对检测的影响。这是目前较好的泄漏检测方法。但是,密码实现是否存在泄漏,还与设备密切相关,所以该方法还有待进一步改进。
总结
泄漏检测和评估对密码芯片安全有着至关重要的作用,是目前侧信道分析领域的研究热点之一,但是其理论体系目前尚不完善,大量研究工作有待进行!
【本文为51CTO专栏作者“中国保密协会科学技术分会”原创稿件,转载请联系原作者】