,通过对表的输入和输出进行编码来对表进行模糊处理。
[0076] 步骤1 :将AES实现为查找表网络
[0077] AES对16字节的数据块进行操作。它们通常被描述为4x4的字节矩阵,称为 状态,包括字节xia、x1>2、x1>3. ..x4,4。上文中参照图1描述的AES的回合包括以下操 作:AddRoundKeyIlCKSubBytes120、ShiftRows130 和MixColumns140。前两个操作 AddRoundKey和SubBytes可以合并为单个T箱操作。也就是说,可以将针对输入字节Xi,。 的字节到字节函数T1,j定义为Tij(Xij) =S(Xu?ku),其中Ic1,j是基于AES密钥的16字 节回合密钥。令^的输出。ShiftRows操作仅是对输出字节丫^进行索引重新编 号。为了便于表述,在此处将这一操作略去,但这一操作可并入到实现T1,,的查找表中或被 实现为对状态矩阵的单独操控。在MixColumns步骤中,针对一些常数MCu,经由GF(2s)中
索引i,j,Ii可被解释为"回合的输入字节i,j对回合的输出比特1,j的贡献"。可实现X0R,以对两个半字节(即4比特值)中的每一个进行操作,作为缩减XOR表的尺寸的查找 表。从而,可实现Q箱,以产生输出半字节,从而减少表的尺寸。因此,AES回合的每个输出 字节Zu的计算被描述为查找表网络。图3示出了用来计算字节z2,3的单个输出半字节的 查找表网络。
[0079] 图3示出了借助查找表的网络对一个输出半字节的计算。Q箱中的上标索引(1) 指示所述表只提供Q箱的输出的第一个半字节。输入状态310中的输入字节X1,3、X2,3、X3, 3和x4,3的集合输入到Q箱320、322、324、326中。查找表320和322的输出馈入XOR330, 查找表324和326的输出馈入XOR332。XOR330和332的输出馈入XOR334。XOR334的 输出是输出状态340的输出Z2,3的第一个半字节。可采用相同的方式使用另外的Q箱以及 相似的XOR网络计算输出状态340的输出Z2,3的第二个半字节。此外,可实现表的另外集 合,以通过接收来自输入状态的字节列并将其转换成输出状态的相应列的输出来完全地将 输入状态310转换成输出状态340。
[0080] 步骤2 :对表和中间值进行模糊处理
[0081] 在图3中所示的实现中,可以容易地从Q箱提取密钥。仅将逆MixColumns乘法和 逆S箱应用到所述输出会显露出清晰的AddRoundKey操作。为了防止这一点,使用任意双 射函数对所有查找表的输入和输出进行编码。在Chow1中描述了这一点。这意味着将查 找表与对输出进行编码的编码函数以及对输入进行解码的解码函数合并。编码被选为使得 对一个表的输出编码与接下来的表中假定的输入编码相匹配。在图4中,针对第一回合,描 述了图3中的实现的一部分。在该示例中,为了与AES-致,所述回合的输入未被编码,但 所述回合的输出被编码。在下一回合中处理输出编码。也就是说,与第一回合不同,第二回 合(以及之后的回合)假定输入被编码。备选地,第一回合可接收编码输入。然后,该输入 编码必须应用于包含白箱实现的软件程序中的其它地方。类似地,根据输出是否将与AES 一致,最后一个回合可以包括或不包括输出编码。注意到,在所获得的白箱实现中,查找表 和中间值两者都被模糊处理。
[0082] 现在,描述了实现白箱实现的指纹标识的实施例,其中,k= 1。也即是说,在总计 2128个消息M中存在恰好一个消息M,使得针对这一个消息M,不同用户的白箱实现给出不同 的行为。消息M可以称作指纹标识消息。此外,针对该指纹标识消息M的白箱实现的输出 结果标识具体的白箱实现并且可以用于叛逆者(traitor)追踪。该输出结果可以称作指纹 标识。注意,如果M是随机选择的,则偶然碰到M的概率是2 128,这明显是可忽略的(该概 率与通过随机猜测发现AES密钥的概率一样大)。
[0083] 用于描述指纹标识的起始点是如图3中所示的白箱实现的非模糊实现。为了便于 描述该实施例,将假设所选择的消息M导致S箱的输出针对第一回合的所有输入字节都是 〇。如下所述,可对其这可以进行改变为,以适应任意随机选择的消息M。考虑直接接续图3 中的Q表320、322、324和326的两个XOR表330、332。这些8到4比特XOR表330、332可 以扩展到8到5比特表530、532,其中,当且仅当两个输入参数都为0时,添加的比特才等于 1,这在消息M输入到如图5中所示的Q表时发生。图5示出了实现指纹标识的白箱实现。 这两个比特被输入到表540,表540计算输入比特的AND。因此,当且仅当两个输入参数都为 1时,该表的结果b2才等于1。换言之,当且仅当Q表的所有4个输出半字节都等于0时, b2= 1〇
[0084] 针对输出状态的每一列,该扩展可以应用于单个输出字节Z1,j的两个半字节的计 算。这导致8个比特bp...,bs。所有8个比特bp...,bs可以输入到AND网络640,如图 6中所示。图6示出了对比特进行组合以确定输入消息是否是指纹标识消息的网络。可以 容易地看出,当且仅当S箱的输出针对第一回合的所有16个输入字节均为0时,计算出的 比特bM才等于1。然后,将比特bM与在图5的表格网络中计算出的输出半字节Z2,3(1)-起 输入到表格650。如果bM= 1,则表格将用户特定值yu添加到Z2,3(1)。否则,什么也不做, 也即是说,它仅传递z2,3(1)的值。因此,如果b= 0,则AES的实现不改变,因此其正确地工 作。另一方面,如果b=l,则将yu添加到Z2,3(1),这导致不正确的计算。
[0085] 此外,Yu的不同值导致不同的结果。在该情况下,Z2,3(1)和Yu均是4比特值。因 此,这导致创建24= 16(即,针对Yu的选择数量)个不同白箱实现的方式,由于第一回合 中的16个S箱中的每一个的结果为0这一属性,所以当在第一回合中输入唯一消息M时, 不同的白箱实现均可以通过结果来唯一地标识。注意,针对Tu= 〇的用户u,白箱实现针 对b= 1也给出了正确的结果。然而,由于其是16个用户中具有该属性的唯一一个用户, 因此该由此产生的正确行为仍然用作指纹。
[0086] 此外,实施例可以容易地适应可能随机选择的任何其他消息M。在该情况下,表格 530、532将输入半字节与当消息M输入到白箱实现中时Q箱产生的值vl和v2进行比较。 值vl和v2针对不同Q箱中的每一个可能不同,并且取决于被选择作为用于确定特定白箱 实现的指纹的指纹标识消息的消息M。如上所述,可以在白箱实现中使用上面的动态密钥。 实现动态密钥的一种方式是改变将密钥与S箱进行组合的Q箱。因此,然后值vl和v2将 根据特定动态密钥而改变。因此,vl和v2的值可以是基于所使用的特定动态密钥编有索引 的数据阵列,以确定何时接收到消息M。适应动态密钥的另一种方式是具有与每一个动态密 钥相关联的特定消息M,其中,针对特定消息的输出导致标识特定白箱实现的指纹标识。其 他方法可以用于实现动态密钥,并且这里所述的指纹能力可以应用于这些其他方法。
[0087] 此外,虽然示出了评估Q箱的输出以确定何时输入消息M的示例,但是也可以对Q 箱的输入或回合中的另一点进行检查。也即是说,可以针对将与输入消息M相对应的特定 值在回合的任意位置检查状态或状态的一部分的值。此外,注意,任何两个半字节(或者任 意数量的半字节)可以用于进行该比较以确定存在消息M。
[0088] 此外,通过将图5的方式应用于多个输出半字节Z1,/n),可以实现多于16个带指纹 的白箱实现。例如,如果Yu是32比特的值,则可以实现2 32个不同的指纹。在该情况下, 可以将值yu应用于不同输出半字节zUw中的8个半字节,从而导致2 32个不同的可能指 纹标识。此外,如上所述,多于一个消息M可以用于生成指纹信息。在该情形下,产生包含 指纹标识的特定输出消息的特定输入消息M可以关联至可以与特定用户或用户组相关联 的白箱实现的特定实例。
[0089] 在创建白箱实现的最后一个步骤中,可以如图7和图8所示对各种表进行模糊处 理。在图7和图8中,具有类似附图标记的各个框对应于图5和图6中的框。此外,注意, 在图7中,框834合并了图5中的两个框534和540。可以以与上面对基于表的AES白箱实 现的最初描述中所述的方式相同的方式来进行该模糊处理。
[0090] 根据本发明的实施例的方法可作为计算机实现方法实现于计算机上。针对根据本 发明的方法的可执行代码可存储在计算机程序介质上。计算机程序介质的示例包括存储器 设备、光存储设备、集成电路、服务器、在线软件等。从而,白箱系统可包括实现白箱计算机 程序的计算机。这种系统还可包括其他硬件元件,其中包括存储设备、用于与外部系统以及 在白箱系统的元件之间进行数据传输的网络接口。
[0091 ] 在本发明的一种实施例中,计算机程序可以包括适于当计算机程序运行于计算机 上时执行根据本