依赖AES加速器的抗泄漏的认证加密

依赖AES加速器的抗泄漏的认证加密

论文主要工作

在2020年tches上提出了一篇论文[USS20]给出了抗泄漏AEAD的具体实现,并论证了其安全性。但是本论文作者(Olivier Bronchain等)发现[USS20]给出的实现在实际环境中并不安全,因此作者给出了相关的攻击并分析了不安全的原因,并且进一步给出了相应的改进方案。因此在介绍本论文之前,我们需要简要回顾一下[USS20]论文给出LAEAD的实现方案,而由于[USS20]论文是对一个理论上抗泄漏的AEAD方案的实现,因此我们需要首先了解这个LR-AEAD是如何构造的[KS20]。

Retrofitting Leakage Resilient Authenticated Encryption to Microcontrollers 相关工作
抗泄漏的AEAD方案

在这里插入图片描述

从图中我们可以看到,该LAEAD方案包含四个函数——两个伪随机函数F,F‘,一个伪随机数生成器PRG,以及一个hash函数H。这个方案要求F和F’都需要满足在侧信道泄漏的情况下仍然是伪随机的(刚开始作者要求F‘需要是不可预测的,但是后来Kramer和Struck证明了这个性质是不需要的)。因此我们可以发现,实现这个AEAD方案具体主要需要实现两个函数,LR-PRF和LR-PRG。

LR-PRF

在这里插入图片描述

作者使用的L-PRF是Marcel等人提出的。

初始方案如左图: F k ( x ) F_k(x) Fk(x): 每个临时密钥具有两个明文信息。然后从初始密钥开始,利用初始密钥k进行加密,获得两个临时密钥。stage 2使用哪个临时密钥进行加密依赖于伪随机函数的输入x的第 i 比特。我们假设PRF的输入具有128比特,这样的话我们就需要128 个 stage。(由于每个临时密钥只使用两次,因此敌手很难进行侧信道攻击)

我们能想到的提升效率的方法就如右图所示:对于每个stage 选取2^k个明文信息,例如我们选取 k=8,也就是选取256个明文信息。这样每次就能使用x的8比特。这样我们就只需要(128/8)16个stage了。这样虽然提高了效率,但是同时也会降低安全性。因为这样每个临时密钥就被使用了256次,增加了敌手通过侧信道攻击恢复临时密钥的风险。

上面这个方案在一般的情景下仍然不是抗泄漏的。作者又提出了AES的S盒并行来进一步增加侧信道安全性(由于并行会增加侧信道攻击的噪音)。然而,在这种情况下,敌手仍然有可能通过divide and conquer策略来一步步恢复所有密钥。

作者为了进一步增加侧信道攻击的难度(准确来说应该增加divide and conquer的难度),作者为每一层精心挑选了加密的明文信息。即:把每个明文信息都设置为相同的字节进行及联,这样敌手在进行攻击的时候,由于第一层AES加密每个S盒都具有相同的输入,这样敌手即使是用了 divide and conquer策略,也仍然需要确定每个S盒的顺序,这样就进一步增加了敌手完整的恢复密钥的难度。

但是这样保证安全性其实要求两个条件:

  1. 每个S盒的侧信道泄漏函数需要是相同的
  2. 利用未知的密文进行侧信道攻击是困难的
L-PRG

在这里插入图片描述

该L-PRG也是利用AES算法不断更新临时密钥,从而达到抗侧信道的性质的。和LPRF不同的是,这个函数使用的明文信息需要进行保密。

Hash算法

Hash算法由于不需要抗侧信道攻击的性质,因此可以直接运用SHA256。

作者利用上面这些组件的实现,就可以获得一个抗侧信道攻击的AEAD了。作者在STM32和EFM32上进行了测试,说明了这种实现方式是侧信道安全的

Improved Leakage-Resistant Authenticated Encryption based on Hardware AES Coprocessors

作者在这篇论文中分析了上一篇论文方案中存在一些不合理的方面并给出了进一步的改进。

不合理之处
  1. 在上面LAEAD方案中存在标签验证的比较操作,这个操作需要在实现层面进行保护(例如通过masking技术),但是这项技术和上篇论文的主题(使用硬件来保证测新到的安全性)不相符合。
  2. 上面使用的L-PRF在实际使用中其实并不是完全抗侧信道攻击的,原因是上面L-PRF安全性要求每个S盒的侧信道泄漏函数需要是相同的,但是(Olivier Bronchain等)发现在实际芯片中,不同S盒侧信道泄漏不完全相同,并且这个差异性可以被使用来进行SPA攻击。
关于标签验证操作的攻击:

首先看一下上一篇论文中给出的AEAD解密方案:

特别注意一下在14行,代码中实现是直接利用真实标签和敌手给的标签进行比较。这个相比的操作在C语言中写出来就是下面的代码(进行位运算速度更快)

在这里插入图片描述

攻击者可以选择随机的标签S,访问LR-ARAD的解密函数,并进行侧信道攻击。下面是选择的标签S的数据量和成功恢复标签成功率的关系。我们可以看到,敌手大概需要3000次左右的解密操作就能恢复一个32比特长度的标签了。

在这里插入图片描述

LR-PRF在实际芯片使用中存在的问题

上面我们已经提到,LR-PRF的安全性要求两个条件,其实上面两个条件等价于下面的条件

  1. 列混合的攻击确实困难
  2. S盒泄漏函数相同,或者即使存在细微的差别,这个差别对于敌手进行侧信道攻击是没有帮助的。

