对OCB算法侧信道泄漏位置的细粒度分析

VSole2023-02-07 10:09:41

背景介绍

在CHES 2022会议上,Berti等人对OCB3算法的侧信道泄漏位置进行了细粒度分析,该算法是CAESAR竞赛获胜的算法之一。首先,作者发现可以使用DPA方法对算法中的某些密码模块(初始化模块或相关数据处理)进行攻击;接着,假设上述描述的密码模块受到了保护,此时仍可以对其他的分组密码模块进行攻击,一种方法是使用未知输入的DPA攻击,更有效的方法是利用连续加密模块之间,输入的白化值的水平关系进行DPA攻击;最后,作者考虑了当所有的密码调用块都受到了保护,但针对线性操作可以进行SPA,进而获取白化值的信息,并证明恢复白化值会对OCB3算法的机密性和完整性造成威胁[1]

OCB3算法

1、OCB3算法结构

图1为OCB3算法的结构,算法的输入为消息m,消息分为一些块mi分别使用加密块BC加密生成密文块。这里使用AES-128初始化BC,故将消息m分为128比特的mi。

用户需要输入nonce使用初始化函数,得到δ0,然后使用更新函数Inc计算其余的δi。每个消息块mi在进入BC前,都需异或上δi,在经过BC的加密计算后,再次异或δi,生成密文块。对于最后一个密文块ml,若ml是128比特,则按照正常的BC加密,若ml小于128比特,则需要经过填充的ml异或BC(δl-1⊕l*),其中l*的定义见第2节。对于认证来说,需要使用消息的校验和生成一个标签τ,具体的计算过程见图1中最后一个BC块的计算。

若对关联数据进行处理,处理方式与消息的处理方式基本一致,用关联数据块代替消息块。然而,在消息处理的情况下,δ0的初始化值取决于随机数的加密;在关联数据处理的情况下,δ0的初始化值始终为0。

图1 OCB3算法结构

2、初始化函数更新函数

初始化函数的主要目的是生成白化值δ0,算法的主要流程如下图2所示。该算法主要分成两个部分,第一部分是通过用户输入的nonce值,计算得到中间值top。第二部分是将top输入到BC块中,使用密钥加密得到ktop。

图2 初始化函数(Init)流程

更新函数的主要算法流程如下图3所示,其中doule(x)表示在有限域上x的2倍,ntz(x)表示x的二进制表示尾部0的个数。该算法主要分为两个部分,第一部分计算得到l0=4*BCk(0),第二部分是使用初始化函数中得到的δ0,利用公式δii-1⊕lnte(i)计算δi

图3 更新函数(Inc)流程

泄漏分析

1、对无防护的OCB3算法进行侧信道攻击

(1)对OCB算法的初始化函数进行攻击:

图2为初始化函数流程,其中ktop=BCk(top)泄漏了密钥信息,可以用DPA进行攻击。在这里为了计算白化值,使用用户随机输入的nonce和密钥进行加密,其中加密块的输入是已知可控随机的,符合DPA攻击的条件。

(2)针对关联数据处理的DPA攻击:

在对关联数据处理时,δ0的初始化值始终为0,则说明第一个BC块的输入δ1始终为固定的数。则可以通过两步DPA完成攻击,第一步,攻击BC块加密的第一轮,可以得到δ1⊕k,第二步,攻击BC块加密的第二轮,得到第二轮的子密钥,推导得到密钥。

2、对安全初始化的OCB3算法进行侧信道攻击

假设在1节中描述的初始化函数中的泄漏被很好的进行了防护,作者仍找了可以进行攻击的位置,即计算密文需要的加密块BC,这里的攻击难度是BC的输入δi是未知的。

(1)基础的DPA攻击

处理这个问题最直观的想法是将δi当作掩码值进行处理,选择两处攻击位置。第一处是BC块的输入值即δi⊕mi,第二处是第一轮S盒的输出,可以得到δi⊕mi⊕k。

(2)改进的DPA攻击

在基础DPA攻击中,需要波形条数大大增加,为了降低所需的数据复杂度,提出了改进的DPA攻击。

由于δii-1⊕lnet(i),故BC的输入可以全部转换为仅与δ0相关的输入,下图4为转换结果。又因为一次加密过程中的δ0是一样的,故可以将δ0作为密钥的一部分,即假设h=δ0⊕k0。在将输入转换的过程中,会产生多余的值,该部分也应该被猜测,由于li=double(li-1),故若增加l0到ln,则时间复杂度从28增加至216+n。具体的算法流程如下图5所示。

图4 BC输入的转换结果

图5 改进的DPA攻击流程

(3)实验结果

在ARM Cortex-M0上实现OCB3算法,为了更加精确,作者通过计算中间值得到信噪比SNR的值,以此确认波形中的兴趣点。分别使用基础的DPA攻击和改进的DPA攻击,得到如下图6所示的实验结果。

其中x轴为需要的波形条数,y轴为攻击成功的准确率。可以看出,使用基础的DPA攻击方法,在攻击成功率为100%时,大约需要125条波形,而改进的DPA方法,在攻击成功率为100%时,大约需要10条波形,改进的DPA方法使用的波形数量更少。

图6 两种方法进行攻击的实验结果

3、对安全加密块的OCB3算法进行侧信道攻击

当第1、2节所描述的泄漏位置均加以防护之后,即与密钥相关的计算均加上了防护,此时,无法再通过侧信道的方法获取密钥的信息。作者证明若得到OCB3算法中的l0值,会对算法的安全性和机密性造成很大的威胁,具体的证明过程见该论文的6.3、6.4节。此处不再给出详细证明过程,下面对如何使用侧信道的方法获取l0值进行介绍。

