收藏 分销(赏)

针对分组密码工作模式的基于持久性故障的碰撞攻击_臧首金.pdf

上传人:自信****多点 文档编号:476506 上传时间:2023-10-16 格式:PDF 页数:13 大小:1.17MB
下载 相关 举报
针对分组密码工作模式的基于持久性故障的碰撞攻击_臧首金.pdf_第1页
第1页 / 共13页
针对分组密码工作模式的基于持久性故障的碰撞攻击_臧首金.pdf_第2页
第2页 / 共13页
针对分组密码工作模式的基于持久性故障的碰撞攻击_臧首金.pdf_第3页
第3页 / 共13页
亲,该文档总共13页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

1、密码学报ISSN 2095-7025 CN 10-1195/TNJournal of Cryptologic Research,2023,10(1):118130密码学报编辑部版权所有.E-mail:http:/Tel/Fax:+86-10-82789618针对分组密码工作模式的基于持久性故障的碰撞攻击*臧首金,郑世慧北京邮电大学 网络空间安全学院,北京 100876通信作者:郑世慧,摘要:基于持久性故障的碰撞攻击可以有效恢复 AES 加密/解密模块(基于 S 盒实现)中使用的密钥.现实中处理长消息需要调用相应的工作模式,不能满足基于持久性故障的碰撞攻击的前提假设.此外,广泛应用的开源密码库

2、OpenSSL 中 AES 密码模块采用多个 T 盒而非 S 盒实现,导致已有的持久性故障注入模式失效.本文针对 OpenSSL 中的不同工作模式分别研究.对于 ECB 模式,通过分别在 T 盒注入置零故障或随机故障,分别攻击 ECB 模式加/解密实现;对于 CBC 模式,通过挑战密文的方式攻击 CBC模式的解密实现,从而避免加密时输入随机初始向量对中间值的干扰;对于 OFB 和 CFB 这种不直接操作消息的模式,通过挑战密文的方式仍能成功攻击.本文还证明了获得加密模块(或解密模块)的直接输出并非持久性故障碰撞攻击的必要条件,并通过对 CMAC 的分析验证了只要可以观测到中间状态的碰撞信息,就

3、可以恢复密钥.通过在 PC 上仿真注入故障,针对上述工作模式实施密钥恢复实验,表明不论是单字节故障还是多字节故障,攻击成功率都为 100%.关键词:OpenSSL;AES;工作模式;持久性故障;故障攻击;碰撞攻击中图分类号:TP309.7文献标识码:ADOI:10.13868/ki.jcr.000583中文引用格式:臧首金,郑世慧.针对分组密码工作模式的基于持久性故障的碰撞攻击J.密码学报,2023,10(1):118130.DOI:10.13868/ki.jcr.000583英文引用格式:ZANG S J,ZHENG S H.Persistent fault-based collision

4、attack on block cipher modeJ.Journal of Cryptologic Research,2023,10(1):118130.DOI:10.13868/ki.jcr.000583Persistent Fault-based Collision Attack on Block Cipher ModeZANG Shou-Jin,ZHENG Shi-HuiSchool of Cyberspace Security,Beijing University of Posts and Telecommunications,Beijing 100876,ChinaCorresp

5、onding author:ZHENG Shi-Hui,Abstract:Persistent fault-based collision analysis can effectively recover the key used in the AESencryption/decryption module(based on the S-box implementation).Nevertheless,processing longmessages requires invoking the corresponding working mode in reality,which cannot

6、satisfy the pre-supposition of collision attack based on persistent fault.In addition,the AES cryptographic moduleof OpenSSL,a widely used open source cryptographic library,is implemented with multiple T-boxesinstead of S-boxes,which invalidates the existing persistent fault injection mode.In this s

7、tudy,ECB*基金项目:国家自然科学基金(61502048)Foundation:National Natural Science Foundation of China(61502048)收稿日期:2022-01-04定稿日期:2022-05-15臧首金 等:针对分组密码工作模式的基于持久性故障的碰撞攻击119mode in OpenSSL is implemented by injecting stuck at 0 fault or random fault into T-box respec-tively to attack ECB mode encryption/decryptio

8、n.For CBC mode,this study attacks the decryptionimplementation of CBC mode by challenging ciphertext,so as to avoid interference of intermediatevalue by input random initial vector during encryption.For OFB and CFB modes,attacking thepattern of non-direct operating messages can be successful by chal

