白盒算法的核心思想是将密钥信息混淆到算法中,让攻击者无法解析出算法的内部细节,也无法还原出密钥的一种算法(实际上还是有方法的)。通常来说白盒AES的实现有三种方式:Chow等人的查找表方式、Bringer等人的插入扰乱项的方式、Biryukov等人的多变量密码的方式,下面进行简单的介绍三种方式: 查找表技术是由Chow等人在论文《White-Box Cryptography and an AES Implementation》中最早提出的白盒加密技术方案,可基于DES或AES等分组密码算法实现,属于标准密码算法白盒化范畴。任何有限函数理论上都可转化为一个包含所有可能的输入和输出的查找表。举一个极端的例子,如果将AES-128加密用一个简单的查找表来表示,即先将128比特密钥固定,每种可能的128比特明文输入(共2^128种可能)一一对应了一种128比特密文输出,那么AES-128可以用一个5.4×10^39字节(2^128×128比特)的查找表替换。核心思想是针对给定的密钥,把 AES 运算过程的每一轮操作拆分成一个个小模块,之后对每个模块进行混淆置乱编码, 最后将每个模块所有可能的输入输出做成一个查找表,用查找表来表示这些模块。白盒 AES 的算法执行过程就等效转换成对一个个查找表进行查找的过程。攻克:在 2004 年,Billet 等人在论文《Cryptanalysis of a White Box AES Implementation》中提出了一个非常有效的 BGE 攻击方法, 他们选择某些特定的查找表,合并成一个可以用输入输出表示的函数,使用代数的方法去掉其中的非线性部分,提取出隐藏在T-Box 中的密钥。这个攻击在 2008 年由 Michiels 等人改进为一种通用攻击方法《Cryptanalysis of White-Box Implementations》,可以对类似算法的白盒实现进行攻击。2013 年 Lepoint 等人在《Another Nail in the Coffin of White-Box AES Implementations》中提出了一种更加有效的攻击方法,能够以 2的22次方复杂度恢复 AES 的密钥。 2006 年 Bringer 等人中提出一个新 AES 白盒实现方法《White Box Cryptography: Another Attempt》,该方法使用同构多项式问题。其主要思想是通过增加额外的扰乱方程和线性编码,成功扰乱了原始的代数结构,增强了白盒实现的安全性,从而使得针对代数结构进行的攻击变得困难。攻克:2010 年 Mulder 、Roelse 和 Preneel提出了一种针对 Xiao 和 Lai 提出的白盒 AES 实现的攻击方法《Cryptanalysis of the Xiao-Lai White-Box AES Implementation》,攻击方法的核心是通过分析白盒实现中的查找表和编码关系,提取出隐藏的密钥信息,能够以较低的复杂度恢复出等价密钥。 在各种白盒实现方案被相继攻破之后, 2014 年, Alex Biryukov 等人提出基于 ASASA 结构的通用白盒密码设计方法《Cryptographic Schemes Based on the ASASA Structure: Black-Box, White-Box, and Public-Key》。这种设计方式通过插入扰乱项和扩展 S 盒,分为强白盒密码设计和弱白盒密码设计两类,成功增强了白盒实现的安全性。ASASA 结构强白盒密码设计弱白盒密码设计攻克:ASASA 结构(Affine-Sbox-Affine-Sbox-Affine)通过交替的仿射变换和非线性变换(S-box)来隐藏密钥和加密逻辑。然而,这种结构在某些情况下仍然可能被攻破,特别是当攻击者能够利用其代数特性或统计特性时,针对 ASASA 结构的攻击方法主要有以下几种:代数攻击 统计攻击分解攻击后续的研究者提出了多种攻击方法,揭示了该结构的潜在弱点,感兴趣的可自行查阅:基于查找表实现方案的理论基础已经有很多详细且成熟的文章,其中部分文章也提供代码参考,在此不做过多赘述,读者可自行阅读以下文章(建议先阅读至少一两篇再回来):128位AES算法加密、解密文件流程及C语言实现【密码学】一文读懂白盒AES(Chow方案)(一)AES白盒加密解读与实现(Chow方案)Differential Fault Analysis on White-box AES Implementations通过以上文章的分析,我们将加密流程拆分成以下的过程:接下来我们分步骤来具体实现一下的流程。首先必不可少的是密钥扩展算法,将初始密钥扩展为 176 字节的轮密钥,轮密钥是后续流程的基础,提供expandedKey函数以供参考:SubBytes 操作 AddRoundKey 操作在白盒加密中,SubBytes 和 AddRoundKey 可以合并为一个查找表,称为 TBoxes。TBoxes[i][j][x] 表示第 i 轮、第 j 个字节、输入为 x 时的输出,计算公式为:在 TBoxes 中,密钥被嵌入到查找表的生成过程中,攻击者即使能够访问 TBoxes,也无法直接提取密钥,因为密钥已经与 S 盒和随机数据混淆了,下面给到生成 TBoxes 的关键代码:- ShiftRows: 通过 shiftTab 数组实现- SubBytes 和 AddRoundKey: 通过 sBox 和 expandedKey 实现,并存储在 TBoxes 中- 混淆: 使用 ioInvTable 对输入数据进行随机混淆MixColumns 是 AES 加密中的一个线性变换步骤,它对状态矩阵的每一列进行变换,每一列的 4 个字节通过矩阵乘法与一个固定的矩阵(称为 MixColumns 矩阵)进行运算。MixColumns 操作可以表示为以下矩阵乘法:- c0, c1, c2, c3 是输入列的 4 个字节。- c0', c1', c2', c3' 是输出列的 4 个字节。- 矩阵中的元素(如 02、03)是有限域 GF(2^8) 中的乘法系数。在白盒化的过程中,MixColumns 操作通过 TyiTableBoxes 来实现,TyiTableBoxes 的值直接从 TyiTables 中获取,TyiTables 已经预先计算了 MixColumns 的结果。其中TyiTables 是一个 16x256 的查找表,生成过程大致如下:- gMul 函数实现了有限域 GF(2^8) 中的乘法- ioInvTable 是一个随机混淆数据- TyiTables 的每个表项是一个 32 位整数,包含了 MixColumns 操作的结果有了TyiTables之后,我们来看一下TyiTableBoxes的具体逻辑,TyiTableBoxes 是一个 9x16x256 的查找表,用于替换 MixColumns 操作。它的生成过程如下:TyiTableBoxes[i][j][x] 表示第 i 轮、第 j 个字节、输入为 x 时的 MixColumns 操作结果Mi
...(已截断)
---
来源: 看雪论坛
原文链接: https://bbs.kanxue.com/thread-285052.htm
[原创]白盒AES算法详解(三)
494 浏览
2 回复
感谢分享
怎么私信不了,