没有绝对安全的系统:写在AES 256破解之后

NULL
在理论上,理论和实践是一致的。在实践中,呵呵。——(应该是)爱因斯坦(说的)
(INFO:本文中不会出现公式,请放心阅读

AES 256被破解了?
对于TLNR(Too Long, Not Read)的读者来说,先把答案放在这:是的,但也不尽然。
事件回顾如下:前几日在互联网上转发的一条题为“AES 256加密被破 一套1500元设备5分钟内搞定”的新闻引起了各界的关注。新闻在国内各大媒体转载,热门评论里不乏各种被高赞但实际上并不正确的说法:有说是字典攻击无线信号,和破解AES是两回事的,也有所是根据无线电特性来攻击的,和AES没关系的。还有想搞个大新闻的媒体直接说是路由器被破解,甚至还说成了5分钟破解任何WiFi密码的,唯恐天下不乱。
实际上这次的破解来自Fox-IT [1],确实攻击了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 [2],高至售价上千美元的Intel CPU中有AES-NI [3])。对于这样一个成熟的密码学标准,密码算法本身设计的十分完善,传统的差分分析,线性分析等方法基本上不能在有限复杂度内完成,AES在理论上是安全的。但是正如本文标题描述的那样,即便有绝对安全的算法,也做不到绝对安全的系统。唯物辩证法中有联系的普遍性和多样性原理,现代密码系统在设计上理论安全,并不能替代密码系统的实现安全性。攻击者可以在不干扰密码芯片运行的前提下,观测时间,功耗,电磁辐射等旁路泄露,然后结合算法的实现进行密钥还原,实现所谓的旁路攻击。对于旁路攻击的防御,涉及到密码算法实现安全性这一范畴,很显然,这次攻击成功的AES 256,表明实现安全性的研究还有很长的路要走。
这里简要介绍一下AES算法。AES算法包含了多个轮,每一轮(除了最后一轮)中,都有4个步骤[4][5]:(1)AddRoundKey—矩阵中的每一个字节都与该次回合密钥(round key)做XOR运算;每个子密钥由密钥生成方案产生。(2)SubBytes—通过一个非线性的替换函数,用查找表的方式把每个字节替换成对应的字节。(3)ShiftRows—将矩阵中的每个横列进行循环式移位。(4)MixColumns—为了充分混合矩阵中各个直行的操作。这个步骤使用线性转换来混合每内联的四个字节。最后一个加密循环中省略MixColumns步骤,而以另一个AddRoundKey取代。


没有绝对安全的系统:写在AES 256破解之后

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 256破解之后


没有绝对安全的系统:写在AES 256破解之后
使用急救毯包裹的攻击环境 最后再冲击一下1米的距离,这需要在理想条件下完成。首先,测试在微波暗室中进行,尽可能地排除了干扰信号。天线方面使用了盘锥天线,并保证了测量子系统和加密子系统之间的电气隔离。1米的距离很艰难的达到了,使用了240万条traces。这个理想实验证明了,在足够好的条件下,1米的攻击距离是完全可行的。

没有绝对安全的系统:写在AES 256破解之后
防御
旁路攻击之所以可以生效,主要在于密码设备泄露的旁路信息和操作的数据有关联性。在算法实现上,可以通过掩码(masking)或者隐藏(hiding)的方式来消除这种关联性。这方面的具体细节本文不再展开。在密码学算法这一领域,对于一般的应用或者系统开发者,是不推荐自己造轮子的。特别是不可以认为自己略懂密码学的算法,就去修改它们,一个简单的小修改,可能会破坏理论安全性和实现安全性,这些都不是普通的开发者可以做好的事情,还是用成熟的轮子最为靠谱。
以SmartFusion 2为例,完全可以不使用OpenSSL的算法实现,而使用带有保护的实现,例如Microsemi官方提供的FPGA实现。在电路级别上,功耗平衡等技术也可以从一定程度上解决这类泄露,使用专有的硬件来完成密码学操作,就可以很好地防御这类攻击了。

参考文献[1] https://www.fox-it.com/en/insights/blogs/blog/tempest-attacks-aes/
[2] //www.st.com/zh/embedded-software/stm32-cryp-lib.html
[3] https://www.intel.com/content/www/us/en/architecture-and-technology/advanced-encryption-standard--aes-/data-protection-aes-general-technology.html
[4] https://en.wikipedia.org/wiki/Advanced_Encryption_Standard
[5] Pub N F. 197: Advanced encryption standard (AES)[J]. Federal information processing standards publication, 2001, 197(441): 0311.
[6] https://www.openssl.org/
[7] https://www.microsemi.com/products/fpga-soc/soc-fpga/smartfusion2
[8] Mangard S, Oswald E, Popp T. Power analysis attacks: Revealing the secrets of smart cards[M]. Springer Science & Business Media, 2008.
* 作者:cyxu,更多安全类知识分享及热点资讯,请关注阿里聚安全的官方博客