9、lenging ciphertext.In addition,itis shown that obtaining the direct output of the encryption module(or decryption module)is not anecessary condition for persistent fault collision attack,and the key can be recovered as long as thecollision information of the intermediate state can be observed by CMA

10、C analysis.Some simulationexperiments about injection faults on PC and implement key recovery are done for the above workingmodes.The experimental results show that the success rate of the attack is 100%for both single-byteand multi-byte faults.Key words:OpenSSL;AES;block cipher mode;persistent faul

11、t analysis;fault analysis;collisionanalysis1引言故障攻击利用电压毛刺、时钟毛刺、激光注入等技术向加密设备中注入故障,使之在计算过程中产生错误,从而通过分析观测到的正确/错误密文,恢复密钥等敏感信息.1997 年,Biham 和 Shamir 首次提出了针对分组密码 DES 的差分故障攻击(differential fault analysis,DFA)1,通过注入 50200 次单比特故障可以恢复完整的 56 比特密钥.2004 年,Giraud 提出了一个针对 AES 实现的 DFA2,通过在一个字节上注入故障,使用少于 250 条密文就可以恢复

12、AES-128 的密钥.2020 年,金雨璇等人基于面向比特的随机故障模型,通过注入一个单比特故障,结合平均 15.3526 比特的穷举攻击,成功恢复出了 SM4 的128 比特的密钥3.除 DFA 之外,还有许多故障攻击方法被提出,如故障灵敏度分析(fault sensitivityanalysis,FSA)4、错误率分析(fault rate analysis,FRA)5、暂稳攻击(transient-steady effect attack,TSE)6等.以上攻击都基于瞬态故障模型,即注入的故障只会影响一次加密过程.这类分析方法需要对注入位置精确把握,而现实攻击中从观测密文区分是否在指定

13、位置注入了所需的错误也不是一个简单问题.此外,往往需要多次注入所需错误才能恢复完整密钥.Zhang 等人在 CHES 2018 上提出针对 AES 的持久性故障攻击(persistent fault attack,PFA)7,也就是说,加密设备刷新(比如重启)之前会一直保持故障的状态.攻击者在 S 盒中注入一个单字节的持久性故障,且已知注入故障的值和注入位置,则平均使用 2000余条密文,可以恢复 AES 的 128 比特密钥.同时,他们借助 Rowhammer 技术,在密码库 Libgcrypt 1.6.3中 AES 实现的 S 盒中成功注入单字节持久性故障.之后,Menu 等人通过电磁故障

14、注入技术对 ARM 微控制器上的 AES 实现的 S 盒注入持久性故障并恢复密钥8.2020 年,Zhang 等人在 ATmega163L 微控制器上的 AES 实现上注入错误并攻击成功,这里他们不再假设攻击者需知道故障位置和故障值9.2021年,Zheng 等人提出了基于持久性故障的碰撞攻击(persistent fault-based collision analysis,PFCA)10,他们通过在 AES 的 S 盒中注入一次持久性故障,使用不超过 4096 条密文成功恢复了 AES 的 128 比特密钥.同样地,PFCA 也不需要知道注入故障的位置和注入的故障值,而且错误长度可以为多字

15、节.特别地,攻击者可以通过观测密文是否有碰撞判断是否注入了所需故障.2022 年,Soleimany 等人利用电磁故障在 ARM Cortex-M4 微控制器上注入了 8 字节故障和 16 字节持久性故障,分别只需要 1509 和 1448条密文就可以将密钥搜索复杂度降低到 O(29)11.OpenSSL 是一个功能齐全的工具包,包含常用的密码算法(对称/非对称/摘要)和数字证书认证等密码模块,被广泛应用于 TLS 协议、HTTPS、SSH 等12.但是,OpenSSL 中的 AES 实现采用多个 T 盒而非一个 S 盒,因而在注入持久性故障时与 PFCA 的错误模型不同.此外,CBC 等适用

