保护白盒实现方案不受攻击转让专利

申请号 : CN201510111665.4

文献号 : CN105187364B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : W·P·A·J·米歇尔斯

申请人 : 恩智浦有限公司

摘要 :

一种执行将输入消息映射到输出消息的加密钥的密码运算的方法,其中密码运算包括至少一个回合,所述至少一个回合包括配置为将输入数据映射到输出数据的非线性映射函数,所述方法包括:将输入数据拆分为n个拆分输入数据,其中对输入数据的拆分基于输入消息的值而改变;将每个拆分输入数据输入到非线性映射函数中,以便获得n个拆分输出数据,其中n个拆分输出数据的组合表示输出数据,其中当将所述输入数据输入到非线性映射函数中时,得到所述输出数据。

权利要求 :

1.一种通过将输入消息映射到输出消息的密码系统执行加密钥的密码运算的方法,其中所述密码运算包括至少一个回合,所述至少一个回合包括配置为将输入数据映射到输出数据的非线性映射函数,所述方法包括:由所述密码系统将所述输入数据拆分为n个拆分输入数据,其中对输入数据的拆分基于输入消息的值而改变;

将每个拆分输入数据输入到所述非线性映射函数中,以便获得n个拆分输出数据,其中n个拆分输出数据的组合表示输出数据,其中当将所述输入数据输入到非线性映射函数中时,得到所述输出数据,其中所述将每个拆分输入数据输入到所述非线性映射函数中还包括:输入其中函数f对输入数据x执行密钥添加函数,αi是第i个拆分函数。

2.根据权利要求1所述的方法,其中将每个拆分输入数据输入到所述非线性映射函数中包括:将每个拆分输入数据输入到多个拆分映射函数中,其中对所述多个拆分映射函数进行异或得到所述非线性映射函数。

3.根据权利要求1所述的方法,其中拆分和输入步骤与所述加密钥的密码运算的当前回合有关,所述当前回合产生当前回合的输出,作为所述加密钥的密码运算的下一回合的输入,其中所述加密钥的密码运算对所述加密钥的密码运算的下一回合的输入重复所述拆分和输入步骤,所述输入数据被拆分为m个输入数据。

4.根据权利要求3所述的方法,其中下一回合中的m值大于当前回合中的n值,所述下一回合是加密钥的密码运算的第二到最后回合。

5.根据权利要求3所述的方法,其中当前回合中的n值大于下一回合中的m值,其中所述当前回合是加密钥的密码运算的第二回合。

6.根据权利要求1所述的方法,其中所述将输入数据拆分为n个拆分输入数据是前一回合的一部分,其中前一回合的输出成为当前回合的输入。

7.根据权利要求1所述的方法,其中对输入数据的拆分依赖于输入数据的多个不同部分。

8.根据权利要求1所述的方法,其中查找表实现所述加密钥的密码运算。

9.根据权利要求1所述的方法,其中有限状态机实现所述加密钥的密码运算。

10.一种通过将输入消息映射到输出消息的密码系统执行加密钥的密码运算的方法,其中所述密码运算包括至少一个回合,所述至少一个回合包括配置为将输入数据映射到输出数据的非线性映射函数,所述方法包括:由所述密码系统基于所述输入数据选择n对映射,其中所述n对映射包括第一映射和第二映射,第一和第二映射是所述非线性函数的自等价集合,其中当将输入数据输入到所述非线性函数中时,所述非线性函数的输出的第二映射的组合得到所述非线性函数的输出的已知函数;

通过针对n个第一输入映射的每个,计算输入数据的第一映射,来将输入数据拆分为n个拆分输入数据;

将n个拆分输入数据中的每个输入到所述非线性映射函数中以便获得n个拆分输出数据,其中将每个拆分输入数据输入到所述非线性映射函数中还包括:输入

其中函数f对输入数据x执行密钥添加函数,αi是第i个第一映射。

11.根据权利要求10所述的方法,其中将n个拆分输入数据中的每个输入到所述非线性映射函数中包括:将n个拆分输入数据中的每个输入到多个拆分映射函数中,其中对所述多个拆分映射函数进行异或得到所述非线性映射函数。

12.根据权利要求10所述的方法,其中选择、拆分和输入步骤与所述加密钥的密码运算的当前回合有关,所述当前回合产生当前回合的输出,作为所述加密钥的密码运算的下一回合的输入,其中所述加密钥的密码运算对所述加密钥的密码运算的下一回合的输入重复所述选择、拆分和输入步骤,其中,将输入数据拆分为m个输入数据。

13.根据权利要求12所述的方法,其中下一回合中的m值大于当前回合中的n值,其中所述下一回合是加密钥的密码运算的第二到最后回合。

14.根据权利要求12所述的方法,其中当前回合中的n值大于下一回合中的m值,其中所述当前回合是加密钥的密码运算的第二回合。

15.根据权利要求10所述的方法,其中所述将输入数据拆分为n个拆分输入数据是前一回合的一部分,其中前一回合的输出成为当前回合的输入。

16.根据权利要求10所述的方法,其中n个第一映射是仿射的。

17.根据权利要求16所述的方法,其中n个第二映射是仿射的。

18.根据权利要求10所述的方法,其中对输入数据的拆分依赖于输入数据的一个部分。

19.根据权利要求10所述的方法,其中对输入数据的拆分依赖于输入数据的多个不同部分。

20.根据权利要求10所述的方法,其中查找表实现所述加密钥的密码运算。

21.根据权利要求10所述的方法,其中有限状态机实现所述加密钥的密码运算。

22.根据权利要求10所述的方法,其中所述已知函数基于输入数据。

说明书 :

保护白盒实现方案不受攻击

技术领域

[0001] 本文所公开的多种示例实施例总体上涉及执行抗攻击的密码功能的安全软件组件。

背景技术