此时可以利用的泄漏位置是δii-1⊕lnet(i)和BCk(input)=δi⊕mi。因为ntz(x)表示x的二进制表示尾部0的个数,故假设当前加密块为n个,则使用到l0的次数为n/2,同时利用l0、l1…的关系进行SPA,重新组合它们之间的泄漏信息,获取更加精准的l0的值,具体的算法流程如下图7所示。

图7 使用SPA猜测l0的流程

总结

本文作者就“OCB中的所有操作都需要保护吗?如果需要,它们需要相同级别的保护吗?”的问题展开讨论,作者通过展示针对不同保护级别的OCB的几次攻击来回答这个问题。首先,作者表明,可以针对初始化函数和关联数据的处理进行最简单的DPA攻击。接下来,假设第一级保护可以防止上述提到的攻击,作者对用于生成密文块的加密块进行了攻击,可以使用两种方法,第一种是简单的将白化值作为掩码进行二阶DPA攻击,同时还提供了一种改进的(一阶)DPA攻击方法,以更高的(时间)密钥猜测复杂度为代价,降低了二阶攻击的数据复杂度。最后,作者考虑了这样一种情况,即所有的分组密码块都受到了强有力的保护。作者表明,使用SPA的方法可以得到白化值l0,该数值的恢复会对OCB3算法的完整性和机密性造成威胁。

参考资料

[1] Berti, F., S. Bhasin, J. Breier, X. Hou, R. Poussier, F.-X. Standaert, and B. Udvarhelyi. “A Finer-Grain Analysis of the Leakage (Non) Resilience of OCB”. IACR Transactions on Cryptographic Hardware and Embedded Systems, vol. 2022, no. 1, Nov. 2021, pp. 461-8, doi:10.46586/tches.v2022.i1.461-481.

算法初始化
本作品采用《CC 协议》,转载必须注明作者和本文链接
单纯的通过覆盖seh handler跳转是不够的,我们首先需要bypass safeseh。
对OCB算法进行侧信道分析
请求头的参数非常容易,接下来看看请求体的参数。在signData函数内部下一个断点其中比较重要的是的函数,这里生成了一段字符串来计算签名这个函数和查询参数编码的功能类似,除了data参数,并且在最后拼接了一个定值字符串,这里用python进行简单的复现 复制代码 隐藏代码。拿到密钥后,直接使用sm4算法加密就可以得到了,现在所有参数都已经能够获取了,就可以发送请求了。
作 为 未 来 固 网、 移 动 统 一 的 核 心 网 络 架 构 平 台,IP 多 媒 体 子 系 统(IP Multimedia Subsystem,IMS)的安全性问题不容忽视。标识密码技术基于双线性对的标识密码算法,利用用户身份作为公钥,实现用户身份和公钥的天然绑定,构建相对简化、复杂度低的公钥密码体系,在数字签名、数据加密等方面具有天然的优势。
归获取属性对应的结构树节点构成的集合,输出明文,完成文件信息加密;最后在客户端利用 NFS 实现对云存储文件的访问控制。对比实验证明,新的控制方法在实际应用中提升了对不同用户的访问控制精度,且控制过程中时间开销更少,有效提高了控制效率。
定位把整个apk拖入jadx-gui后,初始化检索之后可以直接通过网址进行定位。!看到此处,它判断的这3个URL接口名称,恰是支付的,估计是它排除掉不是它的接口。结果就是,该HOOK代码并没有触发,也就是并没有执行到此处,但是我们发现当前class处几乎每个函数都是加密相关,我对他们进行了逐一HOOK,最终发现encypt函数有了反应。
环签名算法种类很多,大多数算法设计基于双线性对或大素数难分解,在安全性和运算速度方面有待提高。与基于椭圆曲线离散对数相比,双线性对的优势并不明显,因为它无法运用一样长度的密钥提供同样的安全性能。为了能够提升方案的安全性以及能够保证签名者身份的完全匿名性,基于SM2商用密码算法设计了一个新的环签名方案。利用单向函数设计签名算法,并对方案的安全性进行了严格证明,保证了新方案的正确性、安全性与隐匿性。
看过我另一篇文章的大家应该清楚花指令的还原,也可以用脚本,但是这里的花指令不多,故而我们直接手动来快速还原。弹出如下框,这是在IDA在质问我们人类智慧的一个警告,直接Yes就可以。至此,上述去花操作完成。然后,我们选中整个函数的部分0x401450~0x401566,然后按快捷键P,让整个函数能被IDA正确识别。
首先使用jadx对apk进行逆向。?搜索关键字 QDSign,可以直接找到对应的类,可以看到参数经过加密得到。??进一步跟踪,发现了c类中有如下三个so方法,还有3个loadlibrary,分别进行了hook,发现c-lib动态注册了sign,sos动态注册了s,没有发现crypto有动态注册。
物联网普遍存在遭受网络攻击类型多样化、没有安全保护标准、数据极易被截获或破解等安全风险,核心问题在于缺乏设备、服务提供者、应用、数据、交易等物的安全认证机制。 因此,有必要建立一种提供认证鉴权和数据保护的方案体系,建立物与物、物与人之间的信任。密码技术是解决核心安全问题的基础理论和技术,而传统的证书体系并不适应于物联网环境,基于商密SM9的算法才是目前物联网安全认证的最佳选择。 物联网安全平台
VSole
网络安全专家