16、于长消息加密的工作模式加密时,会输入随机值使得相同明文变换为不同密文,导致无法通过选择明文观测到碰撞密文.最后,在基于分组密码原语设计的消息认证模式中,明文块对应的密文块会经过处理再输出,因而不能收集到密文.由此,PFCA 不能直接应用于 OpenSSL 中基于 AES 的工作模式中来恢复密钥.本文通过对120Journal of Cryptologic Research 密码学报 Vol.10,No.1,Feb.2023OpenSSL 中基于 AES 的几种常用工作模式ECB 模式、CBC 模式、CFB 模式、OFB 模式及 CMAC模式的实现原理进行分析,改进 PFCA 的攻击流程,成功恢

17、复了 128 比特密钥,主要贡献如下:首先,由于 OpenSSL 使用 4 个 T 盒同时来进行查表操作,为了达到原始 PFCA 故障模型的效果,需要在 4 个 T 盒的相同位置注入故障;本文通过对 AES 加密使用的 4 个 Te 盒注入置零故障,成功攻击了ECB 模式的加密实现.另一方面,通过在 OpenSSL 中 AES 解密实现的第 5 个 Td 盒注入随机故障,结合选择密文攻击,成功恢复了 ECB 模式的解密实现的密钥(Te 盒与 Td 盒的介绍详见2.1节).其次,由于 CBC 模式加密过程的 IV 初始值不可预测,无法完成 PFCA 的选择明文过程.本文通过对 AES 解密使用的

18、 4 个 Td 盒中注入置零故障,成功恢复出了 CBC 模式解密模块的密钥.另外,对于 CFB 和 OFB 这种不直接操作消息的工作模式,本文通过挑战密文的方式,在密文传递过程中对初始向量进行篡改,在 4 个 Te 盒中注入置零故障,成功地恢复出了密钥.最后,本文通过分析 PFCA 的工作原理发现,如果攻击者可以不通过密文块就可以观测到中间状态的碰撞,则依然可以恢复密钥.本文对 OpenSSL 中的基于 AES 的 CMAC 工作模式验证了该结论.本文第2节简单介绍了 OpenSSL 中 AES 的实现方式以及几种工作模式和 PFCA 原理;第3节阐述了模型假设、对工作模式的攻击原理和对 Op

19、enSSL 中工作模式的实现的攻击方法;第4节详细介绍了对ECB 模式的加密模块、ECB 模式的解密模块、CBC 模式的解密模块、CFB 模式的解密模块、OFB 模式的解密模块和 CMAC 的持久性故障攻击的原理和具体步骤;最后对全文的工作进行了总结.2基础知识2.1高级加密标准高级加密标准(advanced encryption standard,AES)是美国国家标准和技术研究所于 2001 年发布的分组加密标准.AES 根据密钥长度分为三个版本:AES-128、AES-192 和 AES-256,本文的研究对象为AES-128,即密钥长度是 128 比特.AES-128 一共需要执行 1

20、0 轮,每轮有 4 个步骤:字节代换、行移位、列混合和轮密钥加.除此之外,在加密的开始还有一个轮密钥加的操作,并且在第 10 轮中跳过一次列混合操作.OpenSSL 中采用 T 盒的方式实现 AES 算法.所谓 T 盒,就是将字节代换和列混合操作融为查表运算.OpenSSL 的 AES 加密实现中,有 4 个 T 盒参与运算,分别是 Te0,Te1,Te2,Te3.每个 T 盒都是一个 8 比特输入、32 比特输出的查找表.Te 盒与 S 盒的关系如下所示(这里的*表示伽罗华域上的乘法):Te0 x=Sx 02,01,01,03,Te1x=Sx 03,02,01,01,Te2x=Sx 01,0

21、3,02,01,Te3x=Sx 01,01,03,02.(1)对应地,在解密操作中,OpenSSL 中使用了 5 个 T 盒:Td0、Td1、Td2、Td3、Td4.其中,前 4 个Td 盒用于前 9 轮解密,Td4 盒只用于最后一轮的解密.Td 盒与逆 S 盒的关系如下所示:Td0 x=S1x 0e,09,0d,0b,Td1x=S1x 0b,0e,09,0d,Td2x=S1x 0d,0b,0e,09,Td3x=S1x 09,0d,0b,0e,Td4x=S1x 01.(2)可以看到,相较于加密,解密时多了一个 Td4 盒,并且这里的 Td4 盒与 AES 的逆 S 盒是完全一样的.这是因为不论

