差分故障分析 破解 AES白盒
DFA破解白盒AES
站在巨人的肩膀上看世界
懒得讲,直接分享我感觉一些还不错的文章吧。
AES白盒的原理、差分故障分析的原理
-
复习AES加密流程,了解故障对密文的影响,进行差分故障分析,并且根据第10论密钥反推AES加密的密钥
https://bbs.kanxue.com/thread-280335.htm
文章作者写的很详细,事实上对AES白盒的差分故障分析,就是在最后一轮列混合前,修改state状态的i字节,最后会导致密文发生四字节的改变,之后与未修改state状态得到的密文进行差分,以获取第10轮密钥\(K_i\)的范围,通过不断更换i的值,即可不断缩短\(K_i\)大小的范围,最后,范围内将只存在唯一符合的值。
之后作者通过数学公式推导了一下,可以根据已知的第10轮密钥,一直逆推出第1轮所使用的密钥,即AES加密的密钥。
-
AES白盒(Chow方案)的设计与实现
https://blog.csdn.net/qq_37638441/article/details/128968233
这里作者给出了部分源码,事实上,到这一步的时候,作者的工作还没有完全完成:
少了一步混合双射,不过大概的思想讲的很透彻
差分故障分析破解AES白盒的代码实现
工具介绍
-
首先需要一个python库: phonenixAES ,使用这个库,我们可以推到出AES白盒的第10轮密钥
-
之后需要一个轮密钥推到密钥的程序: https://github.com/SideChannelMarvels/Stark
使用这个程序,我们可以从第10轮轮密钥逆推出第一轮轮密钥
使用方法
-
固定输入,首先正常获取AES白盒的输出
-
在最后一轮列混合前,倒数第二轮列混合后,依次修改AES白盒输入的第0~15个字节(修改成什么值都行,但要记住修改成的值是相同的),并记录输出数据,就像这样:
-
之后把这17条数据喂给 phoenixAES 库,即可得到第10轮密钥
import phoenixAES with open('tracefile', 'wb') as t: t.write(""" D679E5A02E32F14DF5CC278581653274 3879E5A02E32F185F5CC818581703274 4F79E5A02E32F1B5F5CC1B8581F03274 2979E5A02E32F1ADF5CCCC8581533274 3D79E5A02E32F131F5CCEC8581123274 D6E8E5A0C232F14DF5CC271881650A74 D622E5A0A932F14DF5CC274881652174 D674E5A08F32F14DF5CC276981655474 D6FAE5A07532F14DF5CC27C88165C674 D67975A02E8AF14D8CCC2785816532B2 D679E9A02EBBF14DDACC27858165324C D6796BA02E3EF14DE1CC278581653259 D67924A02EA5F14DF0CC278581653294 D679E5932E32AF4DF5142785C4653274 D679E5BD2E32184DF559278558653274 D679E5152E32F64DF59627859D653274 D679E58F2E329F4DF5DE27858C653274 """.encode('utf8')) phoenixAES.crack_file('tracefile')
-
利用 keyschedule 即可回复第1轮密钥,即得到AES加密的密钥
./aes_keyschedule EA9F6BE2DF5C358495648BEAB9FCFF81 10
参考:
https://bbs.kanxue.com/thread-280335.htm
https://blog.csdn.net/qq_37638441/article/details/128968233
https://equinox-shame.github.io/2023/12/27/AES 白盒学习/#Chow方法下的AES白盒的实现