根据“以免我们记住:对加密密钥的冷启动攻击”的文章,有一个快速而肮脏的熵测试,可以帮助在内存转储中找到可能的AES密钥调度。尽管在其他著名密码学家(例如这个职位)的博客中引用了该算法,但我仍未能找到任何解释,解释它为什么工作,以及为什么该算法是正确的。有没有人能给我提供熵测试正确性的证明,或者仅仅解释一下为什么它能起作用?
发布于 2014-03-09 23:30:10
问题的措辞方式是误导的,因为熵测试是在他们从内存中提取AES密钥之后执行的。测试用于确认它是可能的加密密钥还是用于基准测试或算法验证的AES密钥。
实际的过程包括遍历整个内存空间,并检查每个内存块,这些内存块的大小可能与计算的密钥调度相同,这看起来可能令人望而生畏,但由于密钥调度的简单性,它实际上非常快。它们以字递增的形式遍历内存空间,并计算密钥调度的第一次迭代。如果它与内存中的下一个单词匹配,则执行整个键调度并进行比较。在一个4GB的内存空间上,总共大约有1.34亿次迭代,只需几分钟;特别是如果测试系统在多个核上有AESNI指令,搜索可能只需要几秒钟。完整的密钥计划是对128位键进行10次迭代.
更新:
看起来他们在对密钥进行最终(手动)熵分析之前,使用了一个自动熵测试来消除内存块。这是通过循环通过内存块和计数重复。如果任何一个字节值包含5%或更多的块,则将其标记为非键。块搜索大小为11个圆键或176个字节。这比在他们的代码中计算密钥调度要快,但是如果您有AESNI指令的代码(执行相同搜索的第三方代码),则要慢一些。
只有当内存损坏时才会变得缓慢,例如在冷引导攻击中。在这种情况下,丢失的比特需要外推,需要使用较慢的算法来查找候选密钥。
密钥调度只对主键执行4个操作,这些操作可以在密钥调度的几乎任何一点上进行正向和反向计算。此外,3个操作并不是对密钥的每一个字都执行。如果存在内存损坏,则选择一个4字块,并在两个方向(128位键)计算密钥调度。如果在任何方向都有字匹配,则将标记该区域以重建整个关键空间。
一旦识别了AES密钥,就会执行熵分析,以确定它是否是使用AES的应用程序的可能密钥。然后,将找到的密钥的各种组合与应用程序一起使用,直到成功解密为止。
https://crypto.stackexchange.com/questions/14894
复制相似问题