22、 AES 的加密还是解密,其第 10 轮都缺少一次列混合(逆列混合)操作,从而导致在第 10 轮时需要使用原始 S 盒(逆 S 盒)的值,由于加密时列混合变换的矩阵中存在 01,由 S 盒变为 Te 盒时会与01 进行相乘,从而将原始 S 盒的值进行了保留,在第 10 轮加密过程中可以直接使用;而解密的逆列混合变换的矩阵中没有 01 存在,故而生成的 Td 盒中无法保留原始逆 S 盒的值,因此需要多一个 Td4 盒来保留原始逆 S 盒的值,从而在第 10 轮解密时使用.臧首金 等:针对分组密码工作模式的基于持久性故障的碰撞攻击1212.2分组密码的工作模式常用的分组密码加密工作模式有 5 种:

23、ECB 模式和 CBC 模式被称为分组模式,而 CFB 模式、OFB模式和 CTR 模式被称为流模式.此外,分组密码还被用来构造消息认证模式,例如著名的 CMAC.2.2.1电子密码本模式(electronic code book,ECB)ECB 模式是最简单的一种分组密码工作模式,各个明文分组分别独立加密成相应的密文分组.假设要加密的消息为 M=M1M2,则采用 ECB 模式的密文为 Ci=Enc(K,Mi),其解密的过程为Mi=Dec(K,Ci),i=1,2,.出于安全考虑 ECB 模式被建议只有一个明文分组时使用,所以下文中假设 ECB 模式加/解密过程都只输入 128 比特(一块)明/

24、密文分组.2.2.2密码分组链接模式(cipher block chaining,CBC)CBC 是一种反馈机制加密模式,它首先将当前明文分组和前一个明文分组对应的密文进行异或,然后再进行加密.这样,每个密文分组不仅依赖于当前的明文分组,而且依赖于前面所有的明文分组.假设要加密的消息为 M=M1M2M3,则采用 CBC 工作模式的密文为 Ci=Enc(K,MiCi1),其解密的过程为 Mi=Dec(K,Ci)Ci1,i=1,2,.其中 C0为一个随机的初始化向量,或者叫 IV 值.2.2.3密码反馈模式(cipher feedback block,CFB)CFB 模式是一种流工作模式,即先对初

25、始向量 IV 进行加密生成密钥流,然后与明文进行异或得到密文,之后,前一个密文分组会被送回到加密算法的输入端,CFB 模式的密文为 Ci=Dec(K,Ci1)Mi,其中 C0同样为一个随机的初始化向量 IV.其解密过程同样生成密钥流与密文异或:Mi=Enc(K,Ci1)Ci,i=1,2,.2.2.4输出反馈模式(output feedback block,OFB)OFB 也是一种流工作模式,与 CFB 不同,它反馈前一块密钥流而非密文到加密模块.OFB 模式可以定义为:K0=IV,Ki=Enc(K,Ki1),Ci=Mi Ki.(3)其中,i=1,2,n 1.解密时生成密钥流的方式不变,最后一步

26、变为 Mi=Ci Ki.2.2.5(计数器模式 counter,CTR)CTR 模式也是一种流工作模式,它将一个瞬时值 Nonce(大多采用消息编号和某些附加数据生成,以保证唯一性)与计数器值连接起来,然后使用加密模块对其进行加密生成密钥流,CTR 模式的定义如下:Ki=Enc(K,Noncei),Ci=Mi Ki.(4)其中,i=1,2,n 1.与 OFB 模式一样,CTR 模式解密时生成密钥流的方式不变,最后一步同样变为 Mi=Ci Ki.2.2.6CMAC消息认证码(message authentication code,MAC)用于检测对消息的篡改.在 OpenSSL 中,CMAC为基

27、于 AES 的消息认证模式.假设要认证的消息为:M=M1M2Mn(若最后一块消息的长度不足 16 字节,则需要使用 100 进行填充),其中 n 为消息块个数.则其计算 MAC 的过程为:H0=IV,Hi=Enc(K,Mi Hi1),MAC=Hn.(5)其中,i=1,2,n 1.122Journal of Cryptologic Research 密码学报 Vol.10,No.1,Feb.20232.3PFCA攻击者首先在 S 盒中某位置(记为 x),注入持久性故障,设 x 位置的原值为 v,注入故障后的值变为v,因为字节代换操作是一一映射,故而在 S 盒中一定存在 x位置的值为 v.即在注入