[0002] 互联网向用户提供了对数字内容进行访问的方便性和普遍性。由于互联网是强大的分发渠道(distribution channel),许多用户设备力图直接访问互联网。用户设备可以
包括个人计算机、膝上型计算机、机顶盒、支持互联网的媒体播放器、移动电话、智能电话、
平板、移动热点或能够访问互联网的任何其它设备。将互联网用作正版内容的分发媒介产
生了关于保护内容提供者利益的紧迫问题。越来越多的用户设备使用加载有适合软件的处
理器来运行,以便呈现(回放)诸如音频和/或视频等数字内容。对回放软件进行控制是强加
内容所有者利益的一种方式,包括可以使用内容的条款和条件。以前的许多用户设备是封
闭式系统。现今,越来越多的平台是部分开放的。可以假定一部分用户具有对硬件和软件的
完全控制并接入硬件和软件,其中硬件和软件提供对内容的访问,并且具有大量时间和资
源来攻击和避开任何内容保护机制。因此,内容提供者必须在恶意网络社区上向合法用户
传递内容,在所述恶意网络社区中,并非所有用户或用户设备是可以信任的。
[0003] 例如,安全软件应用一旦被调用就执行多种功能,例如用于保护并认证数字内容的密码功能。为了抵御攻击,这些算法必须是混乱的(隐藏的),以便防止对所述算法进行反
向工程和修改,或禁止获得特定用户安全信息。因此,可以通过由实现安全软件的处理器的
指令集限定的多种功能,执行安全软件应用功能。例如,模糊这些功能的一种方式是通过使
用查找表。
[0004] 内容提供者必须在恶意网络社区上向合法用户传递内容,在所述恶意网络社区上并非所有用户或设备是可以信任的。这样引起白盒密码学的开发。在白盒密码学情境下,假
定用户完全控制对内容提供访问的硬件和软件,并具有无限量的时间和资源来攻击和避开
任何内容保护机制。强加可以使用内容的条款和条件的安全软件代码应是防篡改的。数字
版权管理是安全软件应用的普通应用。对分布于用户设备上的受保护内容进行数字版权管
理的一般方法是使用例如DES(数据加密标准)、AES(高级加密标准)或使用其它已知加密原
理来对数字内容进行加密,并使用解密密钥来恢复数字内容。必须保护这些解密密钥以便
防止对受保护的内容进行未授权访问。
[0005] 依赖于加密的数字版权管理的弱点的两个主要方面包括强加可以使用内容的条款和条件的软件模块,以及密钥分布和处理。通常,软件模块强加要使用所述内容的条款和
条件。为了避开这些条款和条件的攻击者可以试图通过篡改软件模块的程序代码来实现该
目标。
[0006] 至于密钥分布,媒体播放器必须从许可数据库检索解密密钥,以便回放所述媒体。然后,媒体播放器必须将所述解密密钥存储在存储器的某处,以便对加密内容进行解密。这
样给攻击者留下了对所述密钥进行攻击的两个机会。首先,攻击者可以对许可数据库访问
功能进行反向工程,允许攻击者从所有许可数据库检索有用的密钥。在这种情况下,攻击者
不需要理解密码学功能的内部工作。其次,攻击者可以观察在内容解密期间对存储器的访
问,因此,攻击者可以检索所述解密密钥。在这两种情况下,所述密钥都被认为是缺乏抵抗
力的。
[0007] 广泛使用DRM和其它安全软件引起了对安全的、防篡改的软件的需要,安全的、防篡改的软件设法使利用软件的篡改变得复杂化。存在多种用于增加软件应用的防篡改的技
术。大部分的这种技术是基于通过在所述软件应用的控制路径和数据路径二者中添加随机
性和复杂性的面纱,来隐藏所包含的应用知识。这种技术的构思在于仅通过代码检查(code 
inspection)来使得提取信息变得更加困难。因此,更难以寻找例如处理对所述安全应用的
访问和准许控制的代码,并对其进行改变。
[0008] 如本文所用,白盒密码学包括在攻击者完全控制运行白盒密码软件的系统的环境下,执行密码功能的安全软件应用。因此,攻击者可以修改输入和输出,跟踪所述软件的运
算,在任何时刻采样并监控所述软件使用的存储器,甚至修改软件。因此,需要以防止公开
在所述安全功能中使用的安全信息的方式来执行安全功能。可以以多种方式来执行白盒密
码功能。这种方法包括:模糊(obscuring)软件代码;使用模糊对秘密信息的使用的复杂数
学函数;使用查找表;使用有限状态机;或执行密码功能并隐藏安全函数所需的秘密信息的
任意其它方法。白盒实现方案还可以包含包括抗调试和防篡改特性的组件。
[0009] 存在若干个原因使得密码算法的软件实现方案优于硬件实现方案。例如,这可以是以下情况:由于在密钥被泄露的情况下软件解决方案是可更新的,由于软件解决方案成
本较低,或由于应用开发者对实现白盒系统的硬件没有影响。

发明内容

