详解如何破解SoC FPGA的AES256
本帖最后由 lcytms 于 2017-7-26 14:34 编辑详解如何破解SoC FPGA的AES256
信息来源:来自微信
https://mp.weixin.qq.com/s?__biz=MzAxOTIxNTg0Mg==&mid=2650989418&idx=1&sn=537e8b594ef4d84d5ee2f7d4b8bc9939&chksm=803c27e7b74baef133ee4ba4b606119ce049494198da43e659040caf908b42e7950db87cdb39&mpshare=1&scene=1&srcid=0726NyTJGq79scV6cyEVQ2Kk&pass_ticket=nbhoFUvhsfG%2Bx20844v1m3XZ3uIDrpnZQ94q6rMj3XPZ9SzZlmWHYkFgId1YggeV#rd
导读:
实际上这次的破解来自Fox-IT,确实攻击了AES算法本身,利用了电磁辐射泄露的信息,可以实现无线攻击(隔墙有耳)。
这样的攻击形式称为旁路攻击(Side Channel Attack),在学术界和工业界已经研究了20多年,是一种较为系统完善的攻击方法。
此次攻破AES256的方法是利用电磁旁路信号来完成差分功耗分析(DPA),获取了密钥。
攻击的目标硬件为来自Microsemi的SmartFusion2,这是一个混合了ARM和FPGA的SoC。
攻击针对的是ARM部分,一个Cortex-M3的内核。
目标软件是来自OpenSSL 的AES 256实现。
虽然SoC是一个混合芯片,但是只是用了ARM部分,Cortex-M3是很经典的ARM core,软件上也是OpenSSL的标准实现,可以认为这样的攻击很具有代表性。
本帖最后由 lcytms 于 2017-7-26 14:33 编辑
AES 256被破解了?
事件回顾如下:前几日我们转发过的一条题为“AES 256加密被破 一套1500元设备5分钟内搞定”的新闻引起众多网友的关注。
新闻在国内各大媒体转载,热门评论里不乏各种被高赞但实际上并不正确的说法:有说是字典攻击无线信号,和破解AES是两回事的,也有所是根据无线电特性来攻击的,和AES没关系的。
还有想搞个大新闻的媒体直接说是路由器被破解,甚至还说成了5分钟破解任何WiFi密码的,唯恐天下不乱。
实际上这次的破解来自Fox-IT,确实攻击了AES算法本身,利用了电磁辐射泄露的信息,可以实现无线攻击(隔墙有耳)。
这样的攻击形式称为旁路攻击(Side Channel Attack),在学术界和工业界已经研究了20多年,是一种较为系统完善的攻击方法。
此次攻破AES256的方法是利用电磁旁路信号来完成差分功耗分析(DPA),获取了密钥。
从介绍本身来看,是一个很不错的工作,但不是AES首次被破解,AES 128早就可以用类似的方式破解,AES 256在DPA看来,和前者没有本质差异,在实验室中早已破解。
当然也做不到5分钟破解任何WiFi密码。
原因是SCA需要一定的物理条件,目前AES算法本身还是安全的,不必惊慌过度。
背景知识
以AES为例,AES是高级加密标准Advanced Encryption Standard的缩写,是美国联邦政府采用的一种分组加密标准,也是目前分组密码实际上的工业标准。
AES广泛使用在各个领域(当然包括WiFi的加密过程),实际上目前主流的处理器中广泛包含了AES的硬件加速器(低至售价几美元的STM32中有CRYP ,高至售价上千美元的Intel CPU中有AES-NI )。
对于这样一个成熟的密码学标准,密码算法本身设计的十分完善,传统的差分分析,线性分析等方法基本上不能在有限复杂度内完成,AES在理论上是安全的。
但是正如本文标题描述的那样,即便有绝对安全的算法,也做不到绝对安全的系统。
唯物辩证法中有联系的普遍性和多样性原理,现代密码系统在设计上理论安全,并不能替代密码系统的实现安全性。
攻击者可以在不干扰密码芯片运行的前提下,观测时间,功耗,电磁辐射等旁路泄露,然后结合算法的实现进行密钥还原,实现所谓的旁路攻击。
对于旁路攻击的防御,涉及到密码算法实现安全性这一范畴,很显然,这次攻击成功的AES 256,表明实现安全性的研究还有很长的路要走。
这里简要介绍一下AES算法。
AES算法包含了多个轮,每一轮(除了最后一轮)中,都有4个步骤:
(1)AddRoundKey—矩阵中的每一个字节都与该次回合密钥(round key)做XOR运算;每个子密钥由密钥生成方案产生。
(2)SubBytes—通过一个非线性的替换函数,用查找表的方式把每个字节替换成对应的字节。
(3)ShiftRows—将矩阵中的每个横列进行循环式移位。
(4)MixColumns—为了充分混合矩阵中各个直行的操作。
这个步骤使用线性转换来混合每内联的四个字节。
最后一个加密循环中省略MixColumns步骤,而以另一个AddRoundKey取代。
AES流程图
接下来留意2个数字,2^256(2的256次方)和8192。
2^256是整个密钥空间,这是一个相当大的数字,表明如果要一个一个猜密钥,需要这么多次才能确保猜对,这个数太大了,所以没法猜,暴力破解不可取。
但如果是猜8192次呢,这个数字对于计算机来说就完全可以接受了。
怎么猜才能在8192次中猜对呢。
信息论告诉我们,必须有额外的信息输入。
简言之就是分治的思想:一个一个猜。
256 bits的密钥,也就是32个Bytes,如果逐字节猜,每个字节有256种可能,32个字节需要256*32 = 8192次猜测就可以了。
而芯片工作受限于位宽和算法实现,是不会一次完成整个256bits密钥的处理的,正如饭要一口一口吃,数据也是逐字节处理的,这就给我们我们逐字节猜提供了实现依据。
本次旁路分析依然按惯例关注其中的非线性环节SubBytes。
所谓的非线性替换函数,在实现中就是一个查表操作。
查表操作的输出(S-box output)是攻击点。
当然算法的优化会合并一些操作以提高运算速度,这里攻击者可以偷着乐。
原因是虽然优化需要做大量的工作,但实际上,最终结果还是查表,查较大的表和较小的表,在旁路攻击中没有实质的区别。
AES 128和256的区别也是轮数,密钥长度的区别,查表操作本身是没有本质变化的(划重点)。
接下来用一张关系图来说明各要素的关联。
AES的输入是密钥和明文,对于攻击者来说,明文已知,密钥未知,也是分析目标。
接下来初始密钥和明文会进行一个异或操作(首次AddRoundKey),得到的值,作为查表索引输入,进行查表操作,注意到查表的数据是和密钥和明文的异或有关的。
而明文已知,查找表本身固定已知,异或运算又是简单的可逆运算,所以可以认为查表的输出和密钥有关。
查表操作在现代计算机体系结构中是一次访存操作,那么,地址和数据都会出现在总线上。
如果能知道总线上是什么数据,就可以简单的反推出密钥。
接下来考虑总线是什么?
低频上看是导线,射频上看是天线,对于安全分析人员来说,天线都是个好东西。
高速数字电路的信号翻转,包含了丰富的频谱分量,会辐射到芯片外部。
理论上能准确探测到这样的辐射,就能完成攻击了,so easy。
当然,在实践中,呵呵。
问题一方面出在测量精度上。
实际上我们并不能如此高精度地测量电磁辐射。
我们可以测量的是电磁辐射的相对高低。
例如1根导线上信号翻转和8根导线上信号一起翻转,就有明显的信号强度差异。
这里涉及到一个术语称为泄露模型(model of leakage),描述泄露的情况。
这次攻击使用了Hamming distance模型,也就是说信号跳变程度是可以观测的,这在电磁旁路分析中也是较为常见的建模方式。
问题另一方面出在信噪比。
(即便用上雅鲁藏布江的水电),环境中始终有大量的干扰,提高信号质量的方式是多次测量,然后通过相关性分析的方法提取统计上的最大相关性。
还有一些问题限于篇幅这里不展开,反正DPA都很巧妙地解决了:
(1)首先输入一个明文,在加密过程中,明文会和密钥的第i个字节异或,输入到查找表中查表,查表结果会出现在总线上,然后产生电磁辐射。
这个过程是真实物理发生的,在此期间使用硬件记录这个电磁辐射。
(2)分析软件模拟计算过程(1),当然因为不知道密钥的第i个字节具体数值,每一种可能都要算,利用泄露模型计算256个模拟的电磁辐射相对值。
(3)变换不同的明文重复(1)和(2)的过程,得到N次结果。
一共有N个实际测量值和N*256个计算值。
(4)使用相关性分析的方法,比对这256种猜测中,和实际测量值相关性最大的猜测值,就是实际上密钥的第i个字节真实值。
(5)重复(1)到(4),分别猜测32个密钥字节,得到完整密钥。
以上就是电磁/功耗差分分析的主要流程(通俗版)。
由于密码芯片在加密过程中,是逐字节处理的,而处理每个字节的时候,都会有电磁信息的泄露,给了攻击者逐字节猜测的机会,从而可以在前文提到的8192次猜测中完成破解。
实际分析中,还会遇到很多的困难,接下来看看Fox-IT的专家是怎么完成这次攻击的。
实战
以下是Fox-IT的专家给出的攻击流程。
首先使用射频采集设备采集目标芯片的电磁辐射,混频量化后存储到分析计算机中。
分析计算机首先对采集的信号进行预处理后,使用上述DPA的方式得出密钥。
攻击的目标硬件为来自Microsemi的SmartFusion2,这是一个混合了ARM和FPGA的SoC。
攻击针对的是ARM部分,一个Cortex-M3的内核。
目标软件是来自OpenSSL 的AES 256实现。
虽然SoC是一个混合芯片,但是只是用了ARM部分,Cortex-M3是很经典的ARM core,软件上也是OpenSSL的标准实现,可以认为这样的攻击很具有代表性。
SmartFusion2 SoC FPGA 结构
接下来看看信号链部分。
首先是天线。
理论上,设计天线是一个非常严谨且套路很深的活,比如下图只是冰山一角(图片来自网络)。