28、故障前:Sx=v;注入故障后:Sx=Sx=v.因此在注入故障之后,S 盒中存在着两个完全相同的值.然后,攻击者固定明文的第 115 个字节,将第 0 个字节遍历所有可能的 256 种取值,一定会存在两条明文 P0,i和 P0,j的第 0 个字节的值分别等于 k00 x 和 k00 x,这里的 k00表示初始密钥 K0的第 0 个字节.所以两条明文的这两个字节经过字节代换之后分别映射到了相同的值 v,如图1所示.图 1 PFCA 的主要原理Figure 1 Basic idea of PFCA此外,由于这两条明文的其它字节都两两相同,因此,在第一轮的字节代换之后这两条明文对应的状态也是相同的,最

29、终被加密为两条完全相同的密文.同样地,将明文的其它 15 个字节也分别遍历 256 种可能的取值,攻击者都可以观测到碰撞密文.所以当遍历 4096 条明文后,记为 Pi,j|i=0,1,15;j=0,1,255,攻击者能收集到 16 对碰撞密文,记作(Ci,Ci)|i=0,1,15.随后攻击者从第 i 对碰撞密文对应的明文对中分别提取出第 i 个字节,记作 pii,pii(i 1,2,15),可得到如下两条碰撞链:p00 k00=p11 k10=p1515 k150=x,(6)p00 k00=p11 k10=p1515 k150=x.(7)攻击者从两条碰撞链中任选一条,进行密钥恢复攻击,此时搜

30、索复杂度降为 O(28).但是对于第 i 对明文字节 pii,pii(i 1,2,15),攻击者需要判定哪个字节属于选定碰撞链.对于多字节的故障,文献 10 中利用汉明距离模型构造了一个过滤算法,多数情况下可以唯一判定碰撞链且复杂度可忽略;而对于单字节故障,攻击者需要进行穷举搜索,故而最坏情况下的攻击复杂度增加为 O(223)次加密.3工作模式的持久性故障攻击本节将详细介绍 ECB 模式、CBC 模式、CFB 模式、OFB 模式、CTR 模式及 CMAC 的基于持续性故障的攻击方法,在此之前,先给出攻击的基本前提假设.3.1攻击假设(1)攻击者能够向工作模式中 AES 加/解密模块使用的查找表

31、中注入持久性故障;(2)攻击者能够进行选择明文(或密文)攻击,即攻击者可以将特定的明文(或密文)输入到加密(或解密)设备中,并且在加解密过程中密钥不发生改变;(3)攻击者能够收集加密得到的密文(或 MAC 值)和解密得到的明文;(4)攻击者能够篡改信道上传输的密文及 IV 值.臧首金 等:针对分组密码工作模式的基于持久性故障的碰撞攻击1233.2攻击原理3.2.1攻击 ECB 模式ECB 模式加密和解密过程分别使用 AES 的加密模块和解密模块,所以可以分别从 ECB 加密和解密两个模块进行攻击.攻击 ECB 模式的加密模块时,首先在 AES 的 S 盒中注入一个持久性故障,攻击者直接将 PF

32、CA 构造的明文集合 Pi,j|i=0,1,15;j=0,1,255 分别进行 ECB 加密,即:Ci,j=ECBENC(Pi,j),(8)然后收集产生的密文碰撞信息,构造碰撞链继而搜索恢复出密钥.同样地,攻击 ECB 模式的解密模块时,可以在 AES 的逆 S 盒中注入持久性故障,然后将上述明文集合输入 ECB 模式解密模块,通过收集产生的碰撞信息来恢复密钥.3.2.2攻击 CBC 模式对于 CBC 模式,其加密模块使用的 IV 随消息进行更换且需要满足随机性和不可预测性,所以受 IV值的影响无法构造出攻击所需的明文.但是 CBC 模式传送消息时需要将 IV 和密文同时传给接收方,因此可以在

33、密文传递时将 IV 和密文进行篡改,继而构造密文集合输入 CBC 模式解密模块.首先向 AES 的逆 S 盒中注入一个持久性故障.其次,将所有的 IV 值固定为相同的值 IVs,即IV=IVs.然后随机选择一条密文 M=M0M1Mn,将其中的某个分组 Ml(l 0,1,n)替换为 Pi,j,构造出的密文集合为:Mi,j=M0M1Ml1Pi,jMl+1Mn,(9)最后将每对(IVs,Mi,j)用 CBC 模式进行解密,如图2所示.图 2 攻击 CBC 模式输入的密文Figure 2 Attack ciphertext input in CBC mode由于输入的密文只有第 l 块数据不相同,且