经过作者在Cortex-M33(32bit)和Cortex-M4(128bit)芯片上的测试,第一个条件确实是满足的,但是第二个条件就不再满足了。

下图分别是Cortex-M33和Cortex-M4在泄漏空间中和线性空间中不同S盒的差别

在这里插入图片描述

作者其实在论文中给出了关于LR-PRF实现攻击的定性分析,在这里我们不再赘述,我们这里明白这个LR-PRF其实在具体芯片实现上并不一定安全就可以了。

进一步改进

目标:只使用AES之类的分组加密来实现更高的安全性保证(存在解密泄漏的情况下)

主要思路
  1. 使用分组加密进行临时密钥的更新
  2. 使用压缩函数,每次函数输入包括之前的结果,这样就形成了依赖性。
主要步骤
  1. 用密钥派生函数 K D F K ( N ) KDF_K(N) KDFK(N)计算一个随机的2n比特的状态 ( K 1 , L 1 ) (K_1,L_1) (K1,L1) ,其中 K 1 K_1 K1是临时密钥。
  2. 使用一次一密进行加密生成对应的密文,并且密文C会被压缩函数吸收
  3. 使用一个抗泄漏的MAC去进行标签的生成运算。
主体部分(上面步骤的第二步):

第一版方案首先从Mennink提出的压缩函数 M e n H MenH MenH开始,这个函数使用三次分组加密。给定 2 n 2n 2n比特的初始状态和 n n n比特的待压缩密文,该函数 M e n H ( K i , L i , C i ) MenH(K_i,L_i,C_i) MenH(Ki,Li,Ci)可以将3n比特的输入压缩称为2n比特的输出状态 ( K i + 1 , L i + 1 ) (K_{i+1},L_{i+1}) (Ki+1,Li+1),并且这个压缩函数达到了最佳的抗碰撞特性。

在这里插入图片描述

上面的黑色的BC加密和线性变换层就是原来的 M e n H MenH MenH方案,然后作者新加入了一个分组加密BC(红色部分)对每个明文进行一次一密的加密过程,生成每个密文 C C C.

KDF密钥派生函数

在这里插入图片描述

线性变换层:

在这里插入图片描述

标签生成函数 TGF

这个方案中注意红色圈住部分,郭淳老师,王伟嘉等人已经证明了如果用两个强力保护(例如:masking技术)的分组密码的情况下,它满足超过生日攻击的安全性。但是在这篇论文中,作者的目的是不使用masking技术的前提下,保证侧信道安全。因此,这里只能用上面提到的LR-PRF了。但是上面作者已经论证了,这个LR-PRF在具体芯片实现中并不一定是安全的。事实上,敌手确实可以通过SPA技术对该方案进行攻击:通过询问解密 ( N , C 1 , ⋯   , C l , S ) (N,C_1,\cdots,C_l,S) (N,C1,,Cl,S)对于不同的随机标签S(固定输入N)。这样的话固定输入也就会导致最后状态(A, B)和X固定不变。这个DPA攻击验证过程中的X当对于不同的S计算 E X − 1 ( S ) E_X^{-1}(S) EX1(S)的时候。

初步改进:

在这里插入图片描述

在这次改进中,标签的对比并不是通过比较X来进行的,而是增加额外的一个分组密码去加密一个常数值(例如:0)并且比较这个结果Z。这个时候敌手就不能通过多次解密标签S来进行DPA攻击了。这时候,他不得不正向攻击这个分组密码。但是为了保证DPA的数据复杂度是 α \alpha α, 敌手不得不固定X对于不同的 α \alpha α个A值,这样敌手就不得不寻找多个B的碰撞,因此这个工作就变得困难了。

然而,敌手仍然能够通过SPA攻击去进行攻击。敌手只需要进行 2 n / 2 2^{n/2} 2n/2个加密询问和 2 n / 2 2^{n/2} 2n/2个解密询问,敌手就能对这个方案进行攻击。

进一步改进:

在这里插入图片描述

为了进一步将安全性增加到超过生日攻击的安全性界,方案需要确保输出Z依赖多个状态。也就是说,上面我们生成Z的方式是通过对相同的常数明文进行加密的,我们可以进一步通过前面的中间状态来生成这个明文,这样的话Z的生成就依赖多个随机带。这样就进一步增加了安全性。

尽管这个改进看起来已经很好了,但是我们可以发现该方案还是重复使用B来生成临时密钥X,这仍然可能会存在问题。因此进一步的改进就是改变B的重复使用。

在这里插入图片描述

最终方案如下:
在这里插入图片描述
参考文献:
[1]. Bronchain O, Momin C, Peters T, et al. Improved leakage-resistant authenticated encryption based on hardware AES coprocessors[J]. IACR Transactions on Cryptographic Hardware and Embedded Systems, 2021: 641-676.
[2]. Unterstein F, Schink M, Schamberger T, et al. Retrofitting leakage resilient authenticated encryption to microcontrollers[J]. IACR Transactions on Cryptographic Hardware and Embedded Systems, 2020: 365-388.
[3]. Medwed M, Standaert F X, Joux A. Towards super-exponential side-channel security with efficient leakage-resilient PRFs[C]//International Workshop on Cryptographic Hardware and Embedded Systems. Springer, Berlin, Heidelberg, 2012: 193-212.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值