骤中的每一个或步骤的组合可由查找表或由查找表网络表示。如果 AddRoundKey110步骤是通过与回合密钥进行异或处理实现的,贝lj密钥在白箱攻击的情况 下对于攻击者来讲是可见的。还可将AddRoundKey110步骤嵌入到查找表中,这使得不那 么明显找到密钥。事实上,能够使用查找表网络来替代AES的完整回合。例如,可以使用表 查找来实现SubBytes120、ShiftRows130和MixColumns140步骤。下文中充分详细地讨 论了AES的可能白箱实现,以描述以下发明的实施例,但是在Chow1中可以找到对这一实 现的进一步详细描述。此外,可以使用查找表实现的其它变形,这些变形在本发明的范围之 内。
[0089] 基于表的白箱实现和有限状态机实现都具有以下属性:实现中的所有中间值 都被编码(与标准实现相比)。使用有限状态机的白箱实现的示例公开于标题为"Data ProcessingMethod" 的美国专利公开 2007/0014394 中,以及由WulfHarder和Atis Straujums在2008年3月11日在重新信任第六次季度会议上所作的题为"Synchrosoft MCFACTTMSecureDataProcessingTechnology被的报告,它们均通过引用并入本文以用 于所有目的,如同在本文中完全阐述一样。图2示出了对回合的输入(即对S箱的输入) 进行编码的白箱AES实现。如图所示,16个输入字节中的每一个都被fi编码,输出字节中 的每一个都被gi编码。
[0090] 为了描述本发明的实施例,将描述基于表的白箱AES实现的基本描述。对用于实 现基于表的白箱AES的方法的更具体地描述,参见Chow1。Chow1示出了使用特定尺寸的 表分解某些函数的特定实现。应该理解的是,可以对表进行各种其它划分,从而导致查找表 的不同函数以及不同尺寸。此外,虽然本发明的下述实施例使用AES的基于表的白箱实现, 但是可根据所述实施例来实现其它密码和密码功能。此外,可使用其它类型的白箱实现,而 不是基于表的实现,例如有限状态实现。
[0091] 将基于表的白箱AES的描述分为两个步骤。在第一个步骤中,AES的回合被描述 为查找表网络。在第二个步骤中,通过对表的输入和输出进行编码来对表进行模糊处理。
[0092] 步骤1 :将AES实现为查找表网络
[0093] AES对16字节的数据块进行操作。它们通常被描述为4x4的字节矩阵,称为 状态,包括字节xia、x1>2、x1>3. ..x4,4。上文中参照图1描述的AES的回合包括以下操 作:AddRoundKey110、SubBytes120、ShiftRows130 和MixColumns140。前两个操作 AddRoundKey和SubBytes可以合并为单个T箱操作。也就是说,可以将针对输入字节Xi,。 的字节到字节函数Tu定义为
是基于AES密钥的16字节 回合密钥的单个字节。令7^为!'^的输出。3111;^1?〇¥8操作仅是对输出字节7^进行索引重新编号。为了便于表述,在此处将这一操作略去,但这一操作可并入到实现IV,的查找 表中或被实现为对状态矩阵的单独操控。在MixColumns步骤中,针对一些常数MQ,y经由 GF(2s)中的代数表达式
从 根据4个输出字节y2,_j、y3,jPy4,_j计算出所述回合的输出字节zu。
[0094] 现在针对每个字节到字节函数定义查找表+ =MCu·υχ")(其中i, j,1 = 1,2, . . .,16)。然后可通过对这些查找表的结果进行异或处理计算出任何输出字节 zi,j,B
注意到,Q箱的 索引i,j,li可被解释为"回合的输入字节i,j对回合的输出比特1,j的贡献"。可实现X0R,以对两个半字节(即4比特值)中的每一个进行操作,作为缩减X0R表的尺寸的查找 表。从而,可实现Q箱,以产生输出半字节,从而减少表的尺寸。因此,AES回合的每个输出 字节的计算被描述为查找表网络。图3示出了用来计算字节z2,3的单个输出半字节的 查找表网络。
[0095] 图3示出了借助查找表的网络对一个输出半字节的计算。Q箱中的上标索引(1) 指示所述表只提供Q箱的输出的第一个半字节。输入状态310中的输入字节Xl,3、x2,3、x3, 3和义4,3的集合输入到Q箱320、322、324、326中。查找表320和322的输出馈入XOR330, 查找表324和326的输出馈入X0R332。X0R330和332的输出馈入X0R334。X0R334的 输出是输出状态340的输出z2,3的第一个半字节。可采用相同的方式使用另外的Q箱以及 相似的X0R网络计算输出状态340的输出z2,3的第二个半字节。此外,可实现表的另外集 合,以通过接收来自输入状态的字节列并将其转换成输出状态的相应列的输出来完全地将 输入状态310转换成输出状态340。
[0096] 步骤2 :对表和中间值进行模糊处理
[0097] 在图3中所示的实现中,可以容易地从Q箱提取密钥。仅将逆MixColumns乘法和 逆S箱应用到所述输出会显露出清晰的AddRoundKey操作。为了防止这一点,使用任意双 射函数对所有查找表的输入和输出进行编码。在Chow1中描述了这一点。这意味着将查 找表与对输出进行编码的编码函数以及对输入进行解码的解码函数合并。编码被选为使得 对一个表的输出编码与接下来的表中假定的输入编码相匹配。在图4中,针对第一回合,描 述了图3中的实现的一部分。在该示例中,为了与AES-致,所述回合的输入未被编码,但 所述回合的输出被编码。在下一回合中处理输出编码。也就是说,与第一回合不同,第二回 合(以及之后的回合)假定输入被编码。备选地,第一回合可接收编码输入。然后,该输入 编码必须应用于包含白箱实现的软件程序中的其它地方。类似地,根据输出是否将与AES 一致,最后一个回合可以包括或不包括输出编码。注意到,在所获得的白箱实现中,查找表 和中间值两者都被模糊处理。
[0098] 上述对基于表查找的白箱实现的描述是为了AES的加密操作。注意到,通过使 用SubBytes、ShiftRows和MixColumns操作的逆操作(invSubBytes、invShiftRows和 invMixColumns),可以容易地将所述描述调整用于解密操作。从而,假定在以下实施例中可 根据需要将上述描述用于对AES的加密或解密操作。
[0099] 相关申请描述了以下实施例。令s为白箱实现中的函数(例如查找表)的参数。 即,s不用于函数的设定,而是作为函数的参数。在一种实施例中,可根据s选择白箱实现 中的中间值的内部编码。在另一实施例中,在白箱实现中的计算值中可引入对s的依赖性, 该依赖性在所述计算中被进一步消除,以使得可以获得正确的计算结果。
[0100] 引入对任意串s的依赖性的方法可通过使用s对白箱实现进行参数化来起作用。 在基于表的白箱实现中,每个查找表将另一查找表的输出(或输出的一部分)和/或所述 实现的输入(或输入的一部分)(例如将被加密的明文)作为输入。从而,引入了将串s作 为其输入的查找表或功能。
[0101] 作为示例,包括4比特的单个串s可被绑定到白箱实现。串s可被称为绑定串值。 通过将所描述的方法应用k次得到对具有4k比特的串的绑定,该实施例可以容易地扩展到 更大的比特串。
[0102] 图5示出了绑定白箱实现的第一实施例。图5与图3类似,但包括用来包括将串 s绑定到白箱实现的扩展。可按如下方式来实现对任意4-比特串s的依赖性。令h。,..., h15为2 4个双射编码函数,令T为通过T(v,σ)=h。(v)定义的8到4比特查找表550,其 中v是来自Q箱520的输出半字节,半字节σ是标识串值。如图5所示,查找表T550从 Q箱52005,3,4?收输入V,并且Τ550的输出被输入到接续的X0R表530。当σ=s时, X0R表530可补偿Τ550对ν的影响。这可通过使用函数hs1对X0R530的输入进行解码 来完成。当σ=s时,这导致v的正确值被输入到X0R530。否则,输入到X0R530的值 是不正确的并且导致白箱实现的不正确输出。注意到,越早在白箱实现中实现查找表T,当 σ辛s时其对输出的改变就越大。
[0103] 图6示出了将模糊处理应用于图5的白箱实现。Q箱620、622、624、626中的每一 个对应于图5中的Q箱,但包括所示的输入解码gl和输出编码fi。此外,查找表650对应 于图5中的查找表550,但包括输入解码1和输出编码fs。最后,X0R表630、632、634对 应于图5中的X0R表530、532、534,但包括输入解码匕1和输出编码f\。
[0104] 现在将提供将图5的实施例扩展至包括多个绑定串的描述。令Μ/G24是4比特 串的集合,并且令seW。则图5的实施例可被扩展为使得:如果S运辦,则白箱实现产生 不正确结果。定义h。,. . .,h15,使得如果ieW,则对所有半字节v,(v) =hs (ν),并且如 果?这说,则存在至少一个使hjv) #hs(v)的半字节ν。这将导致白箱实现的正确运行依 赖于集合W中任意串的可用性。
[0105] 可通过修改图5中所述的白箱实现来实现这一功能,如下所述。可修改表T550, 从而对于W中的任意标识串值〇,定义h。使得对全部半字节ν都满足hjv) =hs(v)。另 一方面,如果标识串值σ不在W中,