34、CBC 模式错误只传播一块,所以解密后的 4096 条消息Di,j中第 l 块和 l+1 块数据各不相同,且第 l 块数据 Dli,j会发生碰撞,而 Di,j的其它分组都完全相同.因此通过收集 Dli,j的碰撞信息进行密钥的恢复,其中 i=0,1,15;j=0,1,255.在这里可以将密文 M 的任意一个分组替换为 Pi,j,只需要保证所有密文中替换的位置一样即可;当然,也可以将密文固定,将 IV 替换为不同的 Pi,j,同样能够收集到碰撞信息.需要注意的是,攻击 CBC 模式解密模块求得的 128 比特密钥是解密的第一轮使用的子密钥,也就是加密的第 10 轮使用的子密钥,需要先将子密钥恢复成

35、初始密钥再进行密钥的验证.3.2.3攻击 CFB 模式由于 CFB 模式中密文会作为反馈输入 AES 加密模块,因此需要攻击 CFB 模式的解密流程,并且在密文传递时将 IV 值(或连续 128 位密文块)进行篡改,例如,将 IV 值篡改为 PFCA 的选择明文Pi,j(i=0,1,15;j=0,1,255),将所有密文的第一分组都固定成相同的值(例如 128 比特“0”),如图3所示.124Journal of Cryptologic Research 密码学报 Vol.10,No.1,Feb.2023图 3 攻击 CFB 模式输入的密文Figure 3 Attack ciphertext

36、input in CFB mode由于每次解密时 IV 值已经替换为 PFCA 的选择明文 Pi,j,因此第一轮产生的密钥流 K0中会发生碰撞,又由于需要解密的密文都相同,因此可以在第一个分组 M0中收集到碰撞信息,进而使用 PFCA 恢复密钥.3.2.4攻击 OFB 模式OFB 模式加解密时也使用 IV 值,但是 AES 加密算法的输入只与 IV 值有关.故而在密文传递时将IV 值进行篡改.首先向 AES 的 S 盒中注入一个持久性故障;其次,将所有密文的第一分组都固定成相同的值(例如128 比特“0”);然后每次解密时,将初始向量 IV 替换为 Pi,j,如图4所示.图 4 攻击 OFB

37、模式输入的密文Figure 4 Attack ciphertext input in OFB mode最后,与攻击 CFB 模式一样,在解密得到的第一个分组中寻找碰撞信息,使用 PFCA 恢复密钥.3.2.5攻击 CTR 模式CTR 模式与 OFB 模式类似,加密模块的输入与明文和密文无关,只与随机选取的 Nonce 和消息长度有关.因此,对 CTR 模式实施 PFCA 攻击只能篡改解密流程输入的 Nonce 字段.但是 Nonce 字段的长度有限,最长为 64 位,所以密钥恢复攻击的复杂度只能降低到 O(264+8).3.2.6攻击 CMAC 模式攻击 CMAC 时,同样构造 4096 条式

38、(7)所示的消息,这里也可以将长消息的任意分组替换为 Pi,j.然后在 S 盒中注入持久性故障,最后将 Mi,j输入 CMAC 认证算法,如图5所示,即:MACi,j=CMAC(Mi,j),(10)同理,Pi,j会导致中间状态发生碰撞,而由于其他的输入消息分组都相同,因此,即使 CMAC 不会输出中间值,仍然能够通过最后的 MACi,j 观察到碰撞信息,进而可以恢复密钥.臧首金 等:针对分组密码工作模式的基于持久性故障的碰撞攻击125图 5 攻击 CMAC 输入的消息Figure 5 Attack messages input in CMAC3.3针对 OpenSSL 中工作模式实现的 PFC

