尝试从硬件中提取数据通常非常困难(尤其是在处理智能卡时)。故障注入攻击允许基于通过加密/解密算法传播的错误来猜测加密密钥。我知道一些可能的故障注入类型,但不是全部。
- 可能有哪些不同类型的故障注入?
- 不同类型的技术有什么特别的优势吗?
尝试从硬件中提取数据通常非常困难(尤其是在处理智能卡时)。故障注入攻击允许基于通过加密/解密算法传播的错误来猜测加密密钥。我知道一些可能的故障注入类型,但不是全部。
基本上,我们在这里假设我们有一个黑盒,它使用已知算法但具有一些未知参数产生输出。在密码学的情况下,黑匣子可以是智能卡上的芯片,已知算法可以是密码算法,未知参数将是隐藏在芯片中的算法密钥(永远不会出去) )。
在此特定设置中,我们可以执行所谓的“选择明文攻击”,这意味着我们可以选择黑盒的输入并查看输出。但是,我们还假设这不足以猜测未知参数(密钥)。所以,我们需要更多的帮助来帮助我们。
我们的第二个假设是我们能够在已知算法的特定选择阶段引入错误。通常,当谈到智能卡时,这意味着我们有一个物理设置,有一个非常精确的计时器,与智能卡时钟相连,还有一个激光瞄准芯片上的物理寄存器。用激光照射寄存器,通常重置寄存器(或可能引入一些随机值)。
因此,故障注入的目的是研究注入的故障对密码算法的影响,并推断出有关密钥值的一些信息。
根据芯片中使用的密码算法,为了最大化收集到的有关密钥的信息而需要重置的最有趣的位可能会有很大差异,因为错误的传播取决于执行的计算是不同的。因此,需要首先研究每种密码算法,以便了解提取密钥的最佳方法。
不同类型的故障注入分析主要取决于您可以控制引入的错误的准确性(从最简单到最困难):
事实上,对抗故障注入非常容易,但代价高昂。您只需要复制电路并检查完成后两个电路是否提供相同的输出。如果没有,您只需要在不泄漏任何信息的情况下发出错误。
当然,在“完全控制错误”攻击的情况下,也可以只复制激光束。但是,通常情况下,“完全控制错误”攻击是一种理想情况,在实践中几乎从未达到过。
更难解决的是,在'已知错误'攻击的情况下,你可以使用芯片(output
/ error
)的输出来猜测你想要的任何寄存器的内容。您只需要始终对相同的输入执行攻击,直到获得正常的output
,然后您就可以将您写的内容存储在寄存器中。因此,重建密钥的值。
无论如何,芯片上电路冗余的成本是相当高的,无论是金钱还是功耗。所以,并不是所有的芯片都可以配备这个。
这些攻击必须与“侧信道攻击”进行比较(或组合)。两种攻击都有不同的方法,并且对可能发生的事情或不可能发生的事情使用不同的假设。将它们结合起来可以进一步提取有关您研究的设备的信息。
现在谈软件逆向工程,我现在不知道故障注入攻击有什么实际用途。但是,我非常有信心您可以使用这种技术来猜测已被混淆的已知算法的参数,而无需对其进行详细剖析。不知何故,任何调试器都可以在程序中的精确时间(断点)重写寄存器,完全控制寄存器中写入的内容(我们在这里是在“完全控制错误”攻击的情况下)。因此,这当然可以用于通常的混淆程序。