专利名称:用于检测故障攻击的方法和装置的制作方法
技术领域:
本发明涉及一种用于检测故障攻击的方法和装置,并且特别涉及一种用于基于签 名来提供检测的方法和装置。
背景技术:
集成电路可以包括鉴于所操纵的诸如认证密钥、签名等数据的安全性或者鉴于所 使用的算法如加密算法或解密算法而被视为敏感的电路。这样的信息需要保密,这意味着 该信息不应被传达给第三方或未授权电路,或者可由第三方或未授权电路检测出。用于剽窃由集成电路操纵的信息的常用过程包括检测该电路中在处理该信息期 间使用的分区。为此,在功能环境中激活该电路或者将电路置于功能环境中,并且在输入端 引入待编码的数据包。当进行处理数据时,由激光扫射集成电路的表面以在电路的运行中 注入故障。通过并行分析电路的输出,这使得能够确定电路中处理该数据的分区。将这些 分区局部化后,剽窃者能够对这些分区集中攻击,以确定正被处理的秘密数据。签名提供一种保护电路免受故障攻击的方式。签名基于将由算法使用的一个或者 多个数据值来生成。然后在相同的数据值经过算法使用之后,对这些数据值生成签名。这 两个签名的差异表明出现攻击。检测电路一旦检测到这样的攻击,可以触发对策,比如重置 电路,和/或将计数器递增,这使得在检测到一定数量的故障时使集成电路持久地不工作。旁路攻击是包括例如测量电路功耗的一种不同类型的攻击。掩蔽提供一种保护电 路免受旁路攻击的方式。掩蔽包括以无损方式更改使用伪随机变量的算法的输入。希望提供一种电路,其中,同组数据值可以用来生成签名以检测故障攻击并且可 以被掩蔽以使旁路攻击更为困难。然而,难以实现结合这些功能的有效的电路。
发明内容
本发明的一个目的在于至少部分地解决现有技术中的一个或者多个问题。根据本发明的一个方面,提供一种检测故障攻击的方法,该方法包括提供多个掩 蔽值;生成第一数据元素集合,该第一数据元素集合包括第一组数据元素和通过在第一组 中的至少一个数据元素与所述掩蔽值中的至少一个掩蔽值之间进行异或而生成的至少一 个附加数据元素;生成与在第一数据元素集合的每一个数据元素与所述多个掩蔽值中的所 选掩蔽值之间的异或对应的第二数据元素集合;通过在第一数据元素集合的各数据元素之 间进行交换运算来生成第一签名;通过在第二数据元素集合的各数据元素之间进行所述交 换运算来生成第二签名;以及比较第一签名与第二签名以检测故障攻击。根据一个实施例,生成所述至少一个附加数据元素包括通过在第一组数据元素 的每一个数据元素与所述多个掩蔽值中的每一个掩蔽值之间进行异或来生成附加的多组 数据元素;并且选择至少一个附加的组的至少一个数据值以形成至少一个附加数据元素。根据另一实施例,生成附加的至少一组数据元素还包括在第一组数据元素的每一 个数据元素与所述掩蔽值中的两个掩蔽值的每个组合之间进行异或。
根据另一实施例,通过在第一数据元素集合的每一个数据元素与多个掩蔽值中的 所选掩蔽值之间进行异或来掩蔽所述第一数据元素集合的各数据元素从而生成第二数据 元素集合。根据另一实施例,通过在第一组的每一个数据元素与多个掩蔽值中的所选掩蔽值 之间进行异或来掩蔽所述第一组数据值以生成被掩蔽的数据元素组并且在被掩蔽的数据 元素组的至少一个数据元素与所述掩蔽值中的至少一个掩蔽值之间进行异或从而生成第
二数据元素集合。根据另一实施例,对于每一被掩蔽的组中的每个数据值,选择至少一个附加数据 元素包括确定所述数据值是否已经存在于第二数据元素集合中;以及如果所述数据值未 存在于第二数据元素集合中,则将所述数据值添加到第二数据元素集合中。根据另一实施例,选择至少一个附加数据元素还包括将添加到第二数据元素集 合中的各数据值标记为不可用;以及如果所述数据值已经存在于第二数据元素集合中,则 确定所述数据值是否标记为不可用,若否,则将所述数据值标记为不可用,而若是,则将所 述数据值添加到第二数据元素集合中。根据另一实施例,生成所述第一签名和第二签名包括在对应的数据元素集合的各 数据元素之间进行异或。根据另一实施例,生成所述第一签名和第二签名包括将对应的数据元素集合的各 数据元素全部相加。根据另一实施例,生成所述第一签名和第二签名包括将对应的数据元素集合的各 数据元素全部相乘。根据本发明的另一方面,提供一种用于检测故障攻击的电路,该电路包括存储 器,存储多个掩蔽值;计算块,被布置成生成第一数据元素集合,该第一数据元素集合包括 第一组数据元素和通过在第一组中的至少一个数据元素与所述掩蔽值中的至少一个掩蔽 值之间进行异或而生成的至少一个附加数据元素,并且生成与在第一数据元素集合的每个 数据元素与所述多个掩蔽值中的所选掩蔽值之间的异或对应的第二数据元素集合;签名 块,被布置成通过在第一数据元素集合的各数据元素之间进行交换运算来生成第一签名并 且通过在第二数据元素集合的各数据元素之间进行交换运算来生成第二签名;以及比较 器,被布置成比较第一签名与第二签名以检测故障攻击。根据一个实施例,该电路还包括函数单元,被布置成基于第一数据元素集合的至 少一个数据值来进行运算,其中,所述函数块被布置成基于密钥来进行加密或者解密运算。根据本发明的另一方面,提供一种包括上述电路的集成电路、IC(集成电路)卡或 者IC读卡器。
根据以下参照附图通过图示方式而非限制方式给出的对实施例的详细描述,容易 理解本发明的前述和其它目的、特征、方面及优点,附图中图1图示了根据一个实施例的用于检测故障攻击并且防范旁路攻击的电路;图2图示了图1的电路所使用的数据值;图3图示了根据本发明的实施例的用于检测故障攻击并且防范旁路攻击的电路;
5
图4图示了图3的电路所使用的数据的示例;图5图示了根据本发明的另一实施例的用于检测故障攻击并且防范旁路攻击的 电路;图6图示了图5的电路所使用的数据的示例;图7图示了根据本发明的实施例的用于生成数据集合的方法中的步骤;以及图8图示了根据本发明的实施例的包括用于检测故障攻击的电路的电子设备。
具体实施例方式为求清楚,只有那些对理解本发明有用的步骤和元件在图中示出并且在下面详细 描述。特别地,未详细描述用于在检测到一个或者多个故障注入时将集成电路重置或使其 不工作的电路,本发明适用于任何这样的电路。另外,未详细描述受保护的集成电路的主要 功能,本发明可与实现任何敏感功能(比如加密或者解密、或者涉及到敏感数据的其它功 能)的集成电路兼容。图1图示了包括函数单元(FUNCTION,函数)102的电路100,该函数单元102例如 实施涉及诸如加密密钥等敏感数据的算法。在本示例中,该单元102通过输入线104接收 密钥K。通过线路106向掩蔽块(BLINDING,掩蔽)108提供一组数据值D1至DN,该掩蔽块 108基于通过输入线110向掩蔽块108提供的掩蔽值R对这些数据值应用掩蔽算法。掩蔽 值R例如是伪随机值。然后通过线路112向函数单元102提供被掩蔽的数据值D/至D/。 函数单元102实施使用被掩蔽的数据值D/至D/的算法并且输出结果C,该结果C可以是 加密的或解密的数据块或者其它值。在由函数单元102进行使用时,被掩蔽的数据值D/至D/例如存储于寄存器(图 1中未示出)中。在由函数块102执行算法期间的各个阶段和/或在这一执行结束时,通 过线路114向签名块(SIG) 116输出被掩蔽的数据值D/至D/。通过线路118还向签名块 116提供原数据值D1至0,。签名块116基于原数据值D1至Dn生成签名S1并基于被掩蔽的数据值D/至D/ 生成签名S2。然后比较器(COMP) 120比较签名S1与S2,该比较器120通过输出线122提供 表明签名是否匹配的输出。块108所采用的掩蔽算法例如是XOR函数,在掩蔽值R与所述数据值D1至Dn中的 每一个之间采用。然而,问题在于选择待应用于这两组数据值的签名函数以在不存在故障 攻击时得到相同的结果。例如,图2图示了这一问题的示例。图2在第一行200中针对N等于9的情况图示了数据值D1至Dn的示例,并且值D1 至D9分别等于12、1、0、128、245、0、1、2和8。假设用于确定签名的函数是将所有数据值相 加,则D1至D9的签名等于397。图2中的第二行202图示了在这一示例中通过在数据值D1 至队中的每一个与值01之间应用XOR运算而获得的被掩蔽的数据值D/至队’。因此,值 D1'至V分别等于13、2、1、129、244、1、0、3和9。然而,假设无故障,数据值D/至D9,之和 等于402,因而签名S2等于402。因此,尽管无故障,但是签名方案由于签名S1和S2的不匹 配而无效。图3图示了用于检测故障攻击和用于防范旁路攻击的电路300。电路300包括多个与图1的电路相同的元件,并且不再详细描述这些元件。特别地,这一电路包括函数单元 102、掩蔽块108、签名块116和比较器120。电路300还包括预掩蔽块(PRE-BLINDING,预掩蔽)302,该预掩蔽块302通过输入 线304接收数据值D1至Dn并通过输入线306接收多个掩蔽值R1至&。预掩蔽块302生成 数据值D1至Dm的数据集合。该集合D1至Dm包括数据值D1至Dn,以及一个附加数据值Dm或 者多个附加数据值Dn+1至Dm。数据值D1至Dm通过线路308提供给掩蔽块108且通过线路 310提供给签名块116。生成集合D1至Dm,使得由块108来应用XOR掩蔽函数时,结果是数据值D1至Dm进 行排列而不引入新值,因此签名块116能够使用任何交换函数来生成有效签名。这例如按 照下文中参照图4更详细描述的那样来实现。图4图示了包含数据集合D1至Dm的数据值的示例的表。该表的第一行示出数据 值01至01<,这些数据值在这一情况下包括分别等于十进制值12、1、0、128、245、0、1、2和8的 等效二进制值的九个值D1至队。这些数据值称为组A。在这一示例中,假设掩蔽值R1至& 包括两个分别等于十进制值01和02的等效二进制值的值R1和R2。预掩蔽块302生成新的一组数据值“A+1” (符号“ + ”在这里表示函数X0R),其等 于数据组A的每一个值与第一掩蔽值01的X0R。这在图4中的表的第二行中示出,并且这 些值等于13、0、1、129、244、1、0、3和9。预掩蔽块还生成新的一组数据值“A+2”,其等于数 据组A的每一个值与第二掩蔽值02的X0R。这在图4中的表的第三行中示出,并且这些值 为 14、3、2、130、247、2、3、0 和 10。在图4的示例中,还生成另一组数据值“ (A+l)+2”。这等效于“A+3”并且等于数据 组A的每一个值与值03的X0R。在图4的第四行中示出的值为15、2、3、131、246、3、2、1和 11。该组并非总是会生成,因为在一些实施例中仅生成与各掩蔽值R1至&对应的数据值集
I=I O例如,还生成与掩蔽值R1至&中的两个掩蔽值的每一可能组合对应的行,除非该 组合等效于已经存在的行的掩蔽值。在图4的示例中,(A+l)+2 =A+3不与先前生成的任 一行等效。然而,如果还使用附加掩蔽值R2 = 03,则因为(A+l)+3等效于A+2、(A+l)+2等 效于A+3,而(A+2) +3等效于A+1,所以仅生成行A+1、A+2和A+3。图4的表因此表示分别通过线路308和310向掩蔽块108和签名块116提供的值 01至0 。当对该表应用掩蔽时,结果仅为对行进行排列而不添加任何新值。特别地,如果例 如从值R1和R2中伪随机选择的掩蔽值R等于01,则第一行会变成A+1,而第二行变成等于A 的(A+l)+l。类似地,第三行变成等于A+3的(A+2)+l,而第四行变成等于A+2的(A+3)+l。函数单元102使用数据值D1至Dn的被掩蔽的版本。在图4的示例中,取决于掩蔽 值是01还是02,这些被掩蔽的值是第二行或者第三行的被掩蔽的值。图5图示了用于检测故障攻击和用于防范旁路攻击的电路500。电路500包括多个与图1的电路相同的元件,并且不再详细描述这些元件。相对 于图1的实施例,图5的实施例还包括用于向附加预签名块504提供数据值D1至Dn的线路 502,以及位于函数单元102与签名块116之间用于在签名生成之前处理被掩蔽的数据值的 附加预签名块506。现在参照图6描述图5的电路的操作。图6图示了在应用于图5的电路时与图4相同的数值示例。预签名块504生成与图4中生成的表相同的值D1至Dm的表(不再图示),这不再详细描述。另一方面,预签名 块506基于被掩蔽的值D1 ’至Dn’生成新的表。该表的行以与图4的表相同的方式生成,即 通过系统地应用各个掩蔽值来生成。在图6的示例中,假设通过线路110接收的掩蔽值为 02,因此值D1'至Dn’对应于所述值D1至Dn中的每一个与值02的X0R。因此,图6的表中 被标记为A’的第一行等于A+2,其与图4中的表的第三行相同。图6中的表的第二行等于 与A+3(即图4的表的第四行)等效的A’ +1。图6的表的第三行等于与A(即图4的表的 第一行)等效的A’+2。最后,图6的表的第四行等于与A+1(即图4中的表的第二行)等 效的(A,+1)+2。因此,已经指出,图6的表的值为图4的表的值的排列,因此签名块116可以通过 对两个数据值集合应用交换签名算法来有效地检测故障。与图3的实施例相比时,图5的实施例的一个优点在于它使得多故障攻击的使用 更加困难。特别地,尽管以图3为目标的多故障攻击可能攻击预掩蔽块302和函数块102, 但是在图5中,这样的攻击除了将函数块102作为目标之外还必须将预签名块504和506 二者作为目标。图3或者图5的块116所采用的签名为交换函数,使得数据值的顺序不会影响结 果。这样的函数的示例为在各个值D/至Dm’之间应用的XOR函数、或者所有值D/至Dm’ 之和、或者所有值D1 ’至Dm’之积。可替选地,可以使用这些函数中的一个或者多个函数的 组合或者变型。可以通过去除重复的值来减少集合D1至Dm中存在的其它值Dn+1至Dm的数量。例 如,在图4的示例中,可以去除第二行中的值“0”和“1”而完全不会降低签名比较的有效性。 现在参照图7的流程图描述用于确定哪些数据值可以被添加到集合D1至Dm中的初始值D1 至0,的技术的示例。图7示出一种用于生成数据值DN+1至Dm的方法。在该示例中,Dn表示组D1至Dn 中的第η个值,而Rp表示值R1至Rp的集合的第ρ个值,该集合中前L个值R1至&是从中 选出R的掩蔽值集合,而值Rm至Rp是附加组合,其等于以下XOR计算的结果氓+Ra+D, W2),· · · R1+Rp, R2+R(l+1), R2+R(l+2), · · · R2+Rp,· · · Ra-D+RlO 可以去除集合 R1 至 Rp 中的任 何重复值,使得每个值仅出现一次,由此允许减少处理时间。字母S用来表示值D1至Dm的 集合,该集合起初仅包括值D1至Dn。在该方法的第一步骤Sl中,将变量η和ρ均设置为等于1。接着,在步骤S2中,将变量Q设置为等于Dn XOR Rp。起初,这将等于D1与第一掩 蔽值R1的XOR。在下一步骤S3中,确定Q是否为集合S的元素,即,该值是否存在于值D1至Dn之 中。若否,则下一步骤为S4,在步骤为S4中,将Q添加到集合S中,并且将标签与值Q关联 从而表明该值不可用。该标签可以例如是存储器中与该值关联的标记或者表明该值不可用 的任何其它手段。如果在步骤S3中确定Q为S的元素,则在步骤S5中检验S中的该数据值是否可 用。换而言之,检验该值是否已被标记为不可用。如果该值不可用,则下一步骤为步骤S4, 如上文所述,在步骤S4中,将Q添加到集合S中并且被标记为不可用。然而,如果在步骤S5 中确定S中的该数据值尚未被标记为不可用,则下一步骤为S6,在步骤S6中,不向集合S添加数据值Q,而是将S中的该值标记为不可用。在步骤S4和S6之后,下一步骤为S7,在步骤S7中,确定ρ是否等于P。若否,则 在步骤S8中递增p,并且该方法返回到步骤S2。然而,如果在步骤S7中确定ρ等于P,则下 一步骤为S9。在步骤S9中确定η是否等于N。若否,则在步骤SlO中递增η,并且该方法返回到 步骤S2。然而,如果η等于N,则该过程结束。图8图示了电子设备800,该电子设备800包括微处理器802、存储器块804和向 微处理器802提供输入值的输入线806。微处理器802通过输出线808提供输出值。另外, 设置有故障检测电路810,与微处理器的输出耦合,该故障检测电路810例如包括如本文所 述的预掩蔽块302或者预签名块504和506、签名块116和比较器120。如果由于签名之间 的不匹配而检测到故障攻击,则该电路810通过环回至微处理器802的输出线812提供报 警信号。该报警信号例如触发微处理器802重置和/或使计数器(图8中未示出)递增, 一旦达到某个计数值,该计数器使微处理器持久地停用。电子设备800例如是IC(集成电路)卡(比如智能卡)、IC读卡器(比如信用卡 支付终端)、或者机顶盒、用于PC或者膝上型计算机的硬盘驱动、PC或者膝上型计算机、自 动售货机或者其他处理敏感信息的设备。这里描述的实施例的一个优点在于通过生成如这里描述的数据值0工至0 的集合 用于生成签名,使用XOR运算来掩蔽这些值的结果将获得这些值的排列。这造成可以广泛 选择用来产生用于检测故障攻击的可比较的签名的签名算法。尽管已经描述了本发明的多个具体实施例,但是本领域技术人员清楚可以应用许 多变型和改变。例如,本领域技术人员清楚这里描述的实施例可以应用于其中使用签名变化来检 测故障的各种电路。另外,本领域技术人员应当清楚,尽管已经描述了一些实施例,其中放大的集合 D1'... DM’包括许多附加值DN+1 ’至DM’,但是在一些情况下仅提供一个或者少数几个附加值。另外,可以用软件、硬件或者其组合来实现这里描述的实施例。此外,可以在替选 实施例中以任何组合来组合关于各个实施例描述的特征。
权利要求
1.一种检测故障攻击的方法,包括提供多个掩蔽值(R1至Rl);生成第一数据元素集合(D1... Dm),所述第一数据元素集合包括第一组数据元素(D1至 Dn)和至少一个附加数据元素,所述至少一个附加数据元素通过在所述第一组数据元素中 的至少一个数据元素与所述掩蔽值中的至少一个掩蔽值之间进行异或而生成;生成与在所述第一数据元素集合的每一个数据元素与所述多个掩蔽值中的所选掩蔽 值(R)之间的异或对应的第二数据元素集合(D/ ... Dm');通过在所述第一数据元素集合的各数据元素之间进行交换运算来生成第一签名(S1);通过在所述第二数据元素集合的各数据元素之间进行所述交换运算来生成第二签名 (S2);以及比较所述第一签名与第二签名以检测故障攻击。
2.根据权利要求1所述的方法,其中,生成所述至少一个附加数据元素包括通过在所 述第一组数据元素(A’ )的每一个数据元素与所述多个掩蔽值中的每一个掩蔽值之间进行 异或来生成附加的多组数据元素;并且选择至少一个附加组的至少一个数据值以形成所述 至少一个附加数据元素。
3.根据权利要求2所述的方法,其中,生成所述附加的至少一组数据元素还包括在所 述第一组数据元素的每一个数据元素与所述掩蔽值中的两个掩蔽值的每个组合之间进行 异或。
4.根据权利要求1所述的方法,其中,通过在所述第一数据元素集合的每个数据元素 与所述多个掩蔽值中的所选掩蔽值(R)之间进行异或来掩蔽所述第一数据元素集合的每 个数据元素,从而生成所述第二数据元素集合(D/ ... DM’)。
5.根据权利要求1所述的方法,其中,通过在所述第一组的每个数据元素与所述多个 掩蔽值中的所选掩蔽值(R)之间进行异或来掩蔽所述第一组数据元素(D1... Dn)以生成 被掩蔽的数据元素组(D/ ... D/ ),并且在所述被掩蔽的数据元素组的至少一个数据元素 与所述掩蔽值中的所述至少一个掩蔽值之间进行异或,从而生成所述第二数据元素集合(Di · · · Dm ) ο
6.根据权利要求1所述的方法,其中,对于每一被掩蔽的组中的每一个数据值,选择所 述至少一个附加数据元素包括确定所述数据值是否已经存在于所述第二数据元素集合中;以及如果所述数据值未存在于所述第二数据元素集合中,则将所述数据值添加到所述第二 数据元素集合中。
7.根据权利要求6所述的方法,其中,选择所述至少一个附加数据元素还包括将添加到所述第二数据元素集合中的各数据值标记为不可用;以及如果所述数据值已经存在于所述第二数据元素集合中,则确定所述数据值是否被标记 为不可用,若否,则将所述数据值标记为不可用,而若是,则将所述数据值添加到所述第二 数据元素集合中。
8.根据权利要求1所述的方法,其中,生成所述第一签名和第二签名包括在对应的数 据元素集合的各数据元素之间进行异或。
9.根据权利要求1所述的方法,其中,生成所述第一签名和第二签名包括将对应的数据元素集合的各数据元素全部相加。
10.根据权利要求1所述的方法,其中,生成所述第一签名和第二签名包括将对应的数 据元素集合的各数据元素全部相乘。
11.一种用于检测故障攻击的电路,包括存储器,存储多个掩蔽值汛至10 ;计算块(302,108,10 ,被布置成生成第一数据元素集合(D1. . . Dm),所述第一数据元 素集合包括第一组数据元素(01至0,)和至少一个附加数据元素,所述至少一个附加数据元 素通过在所述第一组中的至少一个数据元素与所述掩蔽值中的至少一个掩蔽值之间进行 异或而生成;并且生成与在所述第一数据元素集合的每一个数据元素与所述多个掩蔽值中 的所选掩蔽值(R)之间的异或对应的第二数据元素集合(D/ . . . Dm');签名块(116),被布置成通过在所述第一数据元素集合的各数据元素之间进行交换运 算来生成第一签名(S1)并且通过在所述第二数据元素集合的各数据元素之间进行所述交 换运算来生成第二签名(S2);以及比较器(120),被布置成比较所述第一签名与第二签名以检测故障攻击。
12.根据权利要求11所述的电路,还包括函数单元(102),被布置成基于所述第一数 据元素集合的至少一个数据元素来进行运算,其中,所述函数单元被布置成基于密钥(K) 进行加密或者解密运算。
13.一种集成电路,包括根据权利要求11所述的电路。
14.一种集成电路卡,包括根据权利要求13所述的集成电路。
15.一种集成电路读卡器,包括根据权利要求13所述的集成电路。
全文摘要
本发明涉及一种检测故障攻击的方法,该方法包括提供多个掩蔽值(R1至RL);生成第一数据元素集合(D1...DM),该第一数据元素集合包括第一组数据元素(D1...DN)和通过在第一组中的至少一个数据元素与所述掩蔽值中的至少一个掩蔽值之间进行异或而生成的至少一个附加数据元素;生成与在第一数据元素集合的每一个数据元素与所述多个掩蔽值中的所选掩蔽值之间的异或对应的第二数据元素集合(D1’...DM’);通过在第一数据元素集合的各数据元素之间进行交换运算来生成第一签名(S1);通过在第二数据元素集合的各数据元素之间进行所述交换运算来生成第二签名;以及比较第一签名与第二签名以检测故障攻击。
文档编号G06K19/07GK102063586SQ20101055288
公开日2011年5月18日 申请日期2010年11月17日 优先权日2009年11月18日
发明者雅尼克·特戈利亚 申请人:意法半导体(鲁塞)公司