39、A文献 10 在 AES 的 S 盒中注入持久性故障,通过选择明文攻击,在持久性故障的影响下,选择的明文会在第一轮的字节代换操作时发生碰撞,并且碰撞信息会传递到最终的密文中.而 OpenSSL 中的 AES加密和解密模块使用 T 盒实现.由于 OpenSSL 中 AES 的加密模块只使用了 4 个 Te 盒,而解密模块除了前 9 轮 4 个 Td 盒外,最后一轮使用一个独立的 Td4 盒.因此传统的持久性故障模型不能在 OpenSSL中发挥作用.基于 OpenSSL 中 T 盒的特点,使用置零故障和随机故障这两种故障模型对 OpenSSL 进行攻击.攻击目标同样是第一轮的字节代换操作,最后求得

40、的碰撞链与式(6)和(7)保持一致.3.3.1置零故障(stuck at 0)所谓置零故障,就是将计算过程中指定位置的值全部置为零.如前所述,将 OpenSSL 中 4 个 Te 盒(或 Td 盒)的相同位置都置为零.例如:本文的一次模拟实验中将 4 个 Te 盒的首元素全部置为 0,即注入的故障位置 x 是 0 x00,那么在注入故障前:Te00 x00=0 xc66363a5,Te10 x00=0 xa5c66363,Te20 x00=0 x63a5c663,Te30 x00=0 x6363a5c6.在注入故障后:Te00 x00=Te10 x00=Te20 x00=Te30 x00=0

41、x00000000.而在 4 个 Te 盒中,还分别存在输入值为 0 x52、输出值为0 x00000000 的映射关系,即:Te00 x52=Te10 x52=Te20 x52=Te30 x52=0 x00000000.因此,在注入故障后,对于每个 Te 盒,都会有:Te00 x00=Te00 x52=0 x00000000,Te10 x00=Te10 x52=0 x00000000,Te20 x00=Te20 x52=0 x00000000,Te30 x00=Te30 x52=0 x00000000.(11)另外,也可以向 Te 盒中注入多个置零故障,即将 4 个 Te 盒中的多个位置都修

42、改为全 0.同样地,若对解密的 4 个 Td 盒(Td0 Td3)注入置零故障,也可以达到上述相同的效果.3.3.2随机故障随机故障注入的目标位置为 AES 解密过程中使用的 Td4 盒,注入值为任意值,因此更容易在实际中实现.例如:本文的一次仿真实验中,模拟注入故障的位置 x 为 0 x00(也就是 Td4 盒的第一个位置),将0 x00 位置原值 0 x52 改为 0 x00.同样,在 Td4 盒中,0 x99 位置的值也为 0 x00.因此,注入持久性故障后,0 x00 和 0 x99 这两个值经过 T 盒代换后,都会输出 0 x00,即:Td40 x00=Td40 x99=0 x00.

43、(12)同样地,还可以在 Td4 盒中多个位置注入随机故障,则注入故障后,Td4 盒中会存在多组相同的值.3.3.3攻击 OpenSSL 中的 ECB 模式对于 ECB 模式,根据 OpenSSL 实现方式的特点,分别采用置零故障模型和随机故障模型进行攻击.方法一:对于 ECB 模式的加密模块,可以通过在 4 个 Te 盒中注入置零故障,从而收集到碰撞进行126Journal of Cryptologic Research 密码学报 Vol.10,No.1,Feb.2023PFCA 攻击;而对于解密模块,与加密模块类似,通过在 4 个 Td 盒注入置零故障,也可以收集到碰撞信息进行 PFCA

44、攻击.方法二:在 AES 解密模块 Td4 盒中注入随机故障,然后利用先加密后解密的方法构造 ECB 模式解密模块的输入密文集合:首先将 Pi,j|i=0,1,15;j=0,1,255 分别进行 ECB 加密得到密文集合 Ci,j=ECBENC(Pi,j)|i=0,1,15,j=0,1,255.再分别对密文 Ci,j=ECBDEC(Pi,j)|i=0,1,15,j=0,1,255 进行解密,最终得到明文 Pi,j|i=0,1,15;j=0,1,255.由于在 Td4 盒中注入了持久性故障,因此对 Ci,j再进行 ECB 解密得到的 Pi,j会与原来的 Pi,j不一致.若注入的是随机单字节故障,

45、那么 Pi,j中会有一个字节与对应的明文 Pi,j不相同,如图6所示.图 6 在解密过程中注入故障导致明文出现错误Figure 6 An injection fault during decryption resulted in a plaintext error事实上,由于 AES 的解密过程逆序后与 AES 的加密过程完全一样,并且 Td4 盒只在解密的第 10 轮中使用.因此,若将解密过程逆序来看,相当于在加密的第一轮发生了故障.即可以看作是 Pi,j经过正常的加密而 Pi,j经过已经注入故障的加密都得到了相同的密文 Ci,j,其碰撞原理便与 PFCA 相同,因此可以采用相同的思路进行攻

