最近参加了一个侧信道攻防相关的培训,写一个系列来总结记录一下。知识比较碎片化,在整理的时候力求能系统一点,但是重点还是放在自己的一些理解与体会上。
1. 理论理解
1.1 侧信道
所有的敏感密码算法最终都是跑在实际的物理机器上的。既然是运行在实际的物理机器上,那就会不可避免和物理世界产生一些交互。侧信道攻击指的就是通过这些物理泄露来获取密钥信息。相比于密码学(偏数学分析)分析攻击,这种攻击方法的效率大大提高。在近年来已经取得了很多成果。比如系里的XX老师就常年把曾经攻破XX城市的智能交通卡挂在嘴边。侧信道信息的泄露面基本有下图几种,但不是每种信息都会对应到一个特定的攻击方法。比如,我们采集到的功耗信息、或者电磁辐射信息其实都是内部电路运行状态的直接反映,采集到的波形,可以用同一种方法来进行分析。(比如简单能量分析、相关能量分析等等)这些将在后边的例子中有一些体现。
1.2 简单能量分析攻击SPA
区别与差分能量分析攻击(后边会讲),没有或者不利用不同密钥输入得到的信息来去比对、确认之类的操作。说白一点,就是把能量轨迹显示出来,用眼睛“看”。如下图,DES算法的软件实现中,做能量轨迹分析,可以清楚的看到16轮的加密的过程。
这种攻击一般会有以下几个假设:
- 攻击者可以驱动被攻击设备至少一次加密(或者解密,密钥要可以参与运算)。
- 采集设备加密过程中的能量波形
- 找到感兴趣的某个操作在波形上的准确位置。
- 密钥信息能够体现在这个操作的不同波形上,即不同操作的波形对比要明显一些。
优点:不需要太多的能量轨迹
缺点:1. 需要泄露比较明显,适合那种简单的软件平台的实现(MCU、CPU)。毕竟现在很多密码算法在实现过程中都考虑了硬件固化,侧信道防护。但凡安全级别高一点的,就很难满足这个条件。2. 对噪声比较敏感。
2. 攻击实验
2.1 目标算法:DES中的置换操作
DES中有一个步骤是将56bits的密钥做PC-1置换。如下图,假如输入为A,根据算法定义(规定),将A中的bit填到B中的固定位置。
上述置换,一个程序员的典型软件实现思路应该是这样的:
- 把 B 清 0
- 把A中的比特编号进行56次循环:
- 如果A[i]=0,则什么都不做。跳转(因为B已经初始化,节省一个数据移动操作)
- 如果A[i]=1,则查表得知这个1在B中的去向,并写入B相应的位置。(不跳,执行下一条的写操作)
上述伪代码的软件实现可以清楚观测出芯片内部正在运行什么操作。进而直接恢复原始密钥A的值。上述代码如果拿汇编写的话,可以对应如下:
2.2 目标待攻击平台
算法运行平台:AT89S52
12M晶振,即时钟12M,但是因为平台特点,一个指令周期需要12个cycles,所以一个指令周期的时间大约为1位秒。
实际的攻击场景,是可以满足这个对待攻击平台具体硬件参数了解的条件的。
2.3 攻击步骤
建模板观察
根据上述的攻击假设,我们是有机会拿到空白的硬件设备,并且写入明文和密钥的。这一步写入特定的密钥,观察芯片在执行上述置换操作时,跳转与不跳转写入的能量波形区别。如下图,设置示波器的一些显示参数,(示波器可以设置采集窗口,这一窗口可以通过另一个通道加入,激励来源可以是攻击者操作过的加密平台),通过示波器采集到的能量波形如下图所示:其中红色为实时采集波形,蓝色为示波器的trigger波形,可以理解为采样窗口。黑色线条为经过示波器数字滤波求平均后的波形。
观察上图中经过均值滤波后的黑色曲线,可得出如下图中的规律。
既然我们可以认为写入密钥,那就可以先把前两个bit写个01试试,结合上图得出的规律,我们只需要把0和1对应上就可以,如下图:
假如,前两个bit 01是用来建立模板,观察相应操作对应波形的,那么就可以确认:四小对应跳转,两小一中对应不跳转,一大一小对应写入。
密钥破解
通过上述分析就可以得出后续波形分别对应的是什么操作,进而能恢复出每个bit的信息来。当获得真实的加密设备后,能量波形对应微操作,微操作对应密钥,攻击的目的也就达到了。
其他
能量波形的采集方法除了上述的是直接在芯片的电源输入端串接电阻外,还可以用线圈来采集电磁泄露信息,进而得到能量波形。如下图:
显然,通过电磁信息泄露采集能量波形,对客观环境要求比较严格。这个比较简单,也能直接恢复出来。但是考虑复杂情况的话,不仅容易收到周围电磁场的干扰,而且还需要做电磁泄漏的空间定位(线圈放在哪里)等等。
3 简单能量分析攻击的其他示例
3.1 RSA算法的简单能量分析
RSA算法中,密钥参与的有一个运算是幂方运算,密钥就是幂方,底数可以看作消息。幂方运算采用的快速算法是下图右半部分的算法。即幂方的比特形式,一位一位的去算。
因为这个密钥bit 0和1的差异,为了高效实现,当为0时,是可以少一个乘运算的。而且硬件电路中专门有平方运算的优化,所以平方和乘运算,所对应的微操作,可以认为是不同的。这样我们就可以通过能量波形来判断微操作的类型,进而判断密钥是什么。
类似的案例还有很多。
思考
不可避免
洛卡尔物质交换定律: 犯罪行为人只要实施犯罪行为,必然会在犯罪现场直接或间接地作用于被侵害客体及其周围环境,会自觉或不自觉地遗留下痕迹。
侧信道信息就是这样,密码算法在实现过程中、芯片运行过程中,总是要和物理世界产生信息交互的。而防止侧信道攻击的思想,就是尽可能地减弱这些侧信道信息和密码算法关键数据的相关性。
简单能量分析防护
讲回本篇提到的这个简单能量分析,因为程序中分支执行的不一致,带来微操作的差别,给了直接分析可乘之机,而且密钥的恢复效率比密码学分析方法高的太多了。上述微操作和能量波形的匹配,也是可以交给工具去做的。首先对原始波形滤波,然后挑选有意义的波形,做波切割(对应微操作),这一过程人眼参与的比较多。然后设定标准段,与其他切割段作对比,恢复密钥。
要防护这类攻击,也比较简单,首先,并行执行就给攻击带来了很多难度;其次,可以讲不同分支对齐,甚至减少关键部分运算的分支。