[0010] 下文提出对多种示例实施例的简要概述。可能在以下概述中进行了一部分简化和省略,简化和省略是为了强调和介绍所述多种示例实施例的一些方面,而不是为了限制本
发明的范围。下文是对示例实施例的详细描述,足以允许本领域技术人员利用本发明构思。
[0011] 多种示例实施例涉及一种执行将输入消息映射到输出消息的加密钥的密码运算(keyed cryptographic operation)的方法,其中所述密码运算包括至少一个回合(at 
least one round),所述至少一个回合包括配置为将输入数据映射到输出数据的非线性映
射函数,所述方法包括:将输入数据拆分为n个拆分输入数据,其中所述对输入数据的拆分
基于输入消息的值而改变;将每个拆分输入数据输入到非线性映射函数中,以便获得n个拆
分输出数据,其中n个拆分输出数据的组合表示输出数据,其中当将所述输入数据输入到非
线性映射函数中时,得到所述输出数据。
[0012] 描述了多种实施例,其中所述将每个拆分输入数据输入到非线性映射函数中包括:将每个拆分输入数据输入到多个拆分映射函数中,其中对所述多个拆分映射函数进行
异或得到所述非线性映射函数。
[0013] 描述了多种实施例,其中所述拆分和输入步骤与当前回合的加密钥的密码运算有关,所述当前回合产生当前回合的输出,作为加密钥的密码运算的下一回合的输入,其中所
述加密钥的密码运算对加密钥的密码运算的下一回合的输入重复所述拆分和输入步骤。
[0014] 描述了多种实施例,其中下一回合中的m值大于当前回合中的n值,其中所述下一回合是加密钥的密码运算的第二到最后回合。
[0015] 描述了多种实施例,其中当前回合中的n值大于下一回合中的m值,其中所述当前回合是加密钥的密码运算的第二回合。
[0016] 描述了多种实施例,其中所述将输入数据拆分为n个拆分输入数据是前一回合的一部分,其中前一回合的输出成为当前回合的输入。
[0017] 描述了多种实施例,其中所述对输入数据的拆分依赖于输入数据的多个不同部分。
[0018] 描述了多种实施例,其中查找表实现所述加密钥的密码运算。
[0019] 描述了多种实施例,其中有限状态机实现所述加密钥的密码运算。
[0020] 描述了多种实施例,其中所述将每个拆分输入数据输入到非线性映射函数中还包括:输入f-1οαiοf(x),其中函数f对输入数据x执行密钥添加函数(key addition 
function),αi是第i个拆分输入数据。
[0021] 此外,多种示例实施例涉及一种执行加密钥的密码运算的方法,所述加密钥的密码运算将输入消息映射到输出消息,其中所述密码运算包括至少一个回合,所述至少一个
回合包括配置为将输入数据映射到输出数据的非线性映射函数,所述方法包括:基于输入
数据选择n对映射,其中所述n对映射包括第一映射和第二映射,其中所述第一和第二映射
是非线性函数的自等价(self-equivalences)集合,其中当将输入数据输入到非线性函数
中时,非线性函数的输出的第二映射的组合得到非线性函数的输出的已知函数;通过针对n
个第一输入映射的每个计算输入数据的第一映射,将输入数据拆分为n个拆分输入数据;将
n个拆分输入数据中的每个输入到非线性映射函数中以便获得n个拆分输出数据。
[0022] 描述了多种实施例,其中将n个拆分输入数据中的每个输入到非线性映射函数中包括:将n个拆分输入数据中的每个输入到多个拆分映射函数中,其中对所述多个拆分映射
函数进行异或得到非线性映射函数。
[0023] 描述了多种实施例,其中所述选择、拆分和输入步骤与当前回合的加密钥的密码运算有关,所述当前回合产生当前回合的输出,作为加密钥的密码运算的下一回合的输入,
其中所述加密钥的密码运算对加密钥的密码运算的下一回合的输入重复所述选择、拆分和
输入步骤。
[0024] 描述了多种实施例,其中下一回合中的m值大于当前回合中的n值,其中所述下一回合是加密钥的密码运算的第二到最后回合。
[0025] 描述了多种实施例,其中当前回合中的n值大于下一回合中的m值,其中所述当前回合是加密钥的密码运算的第二回合。
[0026] 描述了多种实施例,其中所述将输入数据拆分为n个拆分输入数据是前一回合的一部分,其中前一回合的输出成为当前回合的输入。
[0027] 描述了多种实施例,其中n个第一映射是仿射的。
[0028] 描述了多种实施例,其中n个第二映射是仿射的。
[0029] 描述了多种实施例,其中所述对输入数据的拆分依赖于输入数据的一部分。
[0030] 描述了多种实施例,其中所述对输入数据的拆分依赖于输入数据的多个不同部分。
[0031] 描述了多种实施例,其中查找表实现所述加密钥的密码运算。
[0032] 描述了多种实施例,其中有限状态机实现所述加密钥的密码运算。
[0033] 描述了多种实施例,其中所述将每个拆分输入数据输入到非线性映射函数中还包括:输入f-1οαiοf(x),其中函数f对输入数据x执行密钥添加函数,αi是第i个第一映射。
[0034] 描述了多种实施例,其中已知函数(known function)基于输入数据。
[0035] 此外,多种示例实施例涉及一种执行加密钥的密码运算的方法,所述加密钥的密码运算将输入消息映射到输出消息,其中所述密码运算包括配置为将输入数据映射到输出
数据非线性映射函数,所述方法包括:针对每个小于或等于n的i值计算αi(x),其中αi(x)被
定义为基于输入消息的n对映射(α,β)之一,所述n对映射(α,β)是非线性函数的自等价的集
合,其中n>1,且对于 h(y)是仿射的;将每个αi(x)输入到非线性映射函
数中以便获得βi(y),其中当x是非线性映射函数的输入数据时,y是输出数据。
[0036] 描述了多个实施例,其中将每个αi(x)输入到非线性映射函数中包括:将每个αi(x)输入到多个拆分映射函数,其中对所述多个拆分映射函数进行异或得到非线性映射函数,
其中合并多个映射函数的输出以获得βi(y)。
[0037] 描述了多种实施例,其中所述计算和输入步骤与当前回合的加密钥的密码运算有关,所述当前回合产生当前回合的输出,作为加密钥的密码运算的下一回合的输入,其中所
述加密钥的密码运算对加密钥的密码运算的下一回合的输入重复所述计算和输入步骤。
[0038] 描述了多种实施例,其中下一回合中的m值大于当前回合中的n值,其中所述下一回合是加密钥的密码运算的第二到最后回合。
[0039] 描述了多种实施例,其中当前回合中的n值大于下一回合中的m值,其中所述当前回合是加密钥的密码运算的第二回合。
[0040] 描述了多种实施例,其中所述针对每个i值计算αi(x)是前一回合的一部分,其中前一回合的输出成为当前回合的输入。
[0041] 描述了多种实施例,其中n个映射α是仿射的。
[0042] 描述了多种实施例,其中n个映射β是仿射的。
[0043] 描述了多种实施例,其中查找表实现所述加密钥的密码运算。
[0044] 描述了多种实施例,其中有限状态机实现所述加密钥的密码运算。
[0045] 描述了多种实施例,其中所述将每个αi(x)输入到非线性映射函数中还包括:输入f-1оαiоf(x),其中函数f执行密钥添加函数。
[0046] 描述了多种实施例,其中函数h基于所述输入消息。
[0047] 此外,多种示例实施例涉及一种执行高级加密标准(AES)密码运算的白盒实现方案的方法,所述AES密码运算将输入消息映射到输出消息,其中所述密码运算包括配置为将
输入数据映射到输出数据的AES替换函数,所述方法包括:基于输入数据x选择n对映射(α,
β),其中所述n对映射(α,β)是AES替换函数的自等价的集合,n>1,且其中对于
h(y)是仿射的;针对每个i值计算 将每个αi(x)输入到AES替
换函数中以便获得 其中当x是AES替换函数的输入数据时,y是输
出数据。
[0048] 描述了多个实施例,其中将每个αi(x)输入到非线性映射函数中包括:将每个αi(x)输入到多个拆分映射函数中,其中对所述多个拆分映射函数进行异或得到非线性映射函
数,其中合并多个映射函数的输出以获得βi(y)。
[0049] 描述了多种实施例,其中所述选择、计算和输入步骤与当前回合的AES密码运算相关,所述当前回合产生当前回合的输出,作为AES密码运算的下一回合的输入,其中所述AES
密码运算对AES密码运算的下一回合的输入重复所述选择、计算和输入步骤。
[0050] 描述了多种实施例,其中下一回合中的m值大于当前回合中的n值,其中所述下一回合是AES密码运算的第二到最后回合。
[0051] 描述了多种实施例,其中当前回合中的n值大于下一回合中的m值,其中所述当前回合是AES密码运算的第二回合。
[0052] 描述了多种实施例,其中所述针对每个i值计算αi(x)是前一回合的一部分。
[0053] 描述了多种实施例,其中n个映射α是仿射的。
[0054] 描述了多种实施例,其中n个映射β是仿射的。
[0055] 描述了多种实施例,其中αi(x)依赖于输入x的多个输入字节。
[0056] 描述了多种实施例,其中所述基于输入消息x选择n对仿射映射(α,β)还包括:针对i值=1,n-1,基于输入x选择ci的值,其中ci是字节;以及针对i值=1,n-1,基于h(y)和ci的
值,选择cn的值。
[0057] 描述了多种实施例,其中所述基于输入消息x选择n对仿射映射(α,β)还包括:针对i值=1,n,基于输入x选择ci的值,其中ci是字节;以及针对i值=1,n,基于ci的值,确定h
(y)。
[0058] 描述了多种实施例,其中查找表实现高级加密标准(AES)暗号密码运算(cipher cryptographic operation)的白盒实现方案。
[0059] 描述了多种实施例,其中有限状态机执行高级加密标准(AES)暗号密码运算的白盒实现方案。
[0060] 描述了多种实施例,其中所述将每个αi(x)输入到AES替换函数中还包括:输入f-1оαiоf(x),其中函数f执行密钥添加函数。
[0061] 描述了多种实施例,其中函数h是基于所述输入消息的。

附图说明

[0062] 为了更好地理解多种示例实施例,参考附图,在附图中:
[0063] 图1示出了AES的回合的主要步骤;
[0064] 图2示出了对多个回合的输入进行固定编码的白盒AES实现方案;
[0065] 图3示出了通过查找表的网络来计算一个输出半字节(output nibble);
[0066] 图4示出了图3的网络表的一部分,其中通过对输入和输出进行编码来使所述网络表变得混乱;
[0067] 图5示出了可以如何针对i=j≠4计算
[0068] 图6示出了可以如何针对i≠j且i≠4计算 以及
[0069] 图7示出了用于计算c4的异或(XOR)网络。
[0070] 为了便于理解,将相同的附图标记用于表示具有实质上相同或相似的结构和/或实质上相同或相似的功能的元件。

具体实施方式

[0071] 以下描述和附图示出了本发明的原理。因此,尽管文中并未明确描述或示出,然而应认识到本领域技术人员可以想出体现本发明原理的多种布置,这些布置包括在本发明的
范围内。此外,本文记载的所有示例主要显式地用于教学目的以帮助读者理解本发明的原
理和发明人所提供的构思,以促进现有技术,应将本发明理解为不限于这种具体记载的示
例和条件。此外,除非指出(例如,“否则”或“或替代地”),否则文中使用的术语“或”是指非排除性的或(即,和/或)。此外,本文所述的多种实施例不必是互相排除性的,这是由于可以
将一些实施例合并为一个或更多个其它实施例,以形成新的实施例。
[0072] 在以下文章中提出了高级加密标准(AES)和数据加密标准(DES)的白盒实现方案的基于表格的方法:Stanley Chow、Philip Eisen、Harold Johnson和Paul C.Van 
Oorschot的“White-Box Cryptography and an AES Implementation”,in Selected 
Areas in Cryptography:9th Annual International Workshop,SAC 2002,St.John’s,
Newfoundland,Canada,2002年8月15-16日,下文中称作“Chow 1”;以及Stanley Chow,Phil Eisen,Harold Johnson和Paul C.van Oorschot的“A White-Box DES Implementation 
for DRM Applications”,in Digital Rights Management:ACM CCS-9Workshop,DRM 
2002,Washington,D.C.,USA,2002年11月18日,下文中称作“Chow 2”。Chow 1和Chow 2公开了如下方法:通过对具有随机双射表格进行编码的组合,使用基于表格的方法来隐藏密码
密钥;并通过将密码边界推动到包含应用,来扩展密码边界。
[0073] 然而,在由Olivier Billet、Henri Gilbert和Charaf Ech-Chatbi提出的“Cryptanalysis of a White Box AES Implementation,”in Helena Handschuh and 
M.Anwar Hasan,editors,Selected Areas in Cryptography,volume 3357 of Lecture 
Notes in Computer Science,pages 227-240,Springer,2005的文章(下文中称作
“Billet”)中指出了Chow的方法的弱点。该弱点可以被攻击者可以利用,并在最坏情况下可
能导致暴露白盒实现方案中隐藏的秘密密钥。
[0074] 由Billet进行的关键观察(key observation)在于:在根据Chow的白盒实现方案中的对应回合的每个输入词与在普通非白盒实现方案中的对应输入词有特定关系。可以不
参考除了各个单独输入值之外的其它输入值来表现这种关系。尽管这种关系是依赖于密钥
的并且对于攻击者是未知的,然而这种特征提供足够的结构来大大简化对白盒的击破,如
Bilet进一步所述。
[0075] 因此,有利的是具有一种用于执行将输入消息映射到输出消息的密码运算的改善的白盒密码系统,这种改善的白盒密码系统可以对抗在Billet中识别的攻击。
[0076] Chow的结构易受攻击的一个原因在于:在所述白盒实现方案中的各个回合的各个单独输入值以及普通非白盒实现方案中的各个单独输入值之间存在固定关系。在下文所述
的本发明的实施例中,介绍了使用一系列函数αn将输入字节x拆分为n个字节α1(x),α2
(x),...,αn(x)。选择函数αn,使得当n个字节中的每个通过S盒时,可以组合结果以便实现将原始的x通过S盒的期望结果。用于拆分输入字节的具体αn函数是基于输入的,所以可以随
着输入而改变。该特征破坏了Billet攻击所采用的固定关系。拆分输入不再与密码运算的
非白盒实现方案中的一些单独输入值存在固定关系。这种复杂性足以击败Billet中阐述的
攻击。
[0077] 通过用对值进行拆分代替对值进行固定编码,密码系统的反向工程变得更困难,这是由于反向工程师难以将根据本发明的密码系统的工作与非白盒版本的密码运算的工
作进行比较。
[0078] 应注意,对于多数密码运算,需要的是具有白盒实现方案。例如,可以将本发明应用于对称和非对称的密码运算。此外,可以将本发明应用于块暗号(block ciphers)、流暗
号、消息认证方案、签名方案等。应注意,还可将本发明应用于散列函数(hash functions)。
如果将散列函数用作处理秘密信息(例如,秘密密钥、秘密数据等)的基本构建块(building 
block),则后者是特别有用的。例如,可以将本发明应用于在加密钥的散列消息认证码
(HMAC或KHMAC)中使用的散列函数。公知的块暗号包括:高级加密标准(AES)、安全快速加密
例程(SAFER和变型SAFER+与SAFER++)、Blowfish、数据加密标准(DES)等。公知的流暗号是
RC4。此外,可以使用适合的运算模式(例如,暗号反馈(CFB)、计数器模式(CTR)等)将任何块
暗号用作流暗号。
[0079] 输入消息可以代表例如经加密的内容数据(例如,多媒体数据),包括音频和/或视频数据。经加密的内容数据还可以包括经加密的软件,例如,表示一些计算机应用(例如,计
算机游戏)或办公室应用的经加密的计算机码。输入消息还可以表示在其它密码运算中使
用的密钥。例如,可以将后者用于密钥交换协议,其中根据本发明的白盒实现方案对表示新
密钥的数据进行加密和/或解密。输入数据还可以是明文数据(plain data),例如,明文用
户数据。在消息认证方案中后者是尤其有利的。根据本发明的白盒实现方案可以具有如下
特性:该实现方案可以仅用于进行加密,仅用于进行解密,但是不能既用于加密也用于解
密。例如,如果实现方案使用不是双射型的查找表(例如,输入比特比输出比特更多的查找
表),则可以实现该特性。因此,如果用户仅具有白盒解密器,则用户可以验证MAC码,但不能
创建新的MAC。这样增强了这种消息认证方案的不可否认特性。
[0080] 可以使用多个基本块来实现安全软件。在一些块构建在一个或更多个先前块的输出上的意义下,多个基本块是互连的。基本块可以以硬件实现,例如,实现为计算机芯片。基
本块可以使用开关板、状态机或任何其它适合结构,以便在计算机硬件中实现功能。基本块
还可以以运行在通用计算机芯片(例如,微处理器)上的软件来实现。例如,基本块可以使用
包括算术指令的多个计算机指令,多个计算机指令共同实现基本块的功能。可以在软件和
硬件二者中使用的基本块的广泛使用的实现方案是查找表。例如,Chow 1和Chow 2采用该
方法来实现AES和DES块暗号。查找表实现方案包括列出可能输入值、输出值的列表。所述输
入值在查找表中可以是明确的。在这种情况下,查找表实现方案能够通过在输入值的列表
中搜索特定输入,来将特定输入映射到特定输出。当发现了特定输入时,同样就发现特定输
出。例如,可以将特定输出存储在特定输入的旁边。优选地,仅隐含式地存储输入值,而非显
式地存储。例如,如果可能输入是连续范围的数字或字符串,则可以将查找表限制为存储输
出值的列表。例如,可以将特定输入数字映射到由数字表示的位置处存储的特定输出。
[0081] 例如,可以通过针对可能的输入计算函数输出值并将输出存储在列表中,来创建函数的查找表。如果函数依赖于多个输入,则可以针对多个输入的所有可能组合,计算并存
储所述输出。查找表特别适合于实现以不规则的方式将输入映射到输出的非线性函数。如
下所示,可以通过向白盒实现方案的查找表中的一个或更多个查找表应用固定混乱输入编
码和固定输出编码,来进一步混乱白盒实现方案。接着,完全预估应用固定混乱输入编码和
输出编码的结果。使用这种技术,可以用相同维数的(具有相同数目的输入比特,并产生相
同数目的输出比特)混乱的查找表来替换查找表。以这种混乱方式使用的输入编码和输出
编码在最终白盒实现方案中并非是明确的。在下文所述的本发明实施例中实现更好的混
乱,该实施例以依赖于输入的方式而非固定方式引入拆分输入字节。应注意,可以有利地将
本文所述的输入拆分与传统的混乱技术相结合,这是由于它们还进一步模糊密码运算的内
部工作。
[0082] 将基本块网络布置为在与输入消息一起存在时计算输出消息。通常,基于多个基本输入块来运算输入消息。多个其它基本块可以采用来自一个或更多个所述基本输入块
和/或输入的输入。另外的其它基本块可以采用所述输入消息、所述基本输入块的输出以及
所述其它基本块的输出的任何组合形式的输入。最终,一些基本退出块集合(即,至少一个)
产生输出消息的全部或一部分作为输出。在这种情况下,出现了共同计算从输入消息到输
出消息的映射的基本块网络。
[0083] 使用的密钥可以是密码密钥,并且可以包含足够大的熵值以抵抗所预期的暴力攻击。应注意,在白盒实现方案中,密钥通常并非明确存在于该实现方案中。这样将存在通过
观察实现方案而找到密钥的风险。通常,密钥仅隐含式地存在。已知多种方式来将密钥隐藏
在密码系统中。通常,至少使用部分评估的方法,在该方法中,评估需要密钥输入的基本块,
只要基本块不依赖于输入消息。例如,可以通过预先将密钥值与掩膜值进行异或(XOR),来
部分评估基本运算,在所述基本运算中,需要将输入值、不依赖于输入消息的掩膜值(例如,
来自S盒的值)与上述密钥值进行异或。在这种情况下,尽管密钥值并非明确存在于实现方
案中,然而该运算仍依赖于密钥值。相反,只有密钥值和掩膜值之间的异或存在于实现方案
中。应注意,更复杂的方式和/或隐藏密钥的其它方式与本发明是兼容的。
[0084] 多种拆分函数αn可以与本发明一起使用。拆分函数αn提供对数据值加以表示的新方式。通常拆分函数αn也是双射的,然而这不是必要的。
[0085] 可以将自等价拆分函数的集合用于拆分所述输入。例如,如果x是S盒的输入且y是输出,则在S盒的输入αn(x)得到输出βn(y)的情况下,一对函数α和β是自等价的。这种函数提供如下优点:将输入拆分到S盒,如果选择β函数使得它们的组合得到输出值y或y的已知函
数,则当等价的α函数被用于拆分输入时,易于从S盒获得期望输出,与此同时,破坏由
Billet攻击使用的固定编码。
[0086] 可以使用任何适合方式来完成对仿射的自等价拆分函数的确定。例如,如A.Biryukov,C.De  Canniere,A.Braeken和B.Preneel的文献“A Toolbox for 
Cryptanalysis:Linear and Affine Equivalence Algorithms,”Proceedings of 
Eurocrypt,2003,页码33-50(下文中称作Biryukov)所述。在Biryukov中,描述了多种方法
以便确定针对多种加密方法的仿射性自等价函数。
[0087] 使用AES(高级编码标准)块暗号来描述下文的示例实施例,由于AES已成为块暗号广泛使用的标准。AES是块大小为128比特或16字节的块暗号。将明文划分为16字节的块,所
述16字节形成加密算法的初始状态,加密算法的最终状态是密文。在加密算法的任何给定
点处,这些16字节是加密算法的状态。为了概念上解释AES,将状态字节组织为4x4字节的矩
阵。AES包括多个回合,回合的数目依赖于密钥大小。每个回合包括类似的处理步骤,这些类
似的步骤对状态矩阵的字节、行或列进行运算,每个回合在这些处理步骤中使用不同回合
密钥。在将AES用作示例的讨论中,应注意,AES以特定方式定义回合。在以下实施例中,回合
是包括至少一个非线性映射函数(例如,AES中的S盒)的任何步骤组。因此,下文所述的回合
包括一个非线性映射函数以及密码函数的其它步骤的任何组合。此外,回合边界可以以非
线性映射函数开始,例如,S盒,可以与非线性映射函数相合并的任何其它运算(例如,密钥
添加)开始。
[0088] 图1示出了AES回合的一些主要处理步骤。处理步骤包括:
[0089] AddRoundKey 110-将状态的每个字节与回合密钥的字节进行异或;
[0090] SubBytes 120-使用查找表的字节到字节排列;
[0091] ShiftRows 140-将所述状态的每行旋转固定数目的字节;以及
[0092] MixColumns 150-使用GF(28)中的模乘运算来处理每列。
[0093] 步骤SubBytes 120、ShiftRows 130和MixColumns 150不依赖于所使用的特定密钥。将密钥应用于步骤AddRoundKey 110。除了步骤ShiftRows 140之外,还可以对4x4状态
矩阵的每列执行处理步骤,而不需要知道其他列。因此,可以将它们认为是32比特运算,由
于每列由四个8比特的值构成。虚线150表示重复处理,直到执行了所需数目的回合为止。
[0094] 这些步骤中的每个或步骤组合可以由查找表或查找表网络来表示。如果通过与回合密钥进行异或来执行AddRoundKey 110步骤,则密钥对于白盒攻击环境中的攻击者是可
见的。AddRoundKey 110步骤还可以嵌入在查找表中,使得找出所述密钥变得不显而易见。
实际上,能够用查找表网络替换AES的全部回合。例如,可以使用查找表来实现SubBytes 
120、ShiftRows 130和MixColumns 150步骤。下文详细地讨论了AES的可能白盒实现方案,
以便在下文描述本发明的实施例,此外在Chow1中可以找到对这种实现方案的更详细描述。
此外,可以在查找表实现方案中使用其它变型,变型仍在本发明的范围内。
[0095] 下文描述的实施例提供了一种用于实现白盒实现方案的不同方法,该方法不具有Billet所述的对S盒输入进行固定编码的缺点。这种根本缺点不仅应用于Chow 1和Chow 2
的基于表格的方法,而且还应用于有限状态机方法和应用通用码转换技术来安全地实现密
码暗号的方法。此外,对于这种方法,可以使用下文所述的本发明实施例的技术。
[0096] 基于表格的白盒实现方案以及有限状态机实现方案都具有如下属性:对实现方案中的所有中间值进行编码(相较于标准实现方案)。题为“Data Processing Method”的美国
专利公开2007/0014394以及由Wulf Harder和Atis Straujums在Re-trust Sixth 
Quarterly Meeting作出的记载于2008年3月11日的题为为“Synchrosoft MCFACTTM 
Secure Data Processing Technology”的报告公开了使用有限状态机的白盒实现方案的
示例,其通过全文引用合并于此。然而,Billet示出了如果通过固定编码对S盒的输入进行
编码,则可以破坏该实现方案(即,可以提取密码密钥)。图2示出了对回合的输入(即,对S盒
的输入)进行固定编码的白盒AES实现方案。如图所示,通过fi对16个输入字节中的每个进
行编码,通过gi对输出字节中的每个进行编码。
[0097] 如图所示,由于对输入(和输出)字节进行固定编码,因此可以破坏图2所示的白盒实现方案。可以通过将每个输入字节拆分为n个字节(n>1),来解决这种问题。可以以非固
定方式实现这种拆分。此外,在本发明的一些实施例中,在白盒实现方案的2个单独回合中,
如果回合的输入字节xi是相同的,则可以将输入字节xi拆分为不同的n字节元组(tuples)。
这意味着,对于观察该元组中的各个单独字节的攻击者,应用拆分功能不是对xi进行固定
编码。这样防止所有已知攻击。
[0098] 下文呈现了对拆分输入字节的更精确的和更正式的描述。
[0099] 首先,令V是S盒的仿射自等价集合,即,V={(α,β)|S=βоSоα-1其中α,β仿射}。
[0100] 接下来,如下所示令集合W包含来自V的n个对,其中h是仿射的双射函数:
[0101]
[0102] 函数h(x)可以是固定仿射函数,例如,单位函数,但是还可以是通过计算选择的仿射函数。例如,在下文所述的一个实施例中,函数βi(x)=cix,其中
对于i<n,ci依赖于输入状态。备选地,在另一实施例中, 其中通过
函数β(可能多达常数加法)给定函数h,(α,β)∈V,函数β与乘法系数 ci相关联。这
得到了h依赖于基于输入状态的计算的示例。
[0103] 对于输入字节x,将输入α1(x),α2(x),...,αn(x)馈送给n个拷贝的S盒,其中任何Γ∈W。这样得到S盒输出β1(y),β2(y),...,βn(y)。对S盒输出β1(y),β2(y),...,βn(y)进行异或得到正确的S盒输出y=S(x),直到仿射映射h。通常,不明确计算异或以便最小化攻击白盒实现方案的可能性。这对于值αi(x)和βi(y)仍是这样也成立,通常将值αi(x)和βi(y)与其它
函数合并,这是由于S盒通常与其它函数合并。下文将参考多种实施例来对此进行详细描
述。
[0104] Γ∈W的选择依赖于基于输入字节的计算。因此,它不是固定的,所以Billet攻击无法用于攻击白盒实现方案。
[0105] 如下所述,Biryukov描述了一种用于计算S盒的仿射自等价集合的算法。
[0106] 为了描述本发明的实施例,对基于表格的白盒AES实现方法进行基本描述。对用于实现基于表格的白盒AES的方法的更详细描述参阅Chow 1。Chow 1描述了使用特定尺寸的
表格来破坏一些函数的具体实现方案。应认识到:可以对表格进行多种其它拆分,得到查找
表的不同函数和不同尺寸。此外,当下文所述的本发明实施例使用基于表格的AES白盒实现
方案时,可以根据所述实施例执行其它暗号和密码函数。此外,可以使用其它类型的白盒实
现方案(例如,有限状态机实现方案),代替基于表格的实现方案。
[0107] 将对基于表格的白盒AES的描述分为两个步骤。在第一步骤中,将AES的回合描述为查找表网络。在第二步骤中,通过对它们的输入和输出进行编码来混乱所述表格。
[0108] 步骤1:将AES实现为查找表的网络
[0109] AES对16字节的数据块进行运算。通常将这些数据块描述为4x4字节矩阵,称作包括字节x1,1,x1,2,x1,3,...x4,4的状态。参考图1的上述AES的回合包括以下运算:AddRoundKey 
110,SubBytes 120、ShiftRows 130和MixColumns 140。可以将前两个运算(AddRoundKey和
SubBytes)合并为单个T盒运算。也就是说,可以针对输入字节xi,j将字节与字节函数Ti,j定
义为 其中ki,j是基于AES密钥的16字节回合密钥。令yi,j是Ti,j的输
出。ShiftRows运算仅是对输出字节yi,j的索引进行重新编号。为了便于解释,该运算在本描
述中可以省略,但是可以合并到实现Ti,j的查找表,或实现为状态矩阵的独立运算。在
MixColumns步骤中 ,对于一些常数MCl,r经过GF(28) 中的 代数式
来根据4个输出字节
y1,j、y2,j、y3,j和y4,j,计算回合的输出字节zi,j。
[0110] 现在针对每个字节到字节函数Qi,j,l(xi,j)=MCl,i·Ti,j(xi,j),定义查找表,其中i,j,l=1,2,...,16。然后,可以通过将这些查找表的结果进行异或,来计算任何输出字节zl,j,即, 应注意,可以将Q
盒的序数i,j,l理解为“回合的输入字节i,j对回合的输出字节l,j的贡献”。可以实现异或
以便对两个半字节(即,4比特值)中的每个进行运算,作为查找表,从而减小异或表格的大
小。因此,可以实现Q盒以便产生输出半字节,使得减小表格的大小。因此,已将对AES回合的
每个输出字节zl,j的计算描述为查找表网络。图3示出了用于计算字节z2,3的单个输出半字
节的查找表网络。
[0111] 图3示出了通过查找表的网络来计算一个输出半字节。Q盒中的上标指数(1)表示表格仅提供Q盒的输出的第一半字节。将输入字节集合x1,3,x2,3,x3,3和x4,3输入到Q盒320、
322、324、326中。查找表320和322的输出被馈送到XOR 330,查找表324和326的输出被馈送
到XOR 332。XOR 330和332的输出被馈送到XOR 334。XOR 334的输出是输出状态340的输出
z2,3的第一半字节。可以使用附加Q盒以及类似XOR网络,以相同方式计算输出状态340的输
出z2,3的第二半字节。此外,可以通过接收来自输入状态的一列字节,并将其转换为输出状
态的对应列的输出,来实现其它集合的表格,以便将输入状态310完全转换为输出状态340。
[0112] 步骤2:混乱表格和中间值
[0113] 在图3所述的实现方案中,可以从Q盒中方便地提取密钥。仅向所述输出应用反向MixColumns乘法和反向S盒,以揭示出明AddRoundKey运算。为了防止这样,用任意双射函数
对所有查找表的输入和输出进行编码。Chow 1描述了此方法。这意味着:将查找表与对输出
进行编码的编码函数以及与对输入进行解码的解码函数合并。选择进行编码,使得对一个
表格的输出编码与在下一表格中假定的输入编码相匹配。图4针对第一回合描述了图3的实
现方案的一部分。在该示例中,不对该回合的输入进行编码,以便符合AES,但是对该回合的
输出进行编码。在下一回合中处理输出编码。也就是说,与第一回合不同,第二回合(以及后
续回合)假定对输入进行编码。备选地,第一回合可以接收编码输入。然后,必须将该输入编
码应用于所述包含白盒实现方案的软件程序中的某处。类似地,根据所述输出是否符合
AES,最后回合可以包括或可以不包括输出编码。应注意,在所获得的白盒实现方案中,查找
表和中间值都是混乱的。
[0114] 图4示出了通过对输入和输出编码而混乱的图3的网络表格的一部分。查找表420、422、424、426与图3的查找表320、322、324、326相对应。通过f1、f2、f3、f4分别对查找表420、
422、424、426的输出进行编码。XOR 430与XOR 330相对应。XOR 430的输入使用f1-1和f2-1对
输入进行解码。然后,通过函数f5对XOR 430的输出进行编码。按照类似方式,XOR 432、434
具有所示的输入解码和输出编码。使用f7对输出z2,3进行编码。尽管对查找表的输入和输出
进行编码提供抵抗简单攻击的一部分保护,然而攻击者可能使用Billet所述的技术来在
AES实现方案的回合之间的边界处攻击这种白盒AES实现方案。
[0115] 现描述防止如Billet所述的攻击的实施例。在这些实施例的描述中,描述了非混乱表格网络以便有助于描述,而没有额外复杂性。可以以图4所述相同方式,将所述实施例
变为混乱表格网络。此外,本描述关注于如何实现第一回合以便提供对第二回合的拆分输
入。本领域技术人员应认识到:可以通过将这些想法扩展到所有回合来完成白盒实现方案。
[0116] 如上所述,下述实施例包括以下方面。令V表示S盒的仿射自等价集合,即,V={(α,β)|S=βοSοα-1其中α,β仿射}。
[0117] 接下来,如下所述,令集合W包含来自V的n对,其中h是仿射的双射函数:
[0118]
[0119] 函数h(x)是固定仿射函数,例如,单位函数,但是还可以是通过计算选择的仿射函数。
[0120] 对于输入字节x,将输入α1(x),α2(x),...,αn(x)馈送给S盒的n个拷贝,其中任何Γ∈W。这样获得S盒输出β1(y),β2(y),...,βn(y)。对S盒输出β1(y),β2(y),...,βn(y)进行异或获得正确的S盒输出y=S(x),直到仿射映射h为止。通常,不明确计算用于获得y的最终XOR,以便最小化攻击白盒实现方案的可能性。这对于值αi(x)和βi(y)仍是这样也成立,通常将值
αi(x)和βi(y)与其它函数合并,这是由于S盒通常与其它函数合并。
[0121] 如下文所详述,Γ∈W的选择依赖于基于输入字节的计算。它不是固定的,因此不能使用Billet攻击。
[0122] 所以,首先定义AES S盒的仿射自等价集合V。可以将AES S盒写作:
[0123] S(x)=AAES(x-1),
[0124] 其中在GF(28)中取反,AAES是固定仿射映射。如Biryukov所示,将自等价集表示为:
[0125]
[0126] 应注意,对于任何(α,β)∈V,函数α是线性的。
[0127] 此外,可以使用函数h以便不断增加AAES,即, 其中对于线性映射LAES, 令n=4并将集合W定义为:
[0128]
[0129] 所述公式符合W的更抽象定义。也就是说,对于任何Γ=(α1,β1),(α2,β2),...,(αn,βn),∈W和任何字节x,可以如下所示地验证
[0130]
[0131]
[0132]
[0133]
[0134]
[0135] 现根据本发明的示例实施例,示出了对AES的第一回合的输出字节z2,3的计算,其中n=4, 是单位函数。备选地,可以选择其它的n和h(x)值。类似地运行对
其他字节的计算。这样指定没有混乱步骤的第一回合的白盒实现方案。第一回合的输入是
要被加密或解密的输入状态x。将x的半字节输入到Q盒中,以便产生y值的半字节。然后可以
将由Q盒输出的多种y值组合为输出字节z,所述输出字节z是针对该回合的输出状态的一部
分。由于第一回合的输出字节z变为第二回合的输入字节,因此y值可以用于选择将α应用于
输出字节z的输入拆分函数α。如下所述,可以在计算字节z的最终值的同时,合并这些拆分
函数。然后,在第二回合中,使用以和第一回合相似方式选择的另一拆分函数集合α来拆分
所述输出,以便产生第三回合的拆分输入。这样重复直到最后回合的前一回合。由拆分函数
α的集合对输入进行的这种拆分保护AES处理的多个回合之间的接合处不受Billet攻击。
[0136] 此外,为了便于表示,暂且忽略第二回合的密钥添加(key-addition)。这意味着第二回合的AES S盒的输入由第一回合的输出字节给出。随后,将描述如何处理密钥添加。
[0137] Γ∈W的选择依赖于基于输入字节的计算,由于它不是固定的,因此Billet攻击无法用于z2,3。由于n=4,现在第一回合必须计算n=4-字节元组α2,3,1(z2,3),α2,3,2(z2,3),α2,3,3(z2,3),α2,3,4(z2,3)(其中输出字节z2,3被用作示例),其中仿射函数α2,3,k来自W并且不是固定的,即,根据白盒实现方案不同而不同。这些字节α2,3,1(z2,3),α2,3,2(z2,3),α2,3,3(z2,3),α2,3,4(z2,3)成为第二回合的输入。由于在该实施例中 作为来自W的元素,对于
一些ck∈GF(28)\{0}意味着 其中
[0138] 第一回合存在对z2,3的值做贡献的4个输入字节。首先,如图3所示对这四个输入字节进行Q盒运算。令yi,3,2是这四个Q盒运算的第i个输出字节。现在,对于i≠4,令经由
从yi,3,2的第一半字节获得ci,其中。对于i=4,令
因此,
这样导致α’s依赖于输入状态,因此α’s随着输入状态改变而改变。在图3的网络中,在Q盒之
后插入对值 的计算。图5示出了如何针对i=j≠4计算
所述输入x1,3是查找表520和522的输入。查找表520和522对半字节(即,字节的上
4比特和下4比特)进行运算,以便产生输出y1,3,2的半字节。将y1,3,2的半字节输入到通过将半字节组成并乘以c1来计算 的表格530中,其中
[0139] 图6示出了如何针对i≠j且i≠4计算 在图6中,i=2,j=1。如图5所示,将输入x1,3输入到查找表520和522中。此外,由于 将输入x2,3输入到
查找表524中。y1,3,2的半字节输入到表格630、632以及随后的XOR 640,以便计算 的
第一半字节。类似地运行对第二半字节的计算。
[0140] 保持i=4的情况,计算值c4。图7示出了用于计算c4的异或网络。分别将输入x1,3、x2,3、x3,3输入到查找表520、524、528中,以便产生 然后将
馈送到所示的XOR 730、732,以便通过 来计算与c4一一对应的 然
后,以与图6计算 相似的方式将该 值用于计算
[0141] 可以经由异或网络通过简单地对四个字节进行异或,按照与根据图3所示的Q盒输出来计算z2,3的相同方式,根据 计算值 类似
地,可以计算输出字节 此外,可以类似地产生所有输出字节
的四个拆分版本。这些被拆分的输出字节变为第二回合的拆分输入。此外,还可
以如图4所示混乱查找表和网络。
[0142] 在以上描述中,忽略了第二回合的密钥添加运算。这样简化了描述,对于这种情况,回合的输出与S盒的输入相对应。在先的并与S盒运算合并的任何函数f可以解释如下。
根据本发明的实施例,S盒应具有例如α2,3,k(x)作为输入。由于S盒在函数f的前面,输入变为x=f(z2,3)。为了确保将α2,3,kоf(z2,3)输入到S盒中,在回合1中(或在前一回合中)计算f-1οα2,3,kοf(z2,3),而非α2,3,k(z2,3),其中在这种情况下,函数f执行密钥添加函数。
[0143] 接下来,描述了如何在第二回合(以及后续回合)中补偿拆分S盒。在第二回合中,必须再次对Q盒输出的四个字节组进行异或。此外,由于拆分了输入,通过将n个S盒拷贝的
结果进行异或,来获得原始的S盒输出。因此,第二回合与第一回合的区别之处仅在于将输
入字节的数目增加了n倍,即,接收到16n个输入字节。这意味着为了计算第二字节的单个输
出字节,不将四个Q盒输出字节相加,而是将4n个Q盒输出字节相加。文中,可以将这4n个输
出字节划分为四个n元组,其中每个n元组经由关系 表示原始S盒的输出。如
上所述,出于以下原因,通常不对总和为h(y)的n个值β1(y),β2(y),...,βn(y)进行明确异
或。
[0144] 假定经由例如查找表来明确异或n个值β1(y),β2(y),...,βn(y)。代替对S盒的输入进行攻击,然后攻击者可以对值h(y)进行攻击,值h(y)与S盒的输入具有固定双射关系。如
果以不同顺序对4n个值进行异或和/或在对这些值进行异或的同时对下一回合应用拆分函
数αi,则上述不再可能出现,在这种情况下,不再显式地对β1(y),β2(y),...,βn(y)进行异或。
[0145] 还应注意,由于S盒通常与其它函数相结合,通常不显式地计算βj(y)。在将S盒与它随后的MixColumns运算相合并的实施例中,同样是这样的。因此,针对MixColumns系数
MC,计算值MC·βj(y),而不是βj(y)。
[0146] 实施例的特征在于:Γ∈W的选择依赖于基于输入的计算并且它不是固定的。在上述实施例中,n=4,Γ∈W的选择仅依赖于输入字节中的一个。能够使用更多输入字节来进
行计算以便进一步强化对Billet攻击的对抗性。这在下文进一步对此进行描述,其中n=2,
Γ∈W的选择依赖于四个输入字节。
[0147] 现在描述本发明的第二示例实施例,该实施例用于实现计算AES的第一回合的输出字节z2,3。类似地运行对其它字节的计算。在第一回合中,计算n=2-字节元组α2,3,1(z2,3),
8
α2,3,2(z2,3),其中仿射函数α2,3,k选择来自W并且不是固定的。对于一些ck∈GF(2)\{0}作为来自W的要素意味着 其中
[0148] 第一回合存在对z2,3的值做贡献的4个输入字节。首先,如上所述,对这四个输入字节执行Q盒运算。令yi,3,2是这四个Q盒运算的第i个输出字节。现在令c1是GF(28)中yi,3,2的前四个半字节的乘积,除非c1它等于1。在c1等于1的情况下将c1设置为2。也就是说:
[0149]
[0150] 应注意, 表示通过向半字节 添加1和3个零而获得的字节。此外,应注意,c1和c2都不等于0,这是必要条件。然后,以上述相同方式使用c1,c2值。可
以将这种实施例扩展为其它n值。此外,还可以使用用于确定ci值的其它计算,以便令将xi拆
分为n个值会根据输入而改变。将这种计算合并在由查找表实现的多个函数中,以便混乱正
在执行的函数。
[0151] 在本发明的其它实施例中,除了拆分输入之外,还可以拆分密码函数的S盒或非线性映射函数。例如,在AES中,可以将输入α1(x),α2(x),...,αn(x)中的每个输入到m个拆分S盒中。拆分S盒的总和将是原始的AES S盒。然后,可以以和上述拆分输入的实施例相似的方
式,来组合所拆分S盒的输出。此外,可以在同时待审的题为“SPLITTING S-BOXES IN A 
WHITE-BOX IMPLEMENTATION TO RESIST ATTACKS”的美国专利申请No.TBD,Attorney 
Docket Number81629146US01中找到对使用拆分S盒的描述,其通过全文引用合并与此。此
外,可以将密码函数使用的任何非线性映射函数实现为单个函数或可以组成以产生与所述
非线性函数具有相同最终输出的函数组。
[0152] 可以在计算机上将根据本发明实施例的方法实现为计算机执行方法,或实现为专用硬件,或二者的组合。可以将根据本发明的方法的可执行代码存储在计算机程序介质上。
计算机程序介质的示例包括存储器设备、光学存储设备、集成电路、服务器、线上软件等。
[0153] 在本发明的实施例中,计算机程序可以包括计算机程序代码,适用于当在计算机上运行计算机程序时,执行根据本发明的方法的所有步骤。优选地,计算机程序包括在非暂
时计算机可读介质上。
[0154] 此外,由于白盒密码通常非常复杂和/或混乱,人们对它的写入感到乏味。因此,有利的是具有以自动方式创建根据本发明实施例的密码系统的方法。
[0155] 可以在计算机上将创建根据本发明的密码系统的方法实现为计算机执行方法,或实现为专用硬件,或二者的组合。可以将根据本发明的方法的可执行代码存储在计算机程
序介质上。在这种方法中,计算机程序可以包括计算机程序代码,用于当在计算机上运行所
述计算机程序时执行所述方法的所有步骤。计算机程序包括在非暂时性计算机可读介质
上。
[0156] 在处理器上运行的用于执行本发明实施例的具体软件的任何组合构成了专用机器。
[0157] 本发明实施例的硬件系统实现方案可以包括实现白盒实现方案的基本块的硬件元件。这些硬件元件可以包括例如查找表或有限状态机。这些硬件要素可以是互连的以便
全面执行白盒实现方案。
[0158] 如本文所用,应将术语“非暂时性机器可读存储介质”理解为包括暂时性的传播信号,并且包括所有形式的易失性和非易失性存储器。
[0159] 如本文所用,应将术语“处理器”理解为包括诸如微处理器、场可编程门阵列(FPGA)、专用集成电路(ASIC)和其它类似处理器件的多种器件。当在所述处理器上执行软
件时,所述组合成为单个具体机器。
[0160] 本领域技术人员应认识到:文中的任何框图代表体现本发明原理的示意电路的构思图。
[0161] 尽管具体参考本发明的特定示例方面详细描述了多种示例实施例,然而应认识到,本发明包括其它实施例,本发明的详情包括多种明显方面的修改。对本领域技术人员显
而易见的是可以在本发明的精神和范围内进行多种变形和修改。因此,上述公开、描述和附
图仅是说明目的,而不是以任何方式限制本发明,本发明仅由权利要求来限定。