46、击.值得一提的是,采用这种先加密后解密的方式,攻击者已经得知是在解密时发生了故障,因此能够自然地分辨出式(5)和(6)中 pii与 pii,从而大大降低了攻击的复杂度.3.3.4攻击 OpenSSL 中的 CBC 模式、CFB 模式、OFB 模式、CTR 模式和 CMAC 模式由于只能对 CBC 模式的解密模块进行攻击,因此对于 OpenSSL 中的 CBC 实现可以采用在 4 个 Td盒中注入置零故障从而使用 PFCA 攻击.CFB 工作模式中只使用了加密模块,因此可以采用在 AES 加密时使用的 4 个 Te 盒中注入置零故障进行 PFCA 攻击.OFB 模式中也只使用了加密模块,故而同样

47、采用向 4 个 Te 盒中注入置零故障的方式进行 PFCA 攻击.同样地,CTR 模式中也只使用了加密模块,故而采用向 4 个 Te 盒中注入置零故障从而实行 PFCA,但是由于 CTR 模式的 Nonce 中可以篡改的长度有限,因此 PFCA 攻击的复杂度大大增加,以至无法在PC 中完成.CMAC 只使用了 AES 的加密模块,因此对于 OpenSSL 中实现的 CMAC,可以采用在 4 个 Te 盒中注入置零故障来进行 PFCA 攻击.4仿真实验我们在计算机上对 OpenSSL 中 ECB、CBC、CFB、OFB 和 CMAC 工作模式的软件实现仿真注入(置零或随机)持续性故障并进行编译,

48、然后编写程序实现构造输入消息并恢复密钥的攻击过程.仿真实验在操作系统为 macOS11.3 的笔记本电脑上进行,处理器型号为 2 GHz 四核 Intel Core i5,内存型号为 16GB 3733 MHz LPDDR4X,攻击的 OpenSSL 版本号为 OpenSSL-1.0.2p.4.1编译并安装 OpenSSL(1)在命令行中配置 OpenSSL 安装路径:sudo./config prefix=/usr/local/OpenSSL-no-asm;(2)注入持久性故障(置零故障或者随机故障);(3)使用 make 命令进行编译;(4)编译结束后,使用 sudo make insta

49、ll 命令进行 OpenSSL 的安装.臧首金 等:针对分组密码工作模式的基于持久性故障的碰撞攻击127安装完成即可在实验项目中导入 OpenSSL 使用,此时加解密模块为已经注入持久性故障的 AES 算法.4.2实验步骤本文的仿真实验分为五部分进行:第一部分举例描述了使用 PFCA 攻击 T 盒实现 AES 的详细过程;第二部分是使用置零故障模型攻击 ECB 的加密模块和 CMAC;第三部分是使用随机故障模型对 ECB 的解密模块进行攻击;第四部分是使用置零故障模型对 CBC 模式的解密模块进行攻击;第五部分是使用置零故障模型攻击 CFB 和 OFB 模式.4.2.1攻击 T 盒实现的 AE

50、S 的示例步骤一:向 4 个 Te 盒中的首元素注入置零故障;例如注入故障后,Te00 x00=Te10 x00=Te20 x00=Te30 x00=0 x00000000;此外,Te 盒中还存在 Te00 x52=Te10 x52=Te20 x52=Te30 x52=0 x00000000;步骤二:将 Pi,j进行加密,把密文存储为 Ci,j,复杂度为 O(212)加密:i=0 时:00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00d5 88 81 0c 93 86 ee 7e 82 e9 76 ac 43 f7 aa 1f01 00 00 00

展开阅读全文
相似文档                                   自信AI助手自信AI助手
猜你喜欢                                   自信AI导航自信AI导航
搜索标签

当前位置:首页 > 品牌综合 > 临存文档

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        获赠5币

©2010-2024 宁波自信网络信息技术有限公司  版权所有

客服电话:4008-655-100  投诉/维权电话:4009-655-100

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :gzh.png    weibo.png    LOFTER.png 

客服