CN105359450B - 防篡改密码算法实现 - Google Patents
防篡改密码算法实现 Download PDFInfo
- Publication number
- CN105359450B CN105359450B CN201380076942.1A CN201380076942A CN105359450B CN 105359450 B CN105359450 B CN 105359450B CN 201380076942 A CN201380076942 A CN 201380076942A CN 105359450 B CN105359450 B CN 105359450B
- Authority
- CN
- China
- Prior art keywords
- function
- result
- implementation
- input
- output
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/60—Protecting data
- G06F21/602—Providing cryptographic facilities or services
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L9/00—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
- H04L9/002—Countermeasures against attacks on cryptographic mechanisms
- H04L9/004—Countermeasures against attacks on cryptographic mechanisms for fault attacks
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/466—Transaction processing
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L9/00—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
- H04L9/06—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols the encryption apparatus using shift registers or memories for block-wise or stream coding, e.g. DES systems or RC4; Hash functions; Pseudorandom sequence generators
- H04L9/0618—Block ciphers, i.e. encrypting groups of characters of a plain text message using fixed encryption transformation
- H04L9/0631—Substitution permutation network [SPN], i.e. cipher composed of a number of stages or rounds each involving linear and nonlinear transformations, e.g. AES algorithms
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L2209/00—Additional information or applications relating to cryptographic mechanisms or cryptographic arrangements for secret or secure communication H04L9/00
- H04L2209/16—Obfuscation or hiding, e.g. involving white box
Abstract
提供了一种用软件来执行密码算法的方法,该密码算法包括一个或多个处理步骤,其中,每个处理步骤被布置成处理到处理步骤的相应的输入从而生成对应于该输入的输出,其特征在于对于所述一个或多个处理步骤中的至少一个中的每一个而言,该方法包括:提供用于处理步骤的相应的输入作为到处理步骤的多个实现的输入,其中,每个实现被布置成输出使用相应的预定输出表示所表示的相应中间结果;以及使用中间结果的表示来生成用于基于中间结果中的每个的处理步骤的结果,其中,如果每个中间结果是对应于用于处理步骤的输入的输出,则用于处理步骤的结果是对应于用于处理步骤的输入的输出。另外提供了一种使得数据处理器能够用软件来执行密码算法的方法,该方法包括:生成密码算法的实现,该实现被布置成使得由处理器进行的实现的执行促使处理器执行根据前述权利要求中的任一项所述的方法;以及将数据处理器配置成执行密码算法的实现。还提供了一种用于执行此类方法的系统和计算机程序以及用于存储此类计算机程序的计算机可读介质。
Description
技术领域
本发明涉及一种用软件来执行密码算法的方法、一种使得数据处理器能够用软件来执行密码算法的方法以及用于执行此类方法的装置和计算机程序。
背景技术
用于处理数字数据的密码算法是众所周知的。此类算法可包括加密和解密算法、用以对数据进行数字签名的算法、用以生成消息认证代码的算法、用以对数据的来源或完整性进行认证或验证的算法等。
可能用来对数字数据加密/解密的密码算法的示例是高级加密标准(AES),其为众所周知的加密算法,在联邦信息处理标准公开197(在http://csrc.nist.gov/publications/fips/fips197 fips-197.pdf处找到)中描述,其全部公开被通过引用结合到本文中。AES是对称分组密码(block cipher),其中,输入块的大小为128位且相应输出块的大小也是128位。存在AES的三个不同变体,称为AES-128、AES-192以及AES-256:对于AES-n而言,密码密钥的大小是n位。
AES算法保持“状态”,其为4×4矩阵S,矩阵S的每个元素是字节。用S[r,c]来表示状态S的行r和列c处的元素(0≤r<4且0≤c<4)。要处理的数据的输入块包括16个字节,in[j](0≤j<16)。通过设定S[r,c]=in[r+4c](0≤r<4且0≤c<4)来对状态S进行初始化。处理数据的输入块的结果是也包括16个字节的数据的输出块out[j](0≤j<16)。在处理结束时,数据的输出块通过根据out[r+4c]=S[r,c](0≤r<4且0≤c<4)来设定数据的输出块而由状态S形成。AES算法的每个处理步骤或操作对当前状态S进行操作,在每个步骤处修改状态S,从而将其从表示数据的输入块移动至数据的输出块。下面,针对当执行AES算法时执行的每个步骤或函数/运算,应用S'[r,c](0≤r<4且0≤c<4)来表示关于执行该步骤或应用该函数/运算的状态S的元素S[r,c]的结果。
AES算法涉及到许多(Nr)“轮”。对于AES-128而言,Nr=10;对于AES-192而言,Nr=12;对于AES-256而言,Nr=14。应简略地描述所述轮。
使用密钥扩展例程来从初始密码密钥K生成密钥调度表。密钥调度表包括Nr+1个所谓的“轮密钥”RKj(0≤j≤Nr),每个轮密钥是128位。密钥扩展例程的细节对于本公开而言并不重要,因此在本文中不应更详细地对其进行描述。针对关于此内容的更多细节,参见联邦信息处理标准公开197的5.2小节。
在AES中,将字节视为字段GF(28)的元素,其中,GF(28)的乘法是不可约多项式x8+x4 + x3+ x+1的模数。
附图的图1提供了使用AES算法的加密100的概观。
如上所述使用的数据110的输入块——数据in[j](0≤j<16)对状态S进行初始化。
接下来,使用轮密钥RK0用“AddRoundKey”函数120来处理状态S。
接下来,一个接一个地执行轮1、2、……、Nr-1。对于轮R(1≤R<Nr)而言,第R轮涉及到:
(a)使用“SubBytes”函数130来处理状态S,后面是
(b)使用“ShiftRows”函数140来处理状态S,后面是
(c)使用“MixColumns”函数150来处理状态S,后面是
(d)使用轮密钥RKR,使用AddRoundKey函数120来处理状态S。
最后,执行第Nr轮,其涉及到:
(a)使用SubBytes函数130来处理状态S,后面是
(b)使用ShiftRows函数140来处理状态S,后面是
(c)使用轮密钥RKNr,使用AddRoundKey函数120来处理状态S。
因此,第Nr轮与前面的第Nr-1轮相同,只是其不包括MixColumns函数150。
然后可以如上所述由状态S形成数据160的输出块——数据out[j](0≤j<16)。
AddRoundKey函数120涉及到对所使用的当前轮密钥RKR(0≤R≤Nr)的字节与状态S的字节取异或。特别地,如果轮密钥RKR是一系列字节k[j](0≤j<16),则将状态S的元素S[r,c]与字节k[r+4c](0≤r<4且0≤c<4)取异或,使得状态S的元素S[r,c]变成。
SubBytes函数130如下单独地对状态S的16个字节中的每一个进行操作。元素S[r,c](0≤r<4且0≤c<4)被视为GF(28)的元素,并且确定其在GF(28)中的乘法逆。如果我们将此逆表示为具有位的字节b,则(从最高有效位传播至最低有效位),并且如果对元素S[r,c]应用SubBytes函数的结果(即字节S'[r,c])是具有位的字节(从最高有效位传播至最低有效位),则可将S'[r,c]计算为:
常常简单地用查找表来实现SubBytes函数130。特别地,对于0≤r<4且0≤c<4而言,如果对于整数值0≤u、v<16而言S[r,c]=16u+v,则对S[r,c]应用SubBytes函数130将值S[r,c]变成至在下表1的行u和列v处给定的值S'[r,c]。表1中的值采取十六进制。
表1。
表示SubBytes函数130的其它方式是可能的。
ShiftRows函数140对状态S的最后三行的字节进行循环移位。特别地,对于状态S的行r(1≤r<4)而言,行r的元素被向左循环移位r位,即对S[r,c]应用ShiftRows函数140将值S[r,c]设定成由S'[r,c]=S[r,(c+r)(mod4)]给定的值S'[r,c](针对0≤r<4且0≤c<4)。
用MixColumns函数150,通过将该列乘以特定矩阵来处理状态S的每列。特别地,对于0≤c<4而言,MixColumns函数150根据下式对第c列进行操作:
其中,乘以1意味着无变化;乘以2意味着向左移位;并且乘以3意味着向左移位并与初始未移位值取异或。在这里,“移位”意指相应的值的二进制表示向左的移位,如在本领域中已知的那样(使得例如二进制之10110011变成101100110)。在移位之后,如果移位值大于0xFF,则应对移位值与0x11B取异或。
表示MixColumns函数150的其它方式是可能的。
例如,可以将状态S的第c列的元素视为针对GF(28)的四项多项式的系数,此多项式被模x4+1乘以多项式3x3+x2+x+2——结果得到的多项式的系数然后形成状态s的第c列的已更新元素。
附图的图2提供了使用AES算法的解密200的概观。
AddRoundKey函数120、SubBytes函数130、ShiftRows函数140以及MixColumns函数150中的每一个是可逆的,如下面阐述的。
称为InvAddRoundKey 220的AddRoundKey函数120的逆与AddRoundKey函数120完全相同。
可以使用上文在SubBytes函数130的描述中阐述的变换的逆或由下表2给定的查找表来实现称为InvSubBytes 230的SubBytes函数130的逆。表2中的值采取十六进制。特别地,对于0≤r<4且0≤c<4而言,如果对于整数值0≤u、v<16而言S[r,c]=16u+v,则对S[r,c]应用InvSubBytes函数230将值S[r,c]变成至在下表2中的行u和列v处给定的值S'[r,c]。
表2。
称为InvShiftRows 240的ShiftRows函数140的逆对状态S的最后三行的字节进行循环移位。特别地,对于状态S的行r(1≤r<4)而言,行r的元素被向右循环移位r位,即对S[r,c]应用InvShiftRows函数240将值S[r,c]设定成由S'[r,c]=S[r,(c-r)(mod4)]给定的值S'[r,c](针对0≤r<4且0≤c<4)。请注意,对于0≤r<4而言,这等价于将第r行的元素向左循环移位(4-r)模4个位置。
对于称为InvMixColumns 250的MixColumns函数150的逆而言,通过将该列乘以特定矩阵来处理状态S的每列。特别地,对于(0≤c<4)而言,MixColumns函数150根据下式对第c列进行操作:
其中,乘以e意指向左移位,与初始未移位值取异或、再次向左移位、与初始未移位值取异或并再次向左移位;乘以b意指向左移位、再次向左移位、与初始未移位值取异或、再次向左移位并与初始未移位值取异或;乘以d意指向左移位、与初始未移位值取异或、再次向左移位、再次向左移位并与初始未移位值取异或;并且乘以9意指向左移位、再次向左移位、再次向左移位并与初始未移位值取异或。在移位之后,如果移位值大于0xFF,则应对移位值与0x11B取异或。
再次地,可使用多项式表示来实现InvMixColumns 250函数。特别地,可以将状态S的第c列的元素视为针对GF(28)的四项多项式的系数,此多项式然后被多项式(b)x3+(d)x2+(9)x+(e)乘以模x4+1,其中,此多形式的系数是十六进制的——结果得到的多项式的系数然后形成状态s的第c列的已更新元素。
因此,可以通过使用与用于加密的相同密钥调度表应用其对等函数的在图1中阐述的顺序预备队中的InvAddRoundKey函数220、InvSubBytes函数230,InvShiftRows函数240以及InvMixColumns函数250来执行数据块的解密。然而,如在联邦信息处理标准公开197的5.3.5小节中所产生的,并且如图2中所示的,可以执行数据块210的解密200以使用在图1中阐述的函数的相同顺序来形成输出数据块260(但是图1中的函数在图2中被其逆替换),但是密钥调度表被修改以出于解密的目的产生相应的解密密钥调度表(用于解密200的轮密钥在图2中表示为RK'R)。
技术人员将认识到的是在联邦信息处理标准公开197中可以找到针对AES算法的更多细节,并且提供以上描述是为了辅助读者(其被假定为关于AES算法具有丰富知识)。
虽然在这里已经以示例的方式详细地描述了AES算法,但技术人员将认识到的是存在可能用来处理数字数据的许多其它密码算法。技术人员将被假定为关于此类其它密码算法的工作、运算和实现具有丰富知识。
已经知道可以使用映射表或查找表而不是显式计算来实现各种函数,诸如AES中的每个轮(或轮的一部分)。用于函数的查找表一般地将包含针对用于提供每个输出值的函数的(多个)输入值(或与之相关联)编索引的用于函数的所有可能输出值。查找表一般地伴随有某些代码,其将接受(多个)输入值并基于查找表的内容来提供输出值。该代码将通过使用存在于表格中的输入值与输出值之间的索引或关联而使用其接收到的(多个)输入值来从表格中检索(或‘查找’)对应于(多个)输入值的输出值。
当正在由处理器执行程序(或软件)时,其中正在执行该执行的环境是所谓的“白盒”环境,如果用户(或第三方)可访问处理,使得用户可以观察并改变程序的执行(例如通过运行适当的调试程序)的话——此类改变可以是对过程流程的改变或对正在处理的数据的改变。程序执行的此观察和/或改变可称为篡改。用户可观察或改变(或者换言之篡改)程序的执行,以便达到其自己的目的或目标,这在程序将在没被篡改的情况下正常地运行的情况下可能是不可能满足的。将实现特定目的或目标的此类篡改可称为有目的篡改。有目的篡改可涉及到例如观察和/或改变在白盒环境中运行的程序的执行以便获得或推断被程序用来处理数字数据的密码密钥(例如,用于将数据解密的解密密钥)。
已知道用于保护正在白盒环境中运行的数据处理软件应用程序(或程序或系统)的完整性的各种技术。这些技术一般地旨在通过在软件应用程序的控制和/或数据路径中引入附加的复杂性和/或随机性来隐藏应用程序的嵌入式知识。此附加的复杂性和/或随机性具有使软件应用程序的信息(或数据)或执行路径模糊或混淆的效果。作为此混乱的结果,变得更加难以通过代码检查来从应用程序提取信息,并且更加难以发现和/或修改与程序的特定功能相关联的代码。因此攻击者要访问在白盒环境中运行的程序以检索敏感数据或通过篡改程序的执行来改变程序的操作以便达到其自己的目标更加困难得多。同样地,降低了攻击者执行有目的篡改的能力。可认为旨在降低攻击者执行有目的篡改的能力的这些技术将改善软件的防篡改性。如果对于攻击者而言要执行有目的篡改是足够困难的,则出于任何实际目的,可认为软件是防篡改的,即使理论上篡改仍是可能的。
在Stanley Chow、Philip Eisen、Harold Johnson以及Paul C. Van Oorschot在Selected Areas in Cryptography: 9th Annual International Workshop, SAC 2002,St. John's, Newfoundland, Canada, August 15-16, 2002中的“White-BoxCryptography and an AES Implementation”中可以找到用于改善软件的防篡改性的示例性技术,其全部公开被通过引用结合到本文中。“White-Box Cryptography and an AESImplementation”公开了用以通过使用一系列查找表创建算法的密钥相关实现来保护密码算法的完整性的方法。(多个)密钥通过关于该(多个)密钥的算法的部分评估而被嵌入该实现中。部分评估意指适度地尽可能多地评估涉及到该密钥的表达式,并将结果放入代码中而不是完整的表达式。这意味着该实现是(多个)特定密钥所特有的,并且为了使用算法的密钥相关实现,密钥输入是不必要的。因此可以分发算法的密钥相关实现(其可以是用户特定的)以用于对内容或数据进行加密或解密而不是分发密钥(其可以是用户特定的)。通过以下各项创建密钥相关实现,从而隐藏(多个)密钥:(1)针对组合体而不是单独步骤使用表格;用随机双射对这些表格进行编码;以及(3)将密码边界扩展至超过密码算法本身更进一步至包含的应用程序,从而迫使攻击者理解明显更大的代码段以达到其目标。
附图的图3示出示例性函数X的实现310,其在到函数X的输入312处或经由该输入312接收或获得数据d,处理数据d以生成已处理数据X(d),并经由输出316来提供已处理数据X(d)。函数的实现310可能涉及到一个或多个处理步骤,其包括指令、代码、逻辑、查找表或其任何组合中的一个或多个以便响应于在输入312处接收到数据d而在输出316处提供已处理数据X(d)。图3还图示出函数X的已编码或已混淆实现320——本实现320包括已混淆函数X'。在实现320中,通过使用输入编码F和输出编码G来使函数X混淆以形成函数X'。已混淆函数X'在到已混淆函数X'的输入322处或经由输入322来接收或获得输入数据d的已编码表示F(d),处理该已编码F(d)以生成已处理数据X(d)的已编码表示G(X(d)),并经由输出328来提供该已编码表示G(X(d))。已编码表示F(d)是使用函数F编码的数据d。已编码表示G(X(d))是使用函数G编码的数据X(d)。可以将已混淆函数X'视为:
其中,表示通常的函数复合(按照定义,即对于任何两个函数a(x)和b(x)而言,)。函数F-1、X、G在本实现中通过将其组合到单个查找表中而被混淆。函数到单个查找表中的此组合意味着只要函数F和G保持不让攻击者知道,则攻击者不能提取关于函数X的信息,并且因此不能例如提取对于函数X而言是基本或者被函数X使用的秘密信息(诸如密码密钥)。虽然图3的中间将已混淆函数X'图示为一系列的函数F-1、X和G,但这仅仅是出于举例说明的目的。特别地,已混淆函数X'并未分别地实现函数F-1、X和G中的每一个(关于这样做将使数据d和X(d)及函数X的操作暴露于攻击者)——替代地,如上所述,函数F-1、X和G被一起实现为单个函数(诸如经由查找表),使得已混淆函数X'并不使数据d和X(d)暴露于攻击者且不使函数X的处理或操作暴露于攻击者。
可以将任何给定程序视为函数的序列或网络。附图的图4图示出程序或程序的一部分的示例性实现410,由此将连续地评估两个函数X和Y(即作为序列的一部分)以便提供操作:
换言之,函数序列在到序列中的第一函数、即函数X的输入312处或经由该输入312来接收或获得数据d,函数X然后处理数据d以生成已处理数据X(d)并经由输出316来提供已处理数据X(d),如上文所讨论的。已处理数据X(d)被经由第一函数X的输出316提供给函数序列中的第二函数、即函数Y的输入412,函数Y然后处理数据X(d)以生成已处理数据Y(X(d))并经由输出416来提供已处理数据Y(X(d))。以这种方式,在第二函数Y的输出416处提供的已处理数据Y(X(d))被提供为来自函数X和Y的序列的输出。再次地,可以将函数X和Y中的每一个分别地实现为指令、代码、逻辑或查找表或其任何组合中的一个或多个,如上文所讨论的。然而,当在白盒环境中执行函数X和Y的序列的实现410时,攻击者可以观察和/或修改以下各项中的一个或多个:函数X和Y中的每一个的操作;提供给函数序列的输入312的数据d;在函数序列的输出416处提供的已处理数据Y(X(d));以及已处理数据X(d),其被从第一函数X的输出316提供给第二函数Y的输入412。因此,当在白盒环境中执行X和Y的函数序列作为实现410时,由该函数序列提供的操作易受篡改。其中函数X和Y的序列的实现410形成用于程序的密码组成部分的密钥相关实现,例如可以使攻击者通过观察或篡改函数X和/或Y和/或向其提供和/或在其之间提供的数据来提取或推断密码密钥。为了克服此问题,函数X和Y的序列中的函数X和Y可以分别地实现为那些函数X和Y的已混淆型式X'和Y'。
图4还图示出函数X和Y的序列的此类已编码或已混淆实现420——实现420包括已混淆函数X'和已混淆函数Y'。在实现420中,通过将函数X与输入编码F和输出编码G组合来形成函数X的已混淆函数X',如先前关于图3所述。函数Y的已混淆函数Y'以与已混淆函数X'类似的方式形成,但是被用于实现已混淆函数Y'的输入编码G和输出编码H可不同于被用于实现已混淆函数X'的输入编码F和输出编码G。因此可以将函数Y的已混淆实现Y'表示为:
被用于已混淆函数Y'的输入编码G应与被用于先前函数X'的已混淆实现的输出编码G匹配。这意味着在已混淆函数X'的输出328处使用输出编码G提供的已处理数据G(X(d))的表示可以被用作到已混淆函数Y'的输入,其预期将接收使用输入编码G(其预期将接收G(X(d)))表示的数据X(d) 。将认识到的是虽然函数G被视为用于已混淆函数Y'的输入编码(因为将在到已混淆函数Y'的输入328处接收到的数据X(d)被用函数G编码,使得其为数据X(d)的已编码表示G(X(d))),但被与函数Y组合而实现已混淆函数Y'的实际函数是函数G的逆,即函数G-1,其具有抵消输入编码G以允许函数Y对数据X(d)进行操作的效果。
已混淆函数Y'从已混淆函数X'的输出328接收表示为G(X(d))(即用函数G编码)的数据X(d)。已混淆函数Y'处理已处理数据X(d)的已编码表示G(X(d))以生成已处理数据Y(X(d))的已编码表示H(Y(X(d))),并经由输出428处提供已编码表示H(Y(X(d)))。由于已混淆函数Y'是函数序列中的最后一个函数,所以已混淆函数Y'的输出428是函数序列的已混淆实现420的输出。
再次地,虽然图4的中间将已混淆函数Y'视为一系列的函数G-1、Y和H,但这仅仅是出于图示的目的。特别地,已混淆函数Y'并未分别地实现函数G-1、Y和H中的每一个(关于这样做将使数据X(d)和Y(X(d))及函数X的操作暴露于攻击者)——替代地,如上所述,函数G-1、Y和H被一起实现为单个函数(诸如经由查找表),使得已混淆函数Y'并不使数据X(d)和Y(X(d))暴露于攻击者且不使函数Y的处理或操作暴露于攻击者。
将认识到的是为了正确地计算函数序列的已混淆实现420的输出H(Y(X(d)))的表示,必须使用已混淆函数(即F)的序列中的第一已混淆函数的输入编码将到实现420的输入d表示为F(d),同时序列中的每个已混淆函数(除序列中的最后一个已混淆函数之外)的输出编码必须与下一函数的输入编码匹配。序列中的最后一个混淆函数(即H)的输出编码指定从已混淆函数序列提供的输出的表示(即H(Y(X(d))) )。
因此可以将函数X和Y的序列的已混淆实现420表示为:
这样,适当地计算,虽然需要用函数F对输入d进行编码且需要用函数H-1对输出H(Y(X(d)))进行解码。可以在相应的查找表中单独地表示每个已混淆函数X'和Y',使得在实现已混淆函数Y'的表格中将函数H、Y和G-1组合,并且在实现已混淆函数X'的不同表格中实现函数G、X和F-1。通过以这种方式将函数组合到单个查找表中,函数X和Y的细节、其进行操作和输出的数据以及函数F、G和H被隐藏。同时,使用编码G(即作为G(X(d)))来表示在已混淆实现420中的查找表之间传递的数据X(d)。这意味着攻击者不能观察已混淆实现420中的已混淆函数之间的数据流程中的任何有用信息。
从已混淆函数序列提供的输出G(X(d))的表示将对应于由函数G编码的未混淆函数序列的输出X(d),假设输入数据d被提供给表示为F(d)的已混淆函数序列(即用函数F编码),并且在处理期间不发生错误。
用于函数序列的已混淆实现420的输入和输出编码的使用具有将已混淆函数更紧密地绑定到实现420在其中操作的程序或系统的其余部分。这是因为提供数据给(或调用)已混淆函数序列的程序或系统的其余部分中的函数提供使用输入编码F编码的数据的表示,而从已混淆函数序列接收数据的程序或系统的其余部分中的函数接收使用输出编码H编码的已处理数据的表示。因此,混淆的效果将攻击者将必须理解以超过函数序列本身的代码扩展至该程序的周围函数或部分。在其中已混淆实现420是程序的密码组成部分(其一般地将是较大包含系统或应用程序的一部分)的情况下,输入和输出编码的使用具有将密码算法本身扩展超过密码边界进一步进入包含系统或应用程序的效果。这使得更难以从应用程序的其余部分提取密码算法的密钥特定实现并迫使攻击者理解代码的更大部分以便篡改软件,从而使得软件更难以篡改。
虽然图3和4图示出被向其应用输入和输出编码两者的已混淆函数,但将认识到的是可以通过仅将输入或输出编码与函数组合来使函数混淆。作为示例,虽然在图4中未示出,但可以实现已混淆函数X',使得其使用输出编码G而不是输入编码F。同样地,可以实现已混淆函数Y',使得其使用输入编码G而不是输出编码H。可以将此布置表示为:
因此,到已混淆函数序列的输入可以是数据d,其为与将提供给未混淆函数序列的相同的输入表示,并且已混淆函数序列的输出将是Y(X(d)),其为与未混淆函数序列将提供的相同的输出表示。然而,函数序列仍被混淆,从而攻击者不能观察函数X的结果或函数Y的输入。因此,假设函数G的细节是攻击者未知的,攻击者仍将难以确定这些函数的细节以便提取密钥。
虽然图4图示出然后被实现为已混淆函数X'和Y'的两个函数X和Y的序列,但将认识到的是可以将任何数目的函数(以系列、网络、链等形式)实现为相应已混淆函数的系列、网络、链等。
发明内容
攻击者不断地开发新方法或对现有方法的改进以便攻击软件,特别是在白盒环境中运行的软件。因此,当用软件来实现算法或函数时期望能够在该实现中包括使得攻击者更加难以成功地攻击或篡改该实现的更多技术。
根据本发明的第一方面,提供了一种用软件来执行密码算法的方法,该密码算法包括一个或多个处理步骤,其中,每个处理步骤被布置成处理到处理步骤的相应的输入从而生成对应于该输入的输出,其特征在于对于所述一个或多个处理步骤中的至少一个中的每一个而言,该方法包括:
提供用于处理步骤的相应的输入作为到处理步骤的多个实现的输入,
其中,每个实现被布置成输出使用相应的预定输出表示所表示的相应中间结果;以及
使用中间结果的表示来生成用于基于每个中间结果的处理步骤的结果,
其中,如果每个中间结果是对应于用于处理步骤的输入的输出,则用于处理步骤的结果是对应于用于处理步骤的输入的输出。
在本发明的某些实施例中,每个实现使用相应的预定输出表示,其不同于其它实现所使用的相应的预定输出表示。
在本发明的某些实施例中,针对实现中的至少一个,相应的预定表示将中间结果表示为中间结果。
在本发明的某些实施例中,每个预定表示是双射映射。
在本发明的某些实施例中,作为中间结果的函数来生成结果,使得如果所有中间结果采取相同的值,则结果采取该值。
在本发明的某些实施例中,作为中间结果的函数而生成结果,使得如果中间结果并未全部采取相同的值,则结果采取随机值或预定值。
在本发明的某些实施例中,作为中间结果的函数来生成结果,使得如果中间结果并未全部采取相同的值,则根据该结果来确定与用于处理步骤的输入相对应的输出是不可行的。
在本发明的某些实施例中,作为中间结果的函数来生成结果,使得如果中间结果并未全部采取相同的值,则结果是中间结果的平均值。
在本发明的某些实施例中,中间结果的平均值是中间结果的模。
在本发明的某些实施例中,使用中间结果的表示来生成用于基于每个中间结果的处理步骤的结果包括:
确定是否所有中间结果都采取相同的值,以及;
如果确定中间结果并未采取所有相同的值,则执行预定动作。
在本发明的某些实施例中,预定动作包括以下各项中的一个或多个:
(a)停止执行密码算法;
(b)记录中间结果并未全部采取相同的值。
在本发明的某些实施例中,将用于处理的输入提供为到使用预定编码进行编码的处理步骤的所述多个实现的输入。
在本发明的某些实施例中,生成结果包括生成使用预定编码进行编码的结果。
在本发明的某些实施例中,一个或多个处理步骤中的所述至少一个是包括用于该操作的多个处理步骤的操作。
在本发明的某些实施例中,一个或多个处理步骤中的所述至少一个包括用于密码算法的一轮或多轮。
在本发明的某些实施例中,密码算法是根据AES或三重DES的加密或解密。
在本发明的某些实施例中,一个或多个处理步骤中的所述至少一个一起形成用于密码算法的最终处理操作。
在本发明的第二方面,提供了一种使得数据处理器能够用软件来执行密码算法的方法,该方法包括:
生成密码算法的实现,该实现被布置成使得由处理器进行的实现的执行促使处理器执行根据前述权利要求中的任一项所述的方法;以及
将数据处理器配置成执行密码算法的实现。
在本发明的第三方面,提供了一种被布置成执行根据第一或第二方面中的任一个的方法的系统。
在本发明的第四方面,提供了一种计算机程序,其在被处理器执行时促使处理器执行根据第一或第二方面中的任一个的方法。
在本发明的第五方面,提供了一种计算机可读介质,其存储根据第四方面的计算机程序。
附图说明
现在将仅以示例的方式参考附图来描述本发明的实施例,在所述附图中:
图1提供了使用AES算法的加密的概观。
图2提供了使用AES算法的解密200的概观。
图3示意性地图示出示例性函数X和已混淆函数X'的实现。
图4示意性地图示出包括已混淆函数X'和Y'的函数X和Y的序列的已混淆实现。
图5示意性地图示出可在其上面运行本发明的示例性计算机系统。
图6示意性地图示出根据本发明的实施例的函数X的实现。
图7示意性地图示出根据本发明的另一实施例的函数X的已混淆实现。
图8示意性地图示出根据本发明的另一实施例的系统。
具体实施方式
在随后的描述和附图中,描述了本发明的某些实施例。然而,将认识到的是本发明不限于所描述的实施例,并且某些实施例可不包括下面描述的所有特征。然而,将认识到的是在不脱离如在所附权利要求中阐述的本发明的更宽泛精神和范围的情况下可对其进行各种修改和变更。
(1)系统概述
图5示意性地图示出示例性计算机系统500,其可用来执行软件、软件部件、计算机程序或程序模块,诸如下面进一步描述的根据本发明的函数的实现。计算机系统500包括计算机502。计算机502包括存储介质504、存储器506、处理器508、接口510、用户输出接口512、用户输入接口514和网络接口516,其全部被通过一个或多个通信总线518链接在一起。
存储介质504可以是任何形式的非易失性数据存储设备,诸如硬盘驱动、磁盘、光盘、ROM等中的一个或多个。存储介质504可存储用于处理器508执行以便计算机502运行的操作系统。存储介质504还可存储一个或多个计算机程序(或软件或指令或代码)。
存储器506可以是适合于存储数据和/或计算机程序(或软件或指令或代码)的任何随机存取存储器(存储单元或易失性存储介质)。
处理器508可以是适合于执行一个或多个计算机程序(诸如存储在存储介质504上和/或存储器506中)的任何数据处理单元,所述计算机程序其中的某些可以是根据本发明的实施例的计算机程序或者在被处理器508执行时促使处理器508执行根据本发明的实施例的方法并将系统500配置成根据本发明的实施例的系统的计算机程序。处理器508可包括并行地或相互合作地操作的单个数据处理单元或多个数据处理单元。处理器508在执行用于本发明的实施例的数据处理操作时可向存储介质504和/或存储器506存储数据和/或从其读取数据。
接口510可以是用于提供到在计算机502外部或可从其去除的设备522的接口的任何单元。设备522可以是数据存储设备,例如光盘、磁盘、固态存储设备等中的一个或多个。设备522可具有处理能力——例如,设备可以是智能卡。接口510因此可根据其从处理器508接收到的一个或多个命令从设备522访问数据或向其提供数据或与之对接。
用户输入接口514被布置成从系统500的用户或操作员接收输入。用户可经由系统500的一个或多个输入设备来提供此输入,诸如鼠标(或其它定点设备)526和/或键盘524,其被连接到用户输入接口514或与之通信。然而,将认识到的是用户可经由一个或多个附加或替换输入设备(诸如触摸屏)向计算机502提供输入。计算机502可将经由用户输入接口514从输入设备接收到的输入存储在存储器506中以便处理器508随后访问和处理,或者将其直接传递至处理器508,使得处理器508可以相应地对用户输入进行响应。
用户输出接口512被布置成向系统500的用户或操作员提供图形/视觉和/或音频输出。同样地,可将处理器508布置成命令用户输出接口512形成表示期望图形输出的图像/视频信号,并且将此信号提供给被连接到用户输出接口512的系统500的监视器(或屏幕或显示单元)520。另外或替换地,可将处理器508布置成命令用户输出接口512形成表示期望音频输出的音频信号,并且将此信号提供给被连接到用户输出接口512的系统500的一个或多个扬声器521。
最后,网络接口516提供用于计算机502从和/或向一个或多个数据通信网络下载和/或上传数据的功能。
将认识到的是在图5中示出并在上文描述的系统500的架构仅仅是示例性的,并且可使用具有不同架构(例如具有比图5中所示更少的部件或具有除图5中所示的附加和/或替换部件)的其它计算机系统500。作为示例,计算机系统500可以包括以下各项中的一个或多个:个人计算机;服务器计算机;移动电话;平板电脑;膝上计算机;电视机;机顶盒;游戏控制台;个人计算机;服务器计算机;其它移动设备或消费电子设备;智能卡等。
(2)根据本发明的实施例来实现算法
本发明的实施例涉及密码算法的提供、实现以及执行。算法可以是例如以下各项的整体或一部分:加密或解密算法;用以对数据进行数字签名的算法;用以生成消息认证代码的算法;用以对数据的来源或完整性进行认证或验证的算法等。该算法将利用秘密或敏感数据(诸如一个或多个密码密钥)——期望防止攻击者能够访问或推断此秘密或敏感数据,特别是当在白盒环境中用软件来执行算法时。
密码算法包括一个或多个处理步骤。例如,在图1中所示的AES加密100中,算法的一个或多个处理步骤每个可包括AES加密100的Nr轮中的一个或多个。用替换的观点,算法的一个或多个处理步骤每个可以是AddRoundKey函数120、SubBytes函数130、ShiftRows函数140和MixColumns函数150中的相应的一个。同样地,用替换观点,AddRoundKey函数120、SubBytes函数130、ShiftRows函数140和MixColumns函数150可使用其自己的相应的处理步骤来实现,其然后可被视为密码算法的一个或多个处理步骤。不同观点的混合体当然是可能的,如关于什么是“处理步骤”的其它观点一样。因此,处理步骤的性质取决于一个人观看算法的操作时的粒度或分辨率。然而,一般地,每个处理步骤被布置成处理(基于或根据相应的功能、代码等)到处理步骤的相应的输入,从而生成对应于输入的输出——该输入可以是到算法的输入的整体或一部分,或者可以是算法的中间结果的整体或一部分;输出可以是算法的输出的整体或一部分,或者可以是算法的中间结果的整体或一部分。
本发明的实施例通过以特定方式来提供或实现一个或多个处理步骤中的至少一个(如下面应参考图6更详细地描述的)且还使用那些实现作为密码算法的执行或处理的一部分而进行操作。
图6示意性地图示出根据本发明的实施例的图3的函数或处理步骤X的实现610。函数X是上述密码算法的处理步骤中的一个。如上文参考图3所述,函数X被布置成响应于接收到数据d作为输入而提供或生成已处理数据X(d)作为输出。
实现610包括输入612、函数X的多个(n>1)实现620-1,……,620-n,结果生成模块640以及输出648。
输入612被配置成接收(或获得)数据d并将接收数据d提供给(或使得可用)函数X的每个实现620-i(i=1,……,n)的相应的输入622-i,使得函数X的所述多个实现620-1,...,620-n中的每一个可以接收(或获得)并处理数据d。
函数X的每个实现620-i(i=1,……,n)被布置成处理在其相应的输入622-i处接收到的数据d,从而产生中间结果yi的相应的表示Mi(yi)。在这里,中间结果yi应(在不存在错误或被攻击者篡改的情况下)等于X(d),即使用函数X来处理数据d的结果。函数X的实现620-i(i=1,……,n)在实现620-i的相应的输出628-i处输出(或提供或使得可用)生成的表示Mi(yi)。函数X的每个实现620-i(i=1,...,n)因此可被视为产生使用相应的函数Mi作为值(或表示)Mi(yi)编码(或表示)的相应的中间结果yi(其应等于X(d))。
函数X的每个实现620-i(i=1,……,n)是通过将函数X与相应的预定输出编码(或函数或表示)Mi组合而形成的。函数X的实现620-i因此将产生正常地将从使用函数X来处理数据d得到的已处理数据X(d)的表示Mi(X(d))。因此,可通过实现函数(即,函数X与其相应的输出编码Mi组合)来实现函数X的实现620-i(i=1,……,n)。这可以例如通过将函数实现为相应查找表来实现。替换地,可通过对输入数据d执行函数X的整体或一部分作为一个或多个初始步骤、后面是执行函数Mi(潜在地与函数X的任何其余部分组合)作为一个或多个后续步骤来实现函数X的实现620-i(i=1,……,n)——在此类示例中,两个不同实现620-i和620-j(i≠j)可以不同方式实现函数X。
将认识到的是函数X的实现620-i(i=1,...,n)中的一个或多个可并不实际上显示地计算其相应的中间结果yi。例如,如果函数X的实现620-i将实现为单个查找表,则yi的值未被显示地计算并存储在存储器中——替代地,表示Mi(yi)是实际上直接产生的东西。
用于实现610的软件因此具有n个不同部分(或部件或模块),其每个将计算其中间结果yi的相应的表示Mi(yi)(使用相应的表示Mi)。这些部分将可被遍布于软件的二进制可执行指令,使得攻击者难以识别那些部分。
函数Mi(i=1,……,n)可以是用于生成中间值的表示的任何适当函数。然而,函数Mi(i=1,……,n)优选地是双射(使得可根据Mi的知识从Mi(yi)获得yi的值),从函数X的可能输出值的范围R映射到其它值的相应大小范围上(此范围优选地也是范围R)。
函数Mi(i=1,……,n)可相互不同,即函数X的特定实现620-i的输出编码Mi可不同于函数X的任何其它实现620-j(j=1,……,n;j≠i)的输出编码Mj。
替换地,实现620-i中的两个或更多可具有相同的输出编码Mi。
针对函数X的实现620-i中的一个或多个,相应的输出编码Mi可以是琐碎输出编码,使得对于所有z而言Mi(z)=z,在这种情况下,经由该实现620-i的输出628-i从该实现620-i获得的中间结果yi的表示是值yi。函数X的此类实现620-i可以是与函数X的实现620-j(对于其而言输出编码Mj并不是琐碎输出编码)不可区别的——如果例如使用相应的查找表来实现每个实现Mi和Mj,则发生此情况,在这种情况下攻击者不能知道哪个表格对应于使用琐碎编码。
实现610被配置成使得来自函数X的每个实现620-i(i=1,……,n)的输出Mi(yi)被提供给结果生成模块640。因此,结果生成模块640可从函数X的每个实现620-i(i=1,……,n)接收或获得该实现620-i的中间结果yi的相应的表示Mi(yi)。如所示,在不存在错误或被攻击者篡改的情况下,对于i=1,……,n而言yi=X(d)。
结果生成模块640被配置成使用表示Mi(yi)(i=1,……,n)来生成结果r。结果r是基于每个中间结果yi(i=1,……,n)。特别地,如果每个中间结果yi实际上采取期望值X(d)(即如果函数X处理输入数据d将发生的输出)(其正常地应发生),使得由结果生成模块640接收到的值是期望表示Mi(X(d))(i=1,……,n),则结果r等于X(d)(即当函数X处理输入数据d时将从函数X发生的输出)。这应简短地更详细地描述。
结果生成模块640被配置成经由输出648来输出或提供结果r。
可将“正常处理条件”视为其中软件的处理在没有任何篡改(或其它处理错误)发生的情况下进行的那些。可将用于数据d的函数X的“正常结果”视为将从由函数X在正常处理条件下处理数据d得到的已处理数据X(d)。
在正常处理条件下,由函数X的实现620-i(i=1,……,n)提供的中间结果yi的表示Mi(yi)将对应于使用编码Mi编码的函数X的正常结果X(d),即Mi(X(d))。也就是说,中间结果yi本身将对应于函数X的正常结果X(d)。因此,在正常处理条件下,结果生成模块640的结果r是值X(d)。
然而,如上文所讨论的,如果在白盒处理环境中执行实现610,则攻击者可尝试修改实现610所使用的处理流程和/或数据值。这可例如被执行以尝试根据实现610来确定或推断特定信息(诸如在函数X中实现或使用的密码密钥)。此类攻击的示例是如本领域的技术人员已知的所谓错误注入攻击。特别地,用函数X的实现310,攻击者也可修改函数X的一个或多个中间结果,从而产生攻击者可观察到的函数X的已修改输出。通过执行多个此类修改,攻击者生成许多修改观察对,攻击者然后可将其用来尝试从函数X推断期望信息(诸如正在使用的密码密钥)。
当使用函数X的实现610时,攻击者可如上文所阐述的那样篡改函数X的实现620-i1,...,620-iw(1≤i1,...,iw≤n)中的一个或多个的处理(对于某些整数w而言,1≤w≤n),使得从那些“被篡改”实现620-i1,...,620-iw获得的中间结果不再是函数X的正常(或期望)结果,即。这些不正确中间结果并不对应于用于函数X的正常结果,并且并未与可从由尚未被篡改的函数X的实现620-i进行的处理获得的任何正常中间结果相对应。此外,中间结果不可能彼此相对应,即使函数X的所有实现620-i的处理都被篡改,因为其可以发生的唯一方式将是如果对函数X的每个实现620-i的处理应用相同的篡改——这将涉及到攻击者的明显增加的努力,因为其将需要与函数X的实现620-i(i=1,……,n)中的每一个相对应的软件中的每个代码段的知识。如果函数X的不同实现620-i(i=1,……,n)实际上以不同的方式执行函数X,则情况尤其如此。即使在由此函数X的两个实现620-i和620-j使用相同输出编码(即Mi=Mj)的琐碎情况下,攻击者也只能使中间结果yi和yj彼此相对应,如果其以完全相同的方式篡改函数X的实现620-i和620-j中的每一个的处理的话。很明显,这将要求攻击者更详细地理解软件,并且攻击者要通过更简单化或随机化篡改方法来实现将是不可能的。然而,在不那么琐碎的情况下,其中实现620-i(i=1,……,n)使用与函数X组合不同的相应的输出编码Mi,攻击者更加难以知道如何以在函数X的实现620-i的输出处表示的中间结果yi将彼此相对应的方式来篡改软件。
总而言之,函数X的所述多个实现620-i(i=1,……,n)产生相应的中间结果yi的相应的表示Mi(yi)。
在正常处理条件下,yi=X(d)(i=1,……,n),即中间结果与由函数X产生的正常结果相同。相反地,当攻击者修改实现620-i中的一个或多个的处理或其所使用的数据时,函数X的所述多个实现620-i(i=1,……,n)将产生相应的中间结果yi的相应的表示Mi(yi),但是很可能这些中间结果yi将并非全部彼此相同(由于攻击者要识别并操纵函数X的每个实现620-i的处理使得中间结果yi彼此相同是极其困难的)。
现在将更详细地描述结果生成模块640。一般地,结果生成模块640使用其接收到的表示Mi(yi)(i=1,……,n)来基于所有中间结果yi(i=1,……,n)生成结果r,并在实现610的输出648处或经由该输出648来提供结果r。结果生成模块640的一般操作是确保生成的结果r将对应于用于函数X的正常结果X(d),如果处理条件正常的话。因此,如果中间结果yi(i=1,……,n)全部等于X(d),则结果r将等于X(d)。
优选地,如果攻击者修改实现620-i中的一个或多个的处理或其所使用的数据,使得中间结果yi(i=1,……,n)中的一个或多个不同于其它中间结果yi(i=1,……,n),则结果生成模块640可被布置成执行相应动作。
优选地,如果攻击者修改实现620-i中的一个的处理或其所使用的数据,使得中间结果yi不等于X(d),则结果发生模块640可被布置成使得结果r不等于yi(即攻击者将被提供与其对函数X的攻击并不相对应的结果r)——这帮助阻挠攻击者执行错误注入攻击的尝试。
存在可实现结果生成模块640形成结果r的此一般功能的许多不同方式,现在将讨论其某些示例。
在某些实施例中,结果生成模块640实现函数h,其具有这样的性质,即如果所有输入zi是相同的,则,并且(优选地)(或者对于任何i=1,……,n而言,至少不可能等于zi,如果输入zi中的某些并不彼此相等的话。在这种情况下,结果r可以是。
在某些实施例中,函数h可通过将所有中间结果yi组合在一起以形成结果r来形成结果r,使得结果r的不同部分来自中间结果yi中的相应的一个的相应部分。例如,如果结果r是128位值,并且存在n=4个中间结果yi,则可将r的位1—32设定成是y1的位1—32,可将r的位33—64设定成是y2的位33—64,可将r的位65—96设定成是y3的位65—96,并且可将r的位97—128设定成是y4的位97—128(但是将认识到的是可以使用结果r的不同分区,其可被交织且可具有不同大小)。在正常处理条件下,所有中间结果yi将对应于用于函数X的正常结果,使得用这种方法将产生的结果r将是用于函数X的正常结果。如果某些中间结果yi相互不同,则结果r不可能对应于中间结果yi中的任何一个。
在某些实施例中,函数h可以通过将所有中间结果yi一起取异或以形成结果r来形成结果r。如果n是奇数,则结果r将等于y1,……,yn,如果所有中间结果y1,…,yn彼此相同的话。如果某些中间结果yi相互不同,则结果r不可能对应于中间结果yi中的任何一个。
在某些实施例中,函数h形成结果r,使得如果中间结果y1,……,yn并未全部采取相同的值,则要根据结果r来确定与用于处理步骤的输入d相对应的输出X(d)是不可行的。这可使用本文所述的任何技术来实现。
在某些实施例中,在参数y1,……,yn中使用多元多项式来形成结果r(其可以涉及到由结果生成模块640随机地生成的一个或多个系数),其中,此多项式具有如上文所阐述的函数h的性质。例如,如果n=2,则可设定,其中,系数R可以是常数,或者可以是由结果生成模块640随机地生成的值。
在某些实施例中,结果生成模块640可基于中间结果yi是否彼此相对应来执行关于篡改是否已发生的确定。这可以通过比较值y1,……,yn或比较表示来执行。如果值y1,……,yn是全部相同的(或者如果表示全部表示同一值),则确定篡改尚未发生;否则确定篡改已经发生,在这种情况下结果生成模块640可采取预定动作。
在某些实施例中,如果确定篡改并未发生,则结果生成模块640可将结果r设定成是中间结果y1,……,yn中的任何一个。
在某些实施例中,如果确定篡改已经发生,则结果生成模块640可生成任意结果r,诸如将结果r生成为是(或基于)随机或伪随机数,或者将结果r的所有位设定成是0或1,或者将r的值设定成是某个其它预定值。这样,结果r与由函数X的实现620-i(i=1,……,n)执行的处理无关,并且因此结果r对攻击者而言是毫无意义的。
在某些实施例中,如果确定篡改已经发生,则可将结果生成模块640实现成返回可对应于用于函数X的正常结果的结果r。作为示例,结果生成模块640可实现表决机制,由此,当由已经产生的中间结果y1,……,yn采取多个不同的值时(其中的某些可等于X(d)),结果生成模块640可确定中间结果y1,……,yn的哪个值是最常见的,并将结果r设定成该值(即将r设定成中间结果y1,……,yn的模)。因此,如果攻击者只能修改函数X的少数的实现620-i(i=1,……,n),则结果r仍将等于正常结果X(d)。同样地,可将结果生成模块640实现成从而通过由中间结果y1,……,yn的多个值形成结果r来提供纠错的措施——例如,可将结果r的第k位设定成是用于中间结果y1,……,yn的第k位的最频繁值。
因此,在某些实施例中,将结果r实现为中间结果y1,……,yn的平均值(例如,模、平均值或中值)。在某些实施例中,如果结果生成模块640确定篡改已经发生,则结果生成模块640可提供篡改已经发生的指示。该指示可例如用来记录篡改尝试——实现610的提供者可被告知此尝试(例如如果其可访问该记录的话)。
在某些实施例中,如果结果生成模块640确定篡改已经发生,则结果生成模块640可终止算法的执行(即停止实现610形成其一部分的软件的执行),在这种情况下,可实际上不输出结果r(或者可将结果r视为停止算法执行的指令)。
将认识到的是结果生成模块640可实现用于结果生成模块640的功能的上述示例中的中的一个或多个。还将认识到的是结果生成模块640可执行任何其它处理以使得攻击者更加难以使用实现610的输出作为错误注入攻击(或另一种攻击)的一部分。
优选地,以混淆方式(如上所述)实现结果生成模块640,其确保被用于中间结果yi的表示Mi(yi)的编码Mi(i=1,……,n)被针对攻击者隐藏。这可通过将结果生成模块640实现为将比较块或函数h的功能与编码Mi组合的单个查找表或查找表网络来实现。在结果生成模块640(或函数X的实现)被实现为单个查找表的情况下,可认为并未发生活动功能,诸如确定篡改是否已发生的步骤,因为结果仅仅是通过在查找表中查找结果而确定的。尽管如此,将认识到的是可以如上所述地使用查找表来实现此类活动功能。
可能的是攻击者可尝试篡改结果生成模块640的处理,然而将认识到的是由于结果生成模块640并未实现函数X,则攻击者不能通过这样做来导出关于函数X的任何有用信息(诸如可能在函数X的密钥相关实现中体现的任何密码密钥)。
如上文所阐述的,函数X可包括多个其自己的处理步骤,每个处理步骤向后续处理步骤传递值。通过将函数X实现为实现610,攻击者要基于那些值来执行攻击明显更加困难,因为攻击者将需要能够修改函数X的每个实现620-i中的那些值。
在本发明的某些实施例中,实现610是使用混淆技术实现的,如图7中所示。特别地,图7示意性地图示出图6的实现610的已混淆型式710。特别地,型式710以参考图3所述的方式使用输入编码F和/或输出编码G。
在一个实施例中,所实现的算法是AES的加密100或解密200。如上文参考图1和2所述,根据AES的加密100或解密200包括许多轮处理,由此,每个轮包括许多函数,诸如SubBytes函数130、ShiftRows函数140、MixColumns函数150、AddRoundKey函数120、InvSubBytes函数230、InvShiftRows函数240、InvMixColumns函数250和InvAddRoundKey函数220。如上文所讨论的,可将AES算法的函数实现为查找表并使用输入和输出编码混淆。AES算法的密钥相关实现可通过用部分评估进一步将AES轮密钥与适当函数组合来创建。本发明的实施例可用来实现AES的加密100或解密200并执行用于该加密100或解密200的处理。例如,可将函数X取为是加密100或解密200的一轮或多轮,使得使用用于函数X的实现610、710来实现并执行构成加密100或解密200的那些轮的那些函数。在此类实施例中,函数X优选地包括加密100或解密200的最终轮(诸如最后3轮)中的一个或多个。其类似地适用于其它基于轮的密码算法,诸如DES或三重DES(其是技术人员众所周知的)。
图8示意性地图示出根据本发明的实施例的系统。
提供者800被布置成采取初始算法(或运算或函数或进程)A,并使用生成程序802生成初始算法A的组合型式AT。该算法包括如上文所阐述的一个或多个处理步骤,并且这些处理步骤中的至少一个是使用用于该处理步骤的实现610、710而在型式AT中实现的,如上文参考图6和7所述。生成程序802可利用一个或多个参数804来形成型式AT。这些参数804可例如是定义在实现610、710中使用的编码Mi中的一个或多个的参数。提供者800向客户端810提供型式AT,使得客户端810可以执行、使用或实现型式AT。可将型式AT作为软件和/或硬件提供给客户端810。
将认识到的是所述方法已示为按照特定顺序执行的单独步骤。然而,技术人员将认识到的是可在仍实现期望结果的同时按照不同的顺序将这些步骤组合或执行。
将认识到的是可使用多种不同的信息处理系统来实现本发明的实施例。特别地,虽然附图及其讨论提供了示例性计算系统和方法,但提出这些仅仅是为了在讨论本发明的各种方面时提供有用的参考。可在任何适当数据处理设备上执行本发明的实施例,诸如个人计算机、膝上计算机、个人数字助理、移动电话、机顶盒、电视、服务器计算机等。当然,已出于讨论的目的简化了系统和方法的描述,并且其仅仅是可用于本发明的实施例的系统和方法的许多不同类型中的一个。将认识到的是逻辑块之间的边界仅仅是说明性的,并且替换实施例可将逻辑块或元件合并,或者可对各种逻辑块或元件施加功能的替换分解。
将认识到的是可将上述功能实现为作为硬件和/或软件的一个或多个相应模块。例如,可将上述功能实现为由系统的处理器执行的一个或多个软件部件。替换地,可将上述功能实现为硬件,诸如在一个或多个现场可编程门阵列(FPGA)和/或一个或多个专用集成电路( ASIC)和/或一个或多个数字信号处理器(DSP)和/或其它硬件布置上。包含在其中或者如上所述的流程图中实现的方法步骤每个可由相应的各自的模块实现;包含在其中或者如上所述的流程图中实现的多个方法步骤可一起由单个模块实现。
将认识到的是,只要由计算机程序来实现本发明的实施例,则承载计算机程序的存储介质和传输介质形成本发明的方面。计算机程序可具有一个或多个程序指令或程序代码,其在被计算机执行时执行本发明的实施例。如本文所使用的术语“程序”可以是被设计成用于在计算机系统上执行的指令序列,并且可包括子例程、函数、程序、模块、对象方法、对象实现、可执行应用程序、小程序、小服务程序(servlet)、源代码、目标代码、共享库、动态链接库和/或被设计成用于在计算机系统上执行的其它指令序列。存储介质可以是磁盘(诸如硬盘或软盘)、光盘(诸如CD-ROM、DVD-ROM或BluRay磁盘)或存储器(诸如ROM、RAM、EEPROM、EPROM、闪存或便携式/可移动存储器件)等。所述传输介质可以是通信信号、数据广播、两个或更多计算机之间的通信链路等。
Claims (17)
1.一种用软件来执行密码算法的方法,该密码算法包括一个或多个处理步骤,其中每个处理步骤被布置成处理到处理步骤的相应的输入,从而生成对应于该输入的输出,其特征在于,针对所述一个或多个处理步骤中的至少一个中的每一个,该方法包括:
提供用于处理步骤的相应的输入作为到处理步骤的多个实现的输入,其中每个实现被布置成输出使用相应的预定输出表示所表示的对应中间结果,其中多个实现中的至少一个实现使用预定输出表示,其不同于由多个实现中的另一实现所使用的预定输出表示;以及
使用中间结果的表示来生成基于中间结果中的每个的处理步骤的结果,其中如果每个中间结果是对应于用于处理步骤的输入的输出,则用于处理步骤的结果是对应于用于处理步骤的输入的输出。
2.权利要求1的方法,其中针对实现中的至少一个,相应的预定表示将中间结果表示为中间结果。
3.权利要求1的方法,其中每个预定表示是双射映射。
4.前述权利要求中的任一项的方法,其中所述结果是作为中间结果的函数而生成的,使得下面中的一个或多个适用:(a)如果所有中间结果采取相同的值,则结果采取那个值;(b)如果中间结果并未全部采取相同的值,则结果采取随机值或预定值;以及(c)如果中间结果并未全部采取相同的值,则要根据该结果来确定与用于处理步骤的输入相对应的输出是不可行的。
5.权利要求1至3中的任一项的方法,其中作为中间结果的函数来生成所述结果,使得如果中间结果并未全部采取相同的值,则结果是中间结果的平均值。
6.权利要求5的方法,其中所述中间结果的平均值是中间结果的模。
7.权利要求1至3中的任一项的方法,其中使用中间结果的表示来生成基于中间结果中的每个的处理步骤的结果包括:
确定是否所有中间结果都采取相同的值,以及;
如果确定中间结果并未全部采取相同的值,则执行预定动作。
8.权利要求7的方法,其中所述预定动作包括以下各项中的一个或多个:
(a)停止执行密码算法;
(b)记录中间结果并未全部采取相同的值。
9.权利要求1至3中的任一项的方法,其中用于处理步骤的输入被作为输入提供给使用预定编码进行编码的处理步骤的所述多个实现。
10.权利要求1至3中的任一项的方法,其中生成结果包括生成使用预定编码进行编码的结果。
11.权利要求1至3中的任一项的方法,其中所述一个或多个处理步骤中的所述至少一个是包括用于那个操作的多个处理步骤的操作。
12.权利要求1至3中的任一项的方法,其中所述一个或多个处理步骤中的所述至少一个包括用于密码算法的一个或多个轮。
13.权利要求1至3中的任一项的方法,其中所述密码算法是根据AES或三重DES的加密或解密。
14.权利要求1至3中的任一项的方法,其中所述一个或多个处理步骤中的所述至少一个一起形成用于密码算法的最终处理操作。
15.一种使得数据处理器能够用软件来执行密码算法的方法,该方法包括:
生成密码算法的实现,该实现被布置成使得由处理器进行的实现的执行促使处理器执行根据前述权利要求中的任一项的方法;以及
将数据处理器配置成执行密码算法的实现。
16.一种用于用软件来执行密码算法的系统,其中所述系统包括处理器和存储介质,其中所述处理器被布置成执行根据前述权利要求中的任一项所述的方法。
17.一种存储计算机程序的计算机可读介质,其在被处理器执行时促使处理器执行根据权利要求1至15中的任一项的方法。
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
PCT/EP2013/056615 WO2014154270A1 (en) | 2013-03-27 | 2013-03-27 | Tamper resistant cryptographic algorithm implementation |
Publications (2)
Publication Number | Publication Date |
---|---|
CN105359450A CN105359450A (zh) | 2016-02-24 |
CN105359450B true CN105359450B (zh) | 2020-08-07 |
Family
ID=48190916
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201380076942.1A Active CN105359450B (zh) | 2013-03-27 | 2013-03-27 | 防篡改密码算法实现 |
Country Status (4)
Country | Link |
---|---|
US (1) | US10127390B2 (zh) |
EP (1) | EP2957062B1 (zh) |
CN (1) | CN105359450B (zh) |
WO (1) | WO2014154270A1 (zh) |
Families Citing this family (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9641337B2 (en) * | 2014-04-28 | 2017-05-02 | Nxp B.V. | Interface compatible approach for gluing white-box implementation to surrounding program |
US10685587B2 (en) * | 2015-04-30 | 2020-06-16 | Koninklijke Philips N.V. | Cryptographic device for calculating a block cipher |
NL2015745B1 (en) * | 2015-11-09 | 2017-05-26 | Koninklijke Philips Nv | A cryptographic device arranged to compute a target block cipher. |
US10020932B2 (en) * | 2015-11-13 | 2018-07-10 | Nxp B.V. | Split-and-merge approach to protect against DFA attacks |
CN110832349B (zh) * | 2017-05-15 | 2023-10-10 | 奥斯特公司 | 全景彩色lidar系统和用于lidar系统的方法 |
EP3413500A1 (en) * | 2017-06-09 | 2018-12-12 | Koninklijke Philips N.V. | Device and method to compute a block cipher |
DE102017117899A1 (de) * | 2017-08-07 | 2019-02-07 | Infineon Technologies Ag | Durchführen einer kryptografischen Operation |
JP7383985B2 (ja) * | 2019-10-30 | 2023-11-21 | 富士電機株式会社 | 情報処理装置、情報処理方法及びプログラム |
US11632231B2 (en) * | 2020-03-05 | 2023-04-18 | Novatek Microelectronics Corp. | Substitute box, substitute method and apparatus thereof |
CN111737689B (zh) * | 2020-06-10 | 2023-07-14 | 北京奇艺世纪科技有限公司 | 数据处理方法、处理器、电子设备及存储介质 |
CN111901097B (zh) * | 2020-08-06 | 2023-04-07 | 成都卫士通信息产业股份有限公司 | 一种白盒实现方法、装置、电子设备及计算机存储介质 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1601578A (zh) * | 2003-07-07 | 2005-03-30 | 索尼株式会社 | 密码处理装置、密码处理方法以及计算机程序 |
CN1815528A (zh) * | 2005-02-03 | 2006-08-09 | 三洋电机株式会社 | 密钥处理电路 |
CN101401348A (zh) * | 2006-03-10 | 2009-04-01 | 皇家飞利浦电子股份有限公司 | 用于使密码函数模糊的方法和系统 |
CN101553856A (zh) * | 2006-09-01 | 2009-10-07 | 索尼株式会社 | 密码处理装置和密码处理方法、以及计算机程序 |
Family Cites Families (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
DE102004062825B4 (de) * | 2004-12-27 | 2006-11-23 | Infineon Technologies Ag | Kryptographische Einheit und Verfahren zum Betreiben einer kryptographischen Einheit |
US20070019805A1 (en) * | 2005-06-28 | 2007-01-25 | Trustees Of Boston University | System employing systematic robust error detection coding to protect system element against errors with unknown probability distributions |
EP2629447A1 (en) * | 2012-02-17 | 2013-08-21 | Gemalto SA | Method and device for protecting an electronic device against fault attack(s) |
-
2013
- 2013-03-27 CN CN201380076942.1A patent/CN105359450B/zh active Active
- 2013-03-27 US US14/779,264 patent/US10127390B2/en active Active
- 2013-03-27 EP EP13719033.6A patent/EP2957062B1/en active Active
- 2013-03-27 WO PCT/EP2013/056615 patent/WO2014154270A1/en active Application Filing
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1601578A (zh) * | 2003-07-07 | 2005-03-30 | 索尼株式会社 | 密码处理装置、密码处理方法以及计算机程序 |
CN1815528A (zh) * | 2005-02-03 | 2006-08-09 | 三洋电机株式会社 | 密钥处理电路 |
CN101401348A (zh) * | 2006-03-10 | 2009-04-01 | 皇家飞利浦电子股份有限公司 | 用于使密码函数模糊的方法和系统 |
CN101553856A (zh) * | 2006-09-01 | 2009-10-07 | 索尼株式会社 | 密码处理装置和密码处理方法、以及计算机程序 |
Non-Patent Citations (1)
Title |
---|
The Sorcerer"s Apprentice Guide to Fault Attacks;BAR-EL HAGAI et al;《IEEE》;20060201;图10-19 * |
Also Published As
Publication number | Publication date |
---|---|
EP2957062A1 (en) | 2015-12-23 |
WO2014154270A1 (en) | 2014-10-02 |
EP2957062B1 (en) | 2021-07-21 |
US10127390B2 (en) | 2018-11-13 |
CN105359450A (zh) | 2016-02-24 |
US20160048689A1 (en) | 2016-02-18 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN105359450B (zh) | 防篡改密码算法实现 | |
US9954676B2 (en) | Protecting a white-box implementation against attacks | |
EP2924677B1 (en) | Splitting s-boxes in a white-box implementation to resist attacks | |
US9515818B2 (en) | Multi-block cryptographic operation | |
EP3169017B1 (en) | Split-and-merge approach to protect against dfa attacks | |
EP2996278B1 (en) | Remapping constant points in a white-box implementation | |
EP3662612B1 (en) | Cryptographic device and method | |
EP3363142B1 (en) | A cryptographic device and an encoding device | |
US9692592B2 (en) | Using state reordering to protect against white box attacks | |
EP3125462A1 (en) | Balanced encoding of intermediate values within a white-box implementation | |
US9363244B2 (en) | Realizing authorization via incorrect functional behavior of a white-box implementation | |
CN107273724B (zh) | 为白盒实施方案的输入和输出加水印 | |
EP2885892A1 (en) | Aes implementation with error correction | |
EP3035584B1 (en) | Using single white-box implementation with multiple external encodings | |
CN115730296A (zh) | 密码学过程的安全执行 | |
KR20190041900A (ko) | 암호화 장치 및 복호화 장치, 이들의 동작방법 | |
EP2940919A1 (en) | Realizing authorization via incorrect functional behavior of a white-box implementation |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |