欢迎来到 黑吧安全网 聚焦网络安全前沿资讯,精华内容,交流技术心得!

使用DFA攻击硬件的AES算法,并从PlayStation Vita中提取硬件密钥

来源:本站整理 作者:佚名 时间:2019-03-13 TAG: 我要投稿

在过去的几个月里,我一直试图从PlayStation Vita中提取硬件密钥。为此我还专门写了一篇论文,里面详细介绍了我所使用过的所有的技术细节和理论依据,感兴趣的读者可以点此详细了解。本文是对具体的操作过程进行讲解,为大家提供一个直观地理解。
注:PlayStation®VITA是索尼的一代掌机,简称PS Vita、Vita或PSV,以下我会将PlayStation Vita统称为PSV。
DFA
DFA全称为:Deterministic Finite Automaton,即确定有穷自动机。其特征为:有一个有限状态集合和一些从一个状态通向另一个状态的边,每条边上标记有一个符号,其中一个状态是初态,某些状态是终态。但不同于不确定的有限自动机,DFA中不会有从同一状态出发的两条边标志有相同的符号。
高级加密标准(AES)算法具有抗差分和线性攻击能力,却容易受到故障攻击,该攻击对密码系统破坏较大。
DFA的主要思想是:我们可以像在处理器上一样对AES硬件使用故障攻击,但是我们不使用它来控制代码执行,而是使用它来使用正确的密钥进行错误的AES加密。由于AES是一种脆弱的算法,稍作修改会导致它以非正常的方式泄露有关密钥的信息,而我们正是利用了这一算法的弱点。
不过,目前除了学术界对“针对AES解密的DFA攻击方法”有研究外。实际的应用案例并不多,在我们对Github进行了搜索后,我们只发现了两个严重的AES DFA攻击实现示例。 dfa-aes是2009年一个实现示例,其中经过8个周期和2的32次暴力破解,可以产生准确的AES-128密钥。 2002年至2016年期间,虽然有很多人发表了许多相关的论文,描述了相关的故障攻击。但是,我们无法找到这些论文附带的任何源代码示例。最后,我们从phoenixAES中找到了相应的源代码,尽管它们不是最先进的(文献中的大多数代码在实践中并没有多大意义)。因为编写代码很无聊且需要花费很长时间,所以这个示例是很有意义的。
撇开这个问题不谈,完成攻击的主要的工作是完善我们的故障设置,以便在8周期的暴力破解中向AES引擎(AES engine )注入精确故障,比如故障不超过一个字节。一旦我们的故障设置完成,我们就可以将收集到的样本置入phoenixAES或dfa-aes。使用DFA攻击硬件的AES算法,并从PlayStation Vita中提取硬件密钥
DPA
在介绍我们如何布置DFA故障的设置之前,我们有必要向介绍一下对PSV的DPA攻击。差分功耗分析(Differential power analysis)是一种边信道攻击,如果攻击者在使用密钥操作时观察AES引擎的功耗,就可能找到泄漏的密钥。首先,攻击者会假设一个密钥值。然后,他们定义AES引擎的功耗使用模型,以预测密钥值在假设正确的情况下会消耗多少功耗。最后,使用该密钥值运行引擎并测量实际功耗以查看预测的准确性。通过多次重复,就可可以找到整个密钥。 Chipwhisperer wiki对差分功耗分析的运行过程进行了很好的介绍,你可以点此查看。
为了在要攻击的目标上执行DPA,你需要能够精确测量芯片中的电流(current)。一种方法是应用法拉第定律:变化的磁场会产生电压。你可以使用“磁探针”测量电流.Colin O'Flynn在Blackhat中描述了如何构建自己的磁探针,我按照他的办法构建了一个,使在其上运行ChipWhisperer示例。

不幸的是,上图所示工具的环状大小决定了测量的精确程度,且一个好的工具非常昂贵。而测量电流的另一种方法是应用欧姆定律:通过电阻的电流变化等于通过电阻的电压变化。这需要修改电路,以在电源和目标芯片之间引入小的电阻器。
随着芯片消耗更多功耗,它将需要更大的电流,这导致电阻器两端的电压下降更大。为了利用并联电阻测量,我们需要先将PCB中从电源到目标芯片的线切断。然后我们将目标芯片连接到我们的定制电路板,该电路板有一个分流电阻和测量探针端口。我们使用外部电源为电路板供电,其实我们可以使用Vita自带的电源,但它更容易连接外部电源。

自定义设计的psvcw板有一个分流电阻,一个滤波电容器,以及用于差分探针和CW glitcher的端口,顶部还有探测eMMC信号到目标芯片的电线。我们使用它们将有效载荷闪存到eMMC,并触发电压故障以获得代码执行。

外部电源连接到psvcw
然而,即使使用并联电阻法,我们也无法获得良好的信噪比(SNR或S/N,是指一个电子设备或者电子系统中信号与噪声的比例)。我们观察到,在AES加密期间,SRAM读写操作在功耗跟踪中占主导地位(涉及多个幅度),因此很难找到跟踪和密钥之间的任何相关性。由于PSV的SoC是为低功耗而设计,所以我们确定DPA有确切设置,如果要获得提高信噪比所需的正确设备,成本将会太高。

在0-50个周期内,会开启触发GPIO信号,在250-350个周期内,进行AES操作。到第600个周期时, GPIO会关闭,整个过程中的小幅度下降可能是F00D处理器操作引起的。
尽管名称相似,但DPA和DFA完全不相似。 DPA是(被动)侧通道攻击,而DFA是(主动)故障攻击。然而,所有尝试DPA的工作都没有白费。首先,我们获得了关于AES操作发生时间的宝贵信息。通过将单个AES操作的跟踪与我们收集的其他跟踪(即没有AES操作或有多个AES操作)进行比较,我们可以得出结论,AES操作发生在触发后功耗在250-350个周期下降的地方。为此我们对PCB进行了修改,在测量中插入了一个并联电阻并降低了信噪比,这也同时满足了我们更精确的对故障进行设置的目的。这一点很重要,因为在以前,我们的攻击目标是在安全处理器出现故障时,获得代码执行。为了到达这个效果,可以在多个周期中出现故障。由于AES引擎在每个周期执行4次操作,且都引起了电压高峰,为了不被目标设备的配电网络过滤掉,插入了一个并联电阻是很有必要的。

[1] [2] [3]  下一页

【声明】:黑吧安全网(http://www.myhack58.com)登载此文出于传递更多信息之目的,并不代表本站赞同其观点和对其真实性负责,仅适于网络安全技术爱好者学习研究使用,学习中请遵循国家相关法律法规。如有问题请联系我们,联系邮箱admin@myhack58.com,我们会在最短的时间内进行处理。
  • 最新更新
    • 相关阅读
      • 本类热门
        • 最近下载