使替换运算免受侧信道分析的方法与流程

文档序号:13391200阅读:261来源:国知局
使替换运算免受侧信道分析的方法与流程

本发明涉及一种用于使电路或程序免受旨在发现由所述电路或程序处理的机密数据的值(特别是由加密或解密算法用于变换消息的私钥)的侧信道分析的方法和设备。

本发明特别涉及实现诸如aes(高级加密标准)之类的密码算法的智能卡集成电路或集成到计算机和其它电子和it设备(usb驱动器、电视解码器、游戏控制台等)的母板上的硬件加密组件。本发明还涉及实现这种算法的程序,该程序用于在安全或不安全的环境中执行。

更一般地说,本发明涉及实现组合了需要隐藏的两个数据的运算的电路和软件。



背景技术:

实现密码算法的电路可以包括中央处理单元(cpu),并且可能包括专用于密码计算的电路,例如密码协处理器。这些电路可以包括根据所执行的运算以不同的方式切换的数千个逻辑门。这些切换操作在电流消耗上产生短暂变化(例如几纳秒),并且这些变化可以被测量。具体而言,cmos型集成电路包括在切换时(即,当逻辑节点将其状态变为1或0时)才消耗电流的逻辑门。因此,电流消耗取决于中央处理单元所处理的数据及其各种外围设备(存储器、数据和地址总线、密码协处理器等)。

此外,使用加密或模糊技术(例如白盒密码技术)的某些软件程序可以以非常难以通过逆向工程确定的方式来集成机密数据。某些软件程序还可以通过安全通信通道从外部接收机密数据。

基于观察这些电路的电流消耗、或它们的磁或电磁辐射时,这些电路可能会受到所谓的侧信道分析攻击。此类攻击旨在发现机密数据,特别是加密密钥。当前侧信道攻击实施诸如spa(“单功耗分析”)、dpa(“差分功耗分析”)、cpa(“相关功耗分析”)或ema(“电磁分析”)之类的统计分析方法。spa分析(参考文献[1])通常只需要获取单个电流消耗踪迹。其目的是通过观察对应于密码计算的消耗踪迹的一部分来获得关于集成电路的活动的信息,因为当前踪迹根据所执行的运算和所处理的数据而变化。软件在被电路执行期间也可能经历这种侧信道攻击。

dpa(参考文献[2])和cpa(参考文献[3])分析使得能够通过获取大量电路消耗踪迹并通过对这些踪迹进行统计分析以查找目标信息来找到加密算法的密钥。它们基于这样的前提:即,当寄存器中或总线上的位从0变为1时,cmos型集成电路的消耗发生变化,以及当位保持等于0、保持等于1或从1变为0(mos晶体管的寄生电容的放电)时,消耗不发生变化。或者,可以认为当位从0变为1或从1变为0,cmos型集成电路的消耗变化,并且当位保持等于0或保持等于1时,cmos型集成电路的消耗不变。该第二假设使得能够使用常规的“汉明距离”或“汉明权重”函数来开发不需要知道集成电路的结构即可应用的消耗模型。dpa分析涉及通过对大量消耗踪迹的统计处理来放大该消耗差异,目的在于突出根据公式假设区分的两个消耗踪迹族之间的测量差异。

cpa分析(参考文献[3])基于线性电流消耗模型,并且涉及计算首先所测量的形成所捕获的消耗踪迹的消耗点与其次根据线性消耗模型和有关由微电路处理的待发现的数据以及有关加密密钥的值的假设而计算出的推定消耗值之间的相关系数。

电磁分析(ema)基于如下原理:即,集成电路可以以近场或远场电磁辐射的形式发送信息。假设晶体管和连接它们的电线在其状态改变时发射电磁信号,则可以通过诸如spa、dpa和cpa分析中的一种或其它分析,像电流消耗变化信号那样处理这些信号。此分析的一个应用实例由jean-jacquesquisquater(参考文献[4])在2001年做出。

存在其它侧信道分析,例如“模板分析”(参考文献[5])和“交互信息分析”(mia)(参考文献[6])。所有上述分析都基于所有被分析的踪迹的时间对准。换言之,在给定时间(例如从命令的执行被电路激活的时间)执行的所有测量都必须对应于由算法处理的相同数据。

由申请人于2016年2月22日提交的专利申请n°fr1651443公开了一种用于在电路连续地对不同的输入数据执行运算时分析代表电路活动的踪迹的方法。此方法包括提取每个踪迹的一部分,并且通过对出现在这些踪迹的每个提取部分中的每个可能值的出现次数进行计数,根据每个提取的踪迹部分生成直方图。然后通过对每个输入数据和运算中涉及的密钥的一部分的每个可能值应用运算来计算运算的部分结果。然后,此方法针对密钥的每个可能的部分值,识别提供相同部分结果的所有输入数据。对于密钥的每个可能的部分值,然后将直方图中与识别的输入数据和密钥的部分值对应的出现次数进行相加。密钥的一部分可以通过对相加的出现次数进行统计分析来确定。统计分析假设如果与密钥相关的值已经在所提取的踪迹部分中泄露,则可以通过相加的出现次数突显它。

需要针对集成电路或软件程序提出一种免受这些侧信道分析中的一种或多种的保护。为此,已知通过使用异或(xor)运算将敏感数据与随机选择的掩码相组合来使用随机值经掩蔽敏感数据。例如,以下运算:

c=a⊕b,

a和b表示敏感数据,“⊕”表示xor运算符,该运算可以使用随机选择的掩码值u和v进行保护:

a'=a⊕u,

b'=b⊕v,

c'=a'⊕b'=c⊕u⊕v,

因此,结果数据c受到保护,其不直接位于执行其计算的计算单元中,但是可以根据经经掩蔽数据c'和掩码值u和v,使用以下等式推导出:

c=c'⊕u⊕v

根据其它已知的保护方法,以随机顺序执行独立运算,和/或添加虚拟运算以防止需要待分析数据处理的运算的时间对准的分析。此类方法对于上述分析的一阶版本似乎是有效的,但是对于这些分析方法中的一部分的二阶版本(将数据处理的不同部分的两种分析和这两种分析的相关结果相组合)并不有效。

因此,希望提供一种对二阶已知侧信道分析有效的保护方法。



技术实现要素:

描述了一种用于通过电路执行应用于包括至少一个字的输入数据的运算的方法。所述方法可以包括:将所述运算应用于包括通过对所述输入数据和对第一掩码集中的所有第一掩码参数应用异或xor运算而获得的数据的输入集中的所有数据,所述第一掩码集中的每个第一掩码参数包括至少一个字,所述第一掩码集中的所述字具有相同大小并且形成第一字子集,所述第一字子集包括来自所述第一掩码集的每个第一掩码参数的单个字并且包括的所述字的所有可能值的出现次数相同;以及提供作为所述运算的输出的输出集,所述输出集包括对所述输入集中的所述数据之一应用所述运算而产生的所有数据,所述输出数据是通过对所述输出集中的任一所述数据以及对第二掩码集中的相应第二掩码参数应用xor运算而获得的,所述第二掩码集中的每个第二掩码参数包括至少一个字,所述第二掩码集中的所述字具有相同大小并且形成第二字子集,所述第二字子集包括来自所述第二掩码集的每个第二掩码参数的单个字并且包括的所述字的所有可能值的出现次数相同。

根据一个实施例,使用随机置换函数(randompermutationfunction)来生成所述第一掩码集。

根据一个实施例,所述运算是替换运算,借助该替换运算使用所述输入数据作为索引在输入替换表中选择输出数据,所述方法包括:使用从所述输入替换表生成的经掩蔽替换表,并且针对所述第一掩码集中的每个所述第一掩码参数包括一个经掩蔽替换表;以及针对所述第一掩码集中的每个第一掩码参数,选择所述经掩蔽替换表中与该第一掩码参数相对应的一个经掩蔽替换表,并且使用所述输入集中与该第一掩码参数相对应的第二数据作为索引来在所选择的经掩蔽替换表中选择第一数据,所述输出集包括在所述经掩蔽替换表中的一个经掩蔽替换表中选择的所有第一数据。

根据一个实施例,所述经掩蔽替换表通过以下方式生成:生成所述第一掩码集;生成第二掩码集,所述第二掩码集包括数量与所述输入替换表中的值的数量相等的第二掩码参数,每个第二掩码参数在所述第二掩码集中具有相同的出现次数;在所述第一和第二掩码集中分别选择一次每个掩码参数以形成掩码对,每个掩码对包括所述第一掩码参数之一和所述第二掩码参数之一;针对每个掩码对生成一个所述经掩蔽替换表,每个所述经掩蔽替换表的生成包括:选择所述输入替换表中的每个数据,并且针对每个选定数据:通过对所述选定数据和对所述掩码对的所述第二掩码参数应用xor运算来计算经掩蔽数据,通过对所述掩码对的所述第一掩码参数和原始索引应用xor运算来计算经掩蔽索引,以及将所述经掩蔽数据存储在所述经掩蔽替换表中,所述选定数据在所述原始索引处被选择并且所述经掩蔽数据被存储在所述经掩蔽索引处,或者所述选定数据在所述经掩蔽索引处被选择并且所述经掩蔽数据被存储在所述原始索引处。

根据一个实施例,每个掩码对的所述第一和第二掩码参数是相同的,或者使用与被应用于所述第一掩码集中的所述第一掩码参数的秩的位移函数相组合或不相组合的双射函数从所述第一掩码集导出所述第二掩码集,或者,使用随机置换函数生成所述第二掩码集,或者生成所述第二掩码集,以使得所述第一掩码集中的每个所述第一掩码参数与所述第二掩码集中的对应第二掩码参数的借助xor运算的组合产生包括第三掩码参数的第三掩码集,所述第三掩码集中的每个第三掩码参数包括至少一个字,所述第三掩码集中的所述字具有相同大小并且形成第三字子集,所述第三字子集包括来自所述第三掩码集的每个第三掩码参数的单个字并且包括的字的所有可能值的出现次数相同,所述出现次数具有所述第三字子集中的字的大小。

根据一个实施例,所述经掩蔽替换表中的值以随机顺序被确定和/或被存储在所述经掩蔽替换表中的随机选择的位置处。

根据一个实施例,所述输出集中的所述数据的计算以随机顺序被执行和/或被存储在所述输出集中的随机选择的位置处。

根据一个实施例,所述方法包括通过以下方式检测所述输出集中的计算误差:检测所述输出集中的两个相同数据;或者对所述输出集中的每个数据和对所述第一或第二掩码集中的对应掩码参数应用xor运算,并且在所述xor运算的结果中搜索与期望输出数据不同的数据。

各实施例还涉及一种根据包括替换运算的密码算法对输入数据进行加密或解密的方法,其中所述替换运算根据上述方法被执行。

根据一个实施例,所述密码算法符合所述高级加密标准(aes)算法,所述方法包括:通过对所述输入数据的每个字、对所述第一掩码集中的每个掩码参数以及对与所述输入数据的所述字相对应的私钥的字应用xor运算而生成输入集;执行若干中间轮,每轮包括:对所述输入集中的每个字应用所述替换运算,通过对一轮输出集的每个字、对所述第一掩码集的相应掩码参数以及对所述第二掩码集的相应掩码参数应用xor运算而计算经掩蔽轮输出集,以及使用所述经掩蔽轮输出集作为下一轮的输入集;执行包括对所述输入集中的每个字应用所述替换运算的最后一轮;以及提供输出集,其中每个字被所述第二掩码集的相应掩码参数所掩蔽。

根据一个实施例,生成所述第一和第二掩码集,以使得从所述第一掩码集的每个掩码参数与所述第二掩码集的对应掩码参数的借助xor运算的组合生成的第三掩码集仅包括所述输入数据的字的所有可能值的一次出现。

根据一个实施例,所述方法包括生成与所述输入集中的多个字对应的多个元素的随机置换,使用所述置换来选择所述密码算法的运算的输入集中的所述字,以及以所述置换限定的顺序对所述输入集的所述字应用所述运算。

根据一个实施例,生成新的随机置换,方式为:在第一轮的所述密码算法期间,和/或在每一轮的所述密码算法中,和/或在最后一轮的所述密码算法中,和/或在所述密码算法的每次运算之前。

各实施例还可以涉及一种电路,其包括处理器并被配置为实现上述方法。

根据一个实施例,所述电路包括针对每个经掩蔽替换表执行替换运算的一个电路。

根据一个实施例,所述电路包括协处理器。

各实施例还可以涉及一种设备,其包括布置在介质上的如以上定义的电路。

各实施例还可以涉及一种计算机程序产品,其可加载到计算机存储器中并且包括代码部分,当由计算机执行时,所述代码部分配置所述计算机以执行如以上定义的方法的步骤。

附图说明

通过参考下面的附图和说明书,可以更好地理解上述方法和/或设备。非限制且非穷举的说明书借助以下附图进行描述。在附图中,相同的参考标号可以指不同附图当中的相同部分,除非另有所指,这些附图是:

图1表示安全电路的常规架构;

图2是根据一个实施例保护的电路的框图;

图3和图4是示出根据不同实施例的用于保护数据的方法的数据框图;

图5是根据一个实施例的用于保护数据的方法的流程图;

图6是示出根据一个实施例保护的运算的数据框图;

图7是根据一个实施例保护的运算的流程图;

图8a、8b、8c是示出根据各种实施例的用于保护替换表的方法的替换表的框图;

图9和图10是根据不同实施例的用于生成受保护替换表的方法的流程图;

图11是根据一个实施例保护的替换运算的流程图;

图12是根据一个实施例保护的aes加密电路的框图;

图13是aes加密算法中的常规混合列运算的框图;

图14是根据一个实施例的受保护aes加密电路的aes混合列电路的框图;

图15是根据一个实施例保护的xor运算的流程图;

图16表示根据一个实施例的受保护电路。

具体实施方式

图1表示安全集成电路ct(例如布置在诸如塑料卡或任何其它介质之类的便携式介质hd上,或者布置在诸如移动终端的终端中)的一个实例。集成电路包括微处理器prc、输入/输出电路ioc、通过数据和地址总线与微处理器耦合的存储器m1、m2、m3,以及可选地包括密码计算协处理器cp1或算术加速器,以及随机数生成器rgn。存储器可以包括易失性存储器m1,例如包含易失性应用数据的ram型(“随机存取存储器”)存储器,非易失性存储器m2,例如包含非易失性数据和应用程序的eeprom或闪存,以及可以包括只读存储器m3(或rom存储器),其包含微处理器的操作系统和恒定数据。操作系统也可以存储在非易失性存储器中。

通信接口电路ico可以是例如根据iso/iec7816标准的接触型电路,可以是例如根据iso/iec14443a/b或iso/iec13693标准的具有感应耦合的非接触型电路,可以是例如电耦合的非接触型电路(uhf接口电路),或同时为接触型和非接触型电路。接口电路ioc还可以通过特定接口耦合到诸如nfc控制器的另一电路,或诸如移动终端或已连接对象的终端的主电路。

在一些实施例中,集成电路ct可以被配置为通过加密功能执行对发送给它的消息进行加密、解密或签名的操作。这些加密操作可以由电路ct的处理器prc执行,或者由处理器prc部分或完全委托给协处理器cp1执行。

本文提出了使运算(例如密码算法中的运算)免受侧信道分析。在此上下文中,所述运算接收输入数据,并且根据输入数据的值提供输出数据。根据一个实施例的保护涉及针对数据输入集的所有数据执行要保护的运算,输入集中的每个数据包括至少一个字,输入集中的字具有相同大小并且形成字子集或列,所述字子集或列包括来自输入集中的每个数据的单个字并且包括的所有可能的字的出现次数相同,所述出现次数与字的大小相关。因此,输入集包括需要通过所述运算处理的输入数据。由所述运算提供的结果是数据的输出集,其中每个数据包括至少一个字,输出集中的字具有相同大小并且形成字子集或列,所述字子集或列包括来自输出集中的每个数据的单个字并且包括的所有可能的字的出现次数相同,所述出现次数与字的大小相关。

在下文中,“字”指定数据中的一组位,“字列”指定数据集的子集,该子集包括来自数据集中的所有数据的单个字,字列中的所有字具有相同大小,这些字形成不一定对齐的字列,即,不一定在数据集的数据中包括相同的位位置。

图2表示接收要处理的输入数据x并连续地执行被应用于输入数据x的多个运算op1、op2、...opn的电路ct1。根据一个实施例,电路ct1包括多个电路oc,每个电路oc连续地执行运算op1、op2、...opn。每个电路oc接收输入数据x和输入掩码参数集的相应输入掩码参数u。因此,电路ct1包括mx+1个电路oc,其分别接收等于0、1...mx的掩码,当考虑掩码参数的位中的大小时,mx表示掩码参数u的最大可能值。每个电路oc包括对输入数据x和对掩码参数u(=0或1,...或mx)应用异或运算(xor)的电路xg。在每个电路oc中,由电路oc的电路xg提供的数据x⊕u(u=0,...mx)被应用于电路oc的运算op1的输入。运算op1-opn如下所示:

opn(...op2(op1(x⊕u))...)=cx⊕v(u),(1)

其中“⊕”表示xor运算符,v(u)表示取决于输入掩码参数u的输出掩码参数,cx是被应用于输入数据x的运算op1-opn的结果:

cx=opn(...op2(op1(x))...)(2)

这样,每个电路oc提供等于cx⊕v(u)(u=0,1,...或mx)的输出数据。因此,电路ct1提供包括输出数据cx⊕v(0),cx⊕v(1),...cx⊕v(u),...cx⊕v(mx)的输出集pcx。可以调整运算op1-opn,以使得与由运算op1-opn提供的输入数据x⊕u对应的输出数据对于掩码参数u(0-mx)的每个值等于cx⊕v(u),并且输出掩码参数v(u)集(u=0到mx)在考虑输出掩码参数v(u)的大小时包括的所有可能值的出现次数相同。每个输出掩码参数v(u)可以等于对应的输入掩码参数u。根据一个实施例,输出集pcx中的输出数据的计算可以以随机顺序执行和/或以随机顺序存储。以这种方式,掩码参数u的不同值分别以随机顺序应用于电路oc。因此,电路ct1中的秩k的电路oc接收输入掩码参数u=u[k],u是由0和mx之间的所有可能的数字的随机置换生成的掩码集。以同样的方式,电路ct1中的秩0的电路oc接收掩码参数u[0],并且电路ct1中的秩mx的电路oc接收输入掩码参数u[mx]。

此外,电路oc彼此独立,并且输出集pcx的每个数据cx⊕v(u)的计算独立于该输出集的其它数据的计算。因此,只要遵循每个电路oc内的运算顺序,所有电路oc中的运算op1-opn可以以任何顺序被执行。

与现有技术的保护不同(其涉及将要保护的运算隐藏在被应用于随机数据的大量相同运算中,并且因此与要保护的运算的所需输入数据不相关),本文的理念是对不随机选择的其它数据执行运算。实际上,在以下范围内,此类其它数据与所需输入数据相关:即,由此类其它数据和要处理的所需数据形成的输入集使得该输入集中的每个数据包括至少一个字,所述输入集中的字具有相同大小并且形成字子集或列,所述字子集或列包括来自输入集中的每个数据的单个字并且包括的一个字的所有可能值的出现次数相同,所述出现次数与字大小相关。形成字列的字不必对齐,即,不一定在数据集的数据中包括相同的位位置。由于要处理的输入数据不是随机选择的,因此统计分析不能从包括随机部分的信号中提取反映所需输入数据的处理的信号。不同的掩码参数可在掩码集中具有不可预测的位置,但是执行所述运算的电路知晓该位置。

可以观察到,如果执行运算op1-opn的电路ct1发生诸如由成功的故障注入(faultinjection)引起的错误,则输出集px中的数据的至少一个字的值被改变。如果仅改变一个字,则输出集中的数据的每个字秩不包括字的所有可能值,而是包括两个相同的字,具有已改变的值的字一定具有输出集内同一字秩中的另一字的值。因此,此类故障注入可以通过查找输出集中具有相同值的两个数据来检测到。如果两个数据发生变化,只有当这两个数据的值发生交换(出现这种情况的几率极低)时才不能检测到故障注入。由于xor运算的特性,可以通过使用xor运算将输出集pcx中的所有输出数据组合在一起来容易地检测到错误,当输出集包括包含具有相同出现次数的字的所有可能值的至少一个字列时,该组合的结果等于0。检测故障注入的另一方法是通过xor运算将输出集中的每个字与对应的掩码参数相加。xor运算的结果应全部等于该运算的预期输出数据的一个字。

图3表示通过电路oc的运算xg被与掩码集u相组合的输入数据x1的一个实例,掩码集u包括掩码参数u[0..mx],其中mx是在考虑数据x1的位数大小情况下具有输入数据x1的最大可能值的索引。由运算xg提供的结果是例如布置在表中的输出集px1,其包括数据p1[0],p1[1],...p1[m],...p1[mx],其中每个数据p1[m]等于x1⊕u[m]。输出集px1中的数据可以以随机顺序被排列和/或计算。

图4表示包括多个字x2[0],x2[1],...x2[b],...x2[bx]的输入数据x2的另一实例。根据一个实施例,输入数据x2的每个字通过电路oc的运算xg被与掩码集u的相应掩码参数u[0],...u[mx]组合,其中每个掩码参数u[0],...u[mx]具有一个字的大小,在考虑这些字中每一者的位数大小的情况下,索引mx对应于输入数据x2的一个字或掩码参数u[m]的最大可能值。由运算xg提供的结果是例如布置在表px2[0..mx,0..bx]中的输出集px2,其包括数据p2[m,b]=x2[b]⊕u[m],其中m在0和mx之间变化,b在0和bx之间变化。输出集px2中的数据可以以随机顺序被排列和/或计算。

图5表示根据一个实施例的用于从包括要被应用于电路oc的运算xg的bx+1个字的输入数据p2产生输入集px2的程序的步骤s1到s8。首先相继执行步骤s1到s7。在步骤s1,向程序提供输入数据x2。在步骤s2,使用随机置换生成函数rnp随机地生成表格形式的两个置换u和pm,该随机置换生成函数接收置换u的极值0和mx以及置换pm的极值0和kx。置换u包括0和mx之间的mx+1个值,其中mx+1=2p,p是形成输入数据x2的字x2[b]中的每一者的位数。置换pm包括0和等于(mx+1)(bx+1)-1的最大值kx之间的(mx+1)(bx+1)个值。在步骤s3,将索引k初始化为零(0)。在步骤s4,通过考虑置换pm是包括bx+1个元素构成的行和mx+1个元素构成的列的双项表,从索引k计算索引m和b。因此,索引m可以被计算为值pm[k]除以(bx+1)的整数部int(),并且索引b可以被计算为值pm[k]与索引m和(bx+1)的乘积之间的差。步骤s5计算双项表px2的表元素p2。索引m和b处的每个表元素p2[m,b]被设定为被应用于字x2[b]和u[m]的xor运算的结果x2[b]⊕u[m]。由于使用随机置换pm,所以以随机顺序计算字p2[m,b],并且字p2[m,b]也以随机顺序布置在表px2中。在步骤s6,索引k递增一(1)。在步骤s7,将索引k与最大值kx进行比较。如果索引k大于值kx,则执行步骤s8,否则再次执行步骤s5到s7以进行新的迭代。在步骤s8,完全定义了输入集px2并提供输入集px2作为步骤s1到s7的输出。

如果可以以确定性顺序计算和/或存储表px2中的数据,则可以省略置换pm的生成和使用。另外,大型高成本置换pm可以分别由具有mx+1个元素和bx+1个元素的两个置换所替换,它们的元素分别在两个嵌套循环中被读取,一个循环用于选择两个置换中的第一置换的元素,另一个循环用于选择两个置换中的另一置换的元素。

运算op1-opn可以包括通过xor运算将输入数据x1与另一数据相组合的运算。图6示出了将数据x3和x4彼此组合的运算op1-opn的一个运算opk的一个实例。数据x3通过运算xg、op1-opn当中的前一运算产生,因此具有包括字p3[0,0],...p3[mx,bx]的输出集px3(类似于输出集px2)的形式。数据x4具有与数据x3相同的大小,因此包括字x4[0],...x4[b],...,x4[bx]。由运算opk提供的结果是例如布置在双项表中的输出集px5,其包括数据p5[m,b],其中m在0和mx之间变化,b在0和bx之间变化。因此,每个输出数据p5[m,b]等于opk(p3[m,b],x4[b])。输出集px5中的数据可以以随机顺序被排列和/或计算。运算opk例如是xor运算。

图7表示根据一个实施例的用于生成通过对输出集px3和数据x4应用运算而产生的输出集px5的程序的步骤s11到s18。首先相继执行步骤s11到s17。在步骤s11,输入输出集px3和包括bx+1个字的输入数据x4。在步骤s12,使用函数rnp随机生成表格形式的置换pm,置换pm包括0和最大值kx=(mx+1)(bx+1)-1之间的(mx+1)(bx+1)个值,其中mx+1=2p,p是形成输入数据x4的字x4[b]中的每一者的位数。在步骤s13,将索引k初始化为零(0)。在步骤s14,通过考虑置换pm是包括具有bx+1个元素的行和具有mx+1个元素的列的双项表,从索引k计算索引m和b。因此,索引m可以被计算为值pm[k]除以(bx+1)的整数部,并且索引b可以被计算为值pm[k]与索引m和(bx+1)的乘积之间的差。步骤s15计算采用双项表形式的输出集px5的输出数据p5[m,b]。索引m和b处的每个输出数据p5[m,b]被设定为被应用于字p3[m,b]和x4[b]的运算opk的结果opk(p3[m,b],x4[b])。由于使用置换pm,所以以随机顺序计算表px5中的输出数据p5[m,b],并且输出数据p5[m,b]也以随机顺序布置在表px5中。在步骤s16,索引k递增一(1)。在步骤s17,将索引k与最大值kx进行比较。如果索引k大于值kx,则执行步骤s18,否则再次执行步骤s15到s17以进行新的迭代。在步骤s18,完全定义了输入集px5并提供输入集px5作为步骤s11到s17的输出。

在图7的步骤s15的实例中,运算opk是xor运算。因此,对于每个索引m(=0..mx),并且对于每个索引b(=0..bx),输出集px5中的输出数据p5[m,b]等于p3[m,b],⊕x4[b]。可以观察到,输出集px5中的每个数据p5[m](大小为bx+1)是运算p3[m]⊕x4的结果,其中p3[m]=x1⊕u[m]。如果cx1=x1⊕x4,则p5[m]=x1⊕x4⊕u[m]=cx1⊕u[m]。因此,被应用于输入值x1的掩码u[m]可以在由电路oc中的运算opi执行的整个计算中被保留。运算opk可以是xor之外的任何其它运算,只要此运算按位执行并且是可逆的或双射的。

再次地,不必以随机顺序计算表px5中的数据或以随机顺序存储它们。在这种情况下,置换pm的使用不是强制性的。

可以进一步期望的是在运算opi中具有使用替换或查找表的替换运算。此类替换运算接收输入数据,并且使用输入数据作为索引来提供在表中读取的输出数据。根据一个实施例,使用以下等式计算经掩蔽替换表sbm:

sbm[i⊕u]=sb[i]⊕v(3)

其中sb是替换或查找表,i是用于选择表sb中的值sb[i]的索引,并且u和v分别是输入和输出掩码。图8a表示替换表sb以及通过对表sb中的每个值sb[i]应用等式(2)而从表sb导出的经掩蔽表sbm。因此,被应用于经掩蔽输入数据d⊕u的替换运算的结果是由已知输出掩码v所掩蔽的输出数据。如图8b所示,也可以通过将以下等式应用于替换表sb的每个值sb[i]来获得经掩蔽替换表sbm:

sbm[i]=sb[i⊕u]⊕v(1)

因此,可以从处理经掩蔽输入数据x⊕u的电路oc提供的输出数据导出预期输出数据cx1。然而,输出数据cx1不能从其它电路oc提供的输出数据被导出,因为在这些其它电路中,被应用于替换运算的输入数据未与被用于根据等式(3)或(4)生成掩码替换表的掩码参数u相组合。

根据一个实施例,针对每个电路oc计算经掩蔽替换表sbm[u],以使得对于掩码参数u(0...n)的每个值(其中v(u)是对应于掩码参数u的值的掩码参数):

sbm[u,d⊕u]=sb[d]⊕v(u)(2)

以使得对于所有掩码参数u1、u2(其中u1≠u2),v(u1)≠v(u2)。因此,由电路oc执行的替换运算的每个输出数据等于由掩码参数v(u)(=cx⊕v(u))所掩蔽的输出数据cx。替换表sb和经掩蔽替换表sbm在图8c中示出。替换表sb是包括mx+1个值sb[0],sb[1],...sb[mx]的单项表。经掩蔽替换表sbm是双项表,其对于每个掩码值u包括具有表sb的大小的一个单项表sbm[u]。因此,经掩蔽替换表sbm包括具有表sb大小的mx+1个单项表。

图9表示根据一个实施例的用于从替换表sb计算经掩蔽替换表sbm的程序的步骤s21到s30。首先相继执行步骤s21到s27。在步骤s21,输入替换表sb。在步骤s22,使用函数rnp随机生成表格形式的两个置换u和v。置换u和v包括0和mx之间的mx+1个值,其中mx+1是表sb中的值的数量。分别在步骤s23和s24,将索引i和j初始化为零(0)。步骤s25计算双项表sbm的表值sbm[i,j]。索引i和j处的每个表值sbm[i,j]被设定为被应用于数据sb[j⊕u[i]]和v[i]的xor运算的结果sb[j⊕u[i]]⊕v[i]。在步骤s26,索引j递增一(1)。在步骤s27,将索引j与最大值mx进行比较。如果索引j大于值mx,则执行步骤s28,否则再次执行步骤s25到s27以进行新的迭代。在步骤s28,索引i递增一(1)。在步骤s29,将索引i与最大值mx进行比较。如果索引i大于值mx,则执行步骤s30,否则再次执行步骤s24到s27以进行新的迭代。在步骤s30中,完全定义了经掩蔽表sbm并提供经掩蔽表sbm作为步骤s21到s29的输出。因此,经掩蔽表sbm的每个列i对应于使用特定掩码对(u[i],v[i])所掩蔽的替换表sb。

图10表示根据另一实施例的用于从替换表sb计算经掩蔽替换表sbm的程序的步骤s31到s38。首先相继执行步骤s31到s37。在步骤s31,输入替换表sb。在步骤s32,使用函数rnp随机生成表格形式的三个置换u、v和pm。置换u和v包括0和mx之间的mx+1个值,其中mx+1是表sb中的值的数量。置换pm包括0和最大值kx(等于(mx+1)(mx+1)-1)之间的(mx+1)(mx+1)个值。在步骤s33,将索引k初始化为零(0)。在步骤s34,通过考虑置换pm是包括具有mx+1个元素的行和具有mx+1个元素的列的双项表,从索引k计算索引i和j。因此,索引i可以被计算为值pm[k]除以(mx+1)的整数部,并且索引j可以被计算为值pm[k]与索引i和(mx+1)的乘积之间的差。步骤s35使用随机置换pm计算在表sbm中随机选择的表值sbm[i,j]。表sbm中的索引i和j处的每个值sbm[i,j]被设定为被应用于数据sb[j⊕u[i]]和v[i]的xor运算的结果sb[[j⊕u[i]]⊕v[i],由于使用置换pm来定义索引i和j,因此掩码参数u[i]和v[i]也在表u和v中被随机选择。在步骤s36,索引k递增一(1)。在步骤s37,将索引k与最大值kx进行比较。如果索引k大于值kx,则执行步骤s38,否则再次执行步骤s35到s37以进行新的迭代。在步骤s38,完全定义了经掩蔽表sbm并提供经掩蔽表sbm作为步骤s31到s37的输出。

应该观察到,在包括图5和9或10的程序的处理中,在步骤s5和s25或s35生成并使用单个置换u。

图11表示根据一个实施例的使用经掩蔽替换表sbm执行受保护替换操作的程序的步骤s41到s48。首先相继执行步骤s41到s47。在步骤s41,输入经掩蔽替换表sbm和采取输入集px6形式的受保护数据。输入集px6包括字p6[0,0],…p6[mx,bx].。在步骤s42,使用函数rnp随机生成表格形式的一个置换pm。置换pm包括在0和最大值kx(等于(mx+1)(bx+1)-1)之间的(mx+1)(bx+1)值。在步骤s43,将索引k初始化为零(0)。在步骤s44,如步骤s4那样计算索引m和b。步骤s45使用随机置换pm计算在输出集px7中随机选择的输出数据p7[m,b]。索引m和b处的每个输出数据p7[m,b]被设定为在表sbm[m]的以下索引处选择的元素sbm[m,p6[m,b]]的值:该索引由在表px6的索引m和b处选择的输出数据p6[m,b]定义。在步骤s46,索引k递增一(1)。在步骤s47,将索引k与最大值kx进行比较。如果索引k大于值kx,则执行步骤s48,否则再次执行步骤s44到s47以进行新的迭代。在步骤s48,完全定义了输出集px7并提供输出集px7作为步骤s41到s47的输出。

根据一个实施例,从同一替换表sb获得的可能的经掩蔽替换表sbm的数量通过针对掩码表u和v选择相同的表来化简。因此,等式(3)和(4)变为:

sbm[d⊕u]=sb[d]⊕u(6)

和sbm[d]=sb[d⊕u]⊕u(7)

在步骤s25和s35中执行的计算变为:

sbm[i,j]=sb[j⊕u[i]]⊕u[i](8)

以这种方式,可能的经掩蔽替换表的数量通过因子(mx+1)化简,这使得所有可能的经掩蔽表能够被预先计算并存储在存储器中,而不是在每次生成新的掩码表u和v时被计算和存储。

事实证明,随机置换的生成在所需计算运算量方面具有不可忽略的成本。根据一个实施例,步骤s22、s32的置换u和v中的一者的生成通过根据掩码u的值计算掩码表v的值或相反的操作来避免。例如,掩码表v的每个值v[m]被选择为等于u[m]⊕k,k是在生成掩码表u时可被随机选择的恒定参数。根据另一实例,每个值v[m]被选择为等于u[m⊕k1]⊕k2,k1,k2是在生成掩码表u时可被随机选择的恒定参数。掩码表v也可以被随机生成,并且掩码表u根据表v中的值以相同的方式被确定。

应当注意,在一些应用中,替换表sb中的不同值的数量可以小于其值的数量。因此,表sb中的每个值具有大于1的相同出现次数。在这种情况下,生成掩码表v,以便在表sb中包括相同出现次数的相同值。

在通过软件或硬件实现的aes(高级加密标准)算法中执行的所有运算都可以使用先前公开的程序进行保护。图2所示的架构可以被应用于aes算法。图12表示作为图2中的电路oc的一个实例的密码计算电路oc1,oc1实现用于加密数据的aes算法。有关aes的更多详细信息,可以参考2001年11月26日公布的文献“advancedencryptionstandardfipspub197(高级加密标准fipspub197)”。密码计算电路oc1包括在电路ct2中,电路ct2包括若干密码计算电路oc1,每个密码计算电路oc1接收要处理的数据x1和掩码参数索引m,并且提供通过xor运算被与对应于掩码参数索引m的掩码参数v[m]相组合的结果数据cx1。

电路oc1包括执行xor运算的电路xg1、xg2、xg3、替换计算电路sbb、基于行的循环置换计算电路shr、多路复用器mux和基于列的置换计算电路mxc。电路sbb、shr和mxc遵循aes。电路xg1在被提供给电路oc1的轮次密钥表kt中的索引0处接收要加密的数据x1和导出密钥kt[0]。电路xg1的输出由电路sbb和shr处理。电路shr的输出在aes算法的0到r-1轮中通过多路复用器mux发送到电路mxc,在最后一轮r中发送到电路xg3,电路xg3在另一输入端接收位于轮次密钥表kt的索引r处的最后导出密钥kt[r]。在轮0到r-1,电路mxc的输出由接收在表kt中读取的导出密钥kt[r](r=1,...,r-1)的电路xg2处理。电路xg2的输出由电路sbb和shr处理。当通过包括电路sbb、shr、mxc、xg2的链执行特定数量(r-1)的计算轮次(10、12或14,与aes一致)时,多路复用器mux被启动以将电路shr的输出提供到提供输出数据cx1的电路xg3的输入端。

在第一计算轮次中,数据x1由电路xg1进行处理,电路xg1通过xor运算将其与第一导出密钥kt[0]相加。电路xg1提供由电路sbb、shr、mxc和xg2相继处理的结果数据x1⊕k[0]。然后,电路xg2将由电路mxc提供的数据与导出密钥kt[r](r=1,...,r-1)组合。电路sbb、shr、mxc和xg2在aes算法的多个轮次中相继被激活。电路sbb、shr和xg3在aes算法的最后一轮r被激活。在每一轮j中,在表kt中读取轮次密钥kt[r](r=0,...,r)。

替换计算电路sbb通常使用替换表实现,该替换表接收用作用于在替换表中选择输出数据的索引的输入数据。替换表包括256个字节,并且由电路sbb处理的数据的每个字节用作用于在替换表中选择字节的索引。置换计算电路shr可以被放置在替换计算电路sbb之前。

根据一个实施例,电路oc1包括分别执行与掩码参数u[m]和u[m]⊕v[m](m=0,...mx)的xor运算的电路xg4和xg5。电路xg4接收包括具有一个字(例如一个字节)大小的mx+1个掩码参数的掩码表u[0..mx],以及具有掩码参数的大小的bx+1个字(16字节,bx=15)的输入数据x1[0..bx],并且针对具有被包括在输入数据x1中的掩码参数的大小的每个字执行与掩码参数u[m]的xor运算。对于索引m的每个值,电路xg4向电路xg1提供经掩蔽输入数据,记为x1⊕u[m]。因此,电路xg4可以实现图5的步骤s1到s8,对于掩码表u[0..mx]中的每个掩码参数u[m]执行xor运算,该掩码表是具有0到255之间的256个值的随机选择的置换。由电路xg4向电路xg1提供的结果是具有输出集px2[0..mx,0..bx]的形式的输出集px10(图4、5)。由电路xg1、xg2和xg3执行的运算根据图6,通过执行步骤s11到s18(图7)来实现。电路xg1的输入集是由电路xg4提供的输出集px10,并且具有图7中的输入集px3的形式。图7中的输入数据x4是电路xg1的轮次密钥kt[0,0..bx]、电路xg2的轮次密钥kt[r,0..bx](r=1,...r-1)以及电路xg3的轮次密钥kt[r,0..bx],表kt中的每个轮次密钥包括bx+1个字节。电路xg1提供具有输出集px5[0..mx,0..bx](图7)的形式的输出集px20[0..mx,0..bx]。

被提供给电路sbb的替换表是通过执行图9或10的步骤而生成并且借助掩码表u和v获得的双项表sbm[0..mx,0..mx],掩码表u与到电路xg4的一个输入相同。由电路sbb执行的运算包括图11所公开的步骤s41到s48,其中输入集px6是由电路xg1提供的输出集px20。电路sbb提供采取输出集px7[0..mx,0..bx](图11)的形式的输出集px3j(第0轮的px30)。

电路shr被设计为单独处理输出集px3j中的每个数据px3j[m,0..bx](m=0,...mx)。电路shr针对索引m的每个值(0到mx)提供包括表px4j[m,0..bx]的输出集px4j[0..mx,0..bx]。电路mxc提供输出集px5j[0..mx,0..bx]。

图13表示电路mxc。电路mxc将电路shr的输出数据x6与具有4×4个元素的系数矩阵mc相组合。为此,将输出数据x6组织成采取4×4个元素x0至x15格式的矩阵,这些元素中的每一者对应于以128位编码的数据x6的字节。矩阵x6的元素通过xor运算电路xg6被与矩阵mc的元素组合在一起,以产生4×4元素的结果矩阵tr,其中每个元素具有以下形式:

a·x<i>⊕b·x<i+1>⊕c·x<i+2>⊕d·x<i+3>(9)

其中a、b、c、d(=1、2或3)是矩阵mc的一行的元素,i等于0、4、8和12。根据aes,如果x低于128(当x的最高有效位(msb)等于0时),则通过使用运算ls1(x)来执行运算2·x,如果x大于或等于128(当x的msb等于1时),通过使用运算ls1(x)⊕0x1b来执行运算2·x,ls1(x)表示在字节x中向左移一位。运算3·x通过使用运算2·x⊕x来执行。

由于输入数据x6的每个字节b由一个表px4j[0..mx,b]表示,因此电路mxc针对输出集px4j中的每个字节执行3×16个xor运算。执行运算3·x可能需要再执行一次xor运算。然而,在aes算法的一些实现中,运算2·x和3·x通过查找表实现。

如图14所示,在每个表px4j[m]中执行用于计算图13所示的矩阵tr的元素的xor运算,并且这些运算针对每个表px4j[m]提供表px5j[m]。

当执行电路mxc的运算以保留针对数据的掩码时,由于每个字节x’<j>被相同的掩码v(=v[m],x’<j>=x<j>⊕v)所掩蔽,因此还需要关注运算的顺序。等式(9)的运算通过应用以下性质来执行:

a(x⊕v)=ax⊕av,且a=2或3(10)

因此:

a=2x<0>⊕3x<1>⊕2v⊕3v⊕x’<2>⊕x’<3>

=2x<0>⊕3x<1>⊕2v⊕2v⊕v⊕x’<2>⊕x’<3>

=2x<0>⊕3x<1>⊕v⊕x<2>⊕v⊕x’<3>

=2x<0>⊕3x<1>⊕x<2>⊕x’<3>(11)

因此,在该计算步骤中,即使在执行最后一次xor运算时再次出现掩码v,也要去除掩码v,该掩码能够形成被侧信道分析利用来确定数据x的泄漏:

a=(2x<0>⊕3x<1>⊕x<2>⊕x<3>)⊕v(12)

相比之下,如果以以下顺序执行元素a的计算:

a=2x’<0>⊕x’<2>⊕x’<3>⊕3x’<1>(13)

则可以获得:

a=2x<0>⊕x<2>⊕x’<3>⊕3x’<1>⊕2v⊕v

=2x<0>⊕x<2>⊕x<3>⊕3x’<1>⊕3v⊕v

=2x<0>⊕x<2>⊕x<3>⊕3x’<1>⊕2v⊕v⊕v

=2x<0>⊕x<2>⊕x<3>⊕3x<1>⊕2v⊕3v

=2x<0>⊕x<2>⊕x<3>⊕3x<1>⊕v(14)

因此,当以系数a、b、c、d等于(2113)的顺序执行xor运算时,每个xor运算的结果总是被掩蔽。顺序(1213)、(3112)和(1312)也在每个xor运算之后保持掩蔽。还应观察到,被应用于输入数据的掩码v保持在由电路mxc执行的运算的输出数据中。

在图12中,电路xg2提供具有输出集px5[0..mx,0..bx](图7)的形式的输出集px6j[0..mx,0..bx]。电路xg5被串联并插在电路xg2和sbb之间。电路xg5从电路xg2接收输出集px6j,在另一输入端接收由表u和v通过xor运算进行组合而产生的掩码表w=u⊕v。因此,表w中的每个值w[m]等于在掩码表u和v中的索引m处选择的值u[m]和v[m]的异或和u[m]⊕v[m]。一旦生成了掩码表u和v,就可以计算表w。通过适当地选择置换u和v,表w的每个字列包括的字的所有可能值的出现次数可以相同,所述出现次数具有掩码参数u[m]和v[m]的字的大小。

根据一个实施例,掩码表u0和v0的一个或多个对(u0,v0)被存储在电路ct1中,每个对(u0,v0)被测试以提供包括掩码参数w[m]=u0[m]⊕v0[m])和至少一个字列的表w,所述至少一个字列包括的字的所有可能值的出现次数相同。电路ct1被配置为按照以下方式导出成对的掩码表(u2,v2):

u2[m]=pm(u1[m]⊕ur)

v2[m]=pm(v1[m]⊕vr),对于每个索引m(3)

或者

u2[m]=pm(u1[m])⊕ur

v2[m]=pm(v1[m])⊕vr,对于每个索引m(4)

其中ur和vr是具有掩码参数u[m]或v[m]中的任一者的大小的随机字,u1和v1是通过等式(15)或(16)获得的预先计算的表,或分别等于u0和v0,pm是被应用于表u1和v1的元素的随机选择的置换。可以证明,使用等式(15)或(16)计算的每个对(u2,v2)具有提供包括字列的表w的性质,该字列包括的字的所有可能值的出现次数相同。

电路xg5向电路sbb提供输出集px2j。电路xg5可以实现图15所示的步骤s51到s58。根据到一个实施例,步骤s51到s58执行将掩码表w[0..mx]应用于输入集px8[0..mx,0..bx]。首先相继执行步骤s51到s57。在步骤s51,输入掩码表w和具有输入集px8的形式的受保护数据。输入集px8包括字p8[0,0],…p8[mx,bx],并且掩码表包括掩码参数w[0],...w[mx]。在步骤s52,使用函数rnp随机生成表格形式的置换pm,置换pm包括0和最大值kx=(mx+1)(bx+1)-1之间的(mx+1)(bx+1)个值,其中mx+1是表px8中的值的数量,mx是该表中的最大值。在步骤s53,将索引k初始化为零(0)。在步骤s54,如步骤s4那样计算索引m和b。步骤s55使用随机置换pm(p9[m,b]=p8[m,b]⊕w[m]),通过借助xor运算将位于在输入集px8中随机选择的索引m和b处的输入字p8[m,b]和位于在掩码表w中随机选择的索引m处的掩码参数w[m]进行组合来计算位于输出集px9中的索引m和b处的输出字p9[m,b]。在步骤s56,索引k递增一(1)。在步骤s57,将索引k与最大值kx进行比较。如果索引k大于值kx,则执行步骤s58,否则再次执行步骤s54到s57以进行新的迭代。在步骤s58,完全定义了输出集px9并提供输出集px9作为步骤s51到s57的输出。

因此,由电路xg5提供的输出集px2j包括使用掩码参数w[m]=u[m]⊕v[m](m=0,...mx)所掩蔽的字p9[m,b]。由于输出集px6j中的数据已经被由电路sbb应用的掩码参数v[m]所掩蔽,因此这些掩码被电路xg5去除。这样,数据组px2j包括仅被掩码参数u[m]掩蔽的数据,因此数据集px2j已就绪以供电路sbb进一步处理。

在最后一个轮次r中,电路sbb提供输出集px3r[0..mx,0..bx],其中每个元素px3r[m,b]被掩码表v的掩码v[m]所掩蔽。电路xg3根据图7的程序将轮次密钥kt[r,0..bx]应用于输出集px4r,并提供采取双项表形式的输出集px7r[0..mx,0..bx],在该表中,位于索引m和b处的每个元素等于cx1[b]⊕v[m]并且对应于电路xg4的输出端处的输入数据x1[b]⊕u[m]。因此,通过对数据px7r[m,0..bx]应用掩码v[m],可以从输出集px7r中的每一行m(=0,...mx)导出由每个电路oc1处理的输出数据cx1[0..bx]。

应当注意,由包括电路sbb、shr、mxc、xg2、xg5和xg3的处理链所处理的所有数据总是被参数u或参数v所掩蔽。因此,该处理链在电路oc1中形成保护区域。电路oc1可以由具有相同保护等级的软件实现,因为该保护取决于可以在不降低保护等级的情况下通过硬件或软件实现的掩蔽运算。电路oc1可以由处理器prc或协处理器cp1执行的软件实现,也可以由例如在协处理器cp1中实现的硬件来实现。

根据另一实施例,电路xg3可以被配置为仅输出所述输出数据cx1。

根据另一实施例,掩码参数u[m]可以被加到轮次密钥kt[0]而非输入数据x1。掩码参数w[m]也可以被加到轮次密钥kt[1]到kt[r-1],并且掩码参数v[m]也可以被加到轮次密钥kt[r]。因此,可以从表kt预先计算由上述计算产生的变换后的轮次密钥表,并且可以从电路oc1中去除电路xg4和xg5。因此,可以在不必修改电路的情况下,在执行aes加密或解密的电路中实现所述保护方法。

根据另一实施例,可以省略电路xg5,并且使用掩码表v作为输入掩码表u,根据图10的程序在每个轮次中生成新的经掩蔽替换表sbm。因此,在步骤s32应只生成另一输出掩码表v和新的置换pm。

作为在电路oc1中的步骤s12、s32、s42和s52中的每一者处生成置换pm的替代方案,置换pm可以在由电路oc1执行的每个轮次中仅被生成一次,或者在第一轮的步骤s2仅被生成一次,或者在最后一轮的步骤s12或s32仅被生成一次。另外在步骤s2、s12、s32、s42和s52中的一者或多者中,可以通过生成两个置换来代替置换pm的生成,其中一个置换用于索引m或i,另一置换用于索引b或j。

根据aes算法的解密运算包括与加密运算基本相同的运算。因此,可以应用前述的用于保护运算序列的方法来保护实现aes解密运算的程序或电路。更具体地说,aes解密电路包括利用从私钥sk导出的密钥执行xor运算的电路、逆替换计算电路、基于行的逆循环置换计算电路、基于列的逆置换计算电路以及相同的密钥轮次表kt。先前公开的方法可以被应用于由解密运算执行的每个运算。基于列的逆置换计算电路还计算具有以下形式的数据:

ax<i>⊕bx<i+1>⊕cx<i+2>⊕dx<i+3>

其中系数组(a、b、c、d)等于为(9、11、13、14)的置换。这些系数允许在不去除掩码的情况下以任何顺序计算xor运算,结果数据保持与输入数据相同的掩蔽。

根据一个实施例,可以在包括比运算要处理的数据的大小更宽的总线的硬件架构(例如32位或64位,因为xor运算是按位的)中同时计算多个字。在32位架构中,可以同时计算四个字节的输出数据,而在64位架构中,可以同时计算八个字节。因此,在图5、7、11和15中,可以通过在同一迭代中处理多个字来分组基于索引b的循环的多次迭代。例如,在图5中,可以按照如下所示将掩码值u[m]自身串接几次,通过单个运算针对b=0到bx执行步骤s5的部分或全部计算,以形成具有数据p2[m,0..bx]的大小的字:

p2[m,0..bx]=x2[0..bx]⊕u[m]//u[m]//..//u[m](17)

“//”表示二进制字的串接运算符。

以相同的方式,可以按照如下所示执行在图15中的步骤s55执行的计算:

p9[m,0..bx]=p8[m,0..bx]⊕u[m]//u[m]//..//u[m](18)

再次地,还可以观察到如果执行aes运算的电路ct2发生诸如由成功的故障注入引起的错误,则输出集px6r[0..mx]中的至少一个字的值发生变化。如果仅改变一个字,则输出集的字列m不再包括输出字的所有可能的值,而是包括两个相同的字,发生变化的字必然具有输出集中另一字的值。因此,可以通过在输出集的具有相同值的列m中查找两个字来检测此类故障注入。如果两个字在输出的同一列中发生变化,则仅当这两个字的值被交换时才不能检测到故障注入,这种情况发生的概率非常低。由于xor运算的性质,可以通过借助xor运算将输出集的每列m中的所有字组合在一起来容易地检测到错误,当输出集的列m包括具有相同出现次数的输出字的所有可能值时,该组合的结果等于0。

应当注意,先前公开的保护方法可以仅应用于在被检测为易受侧信道分析攻击的aes算法中执行的一些运算。例如,所述保护方法仅应用于aes算法的敏感数据可能从中泄漏的第一轮和最后一轮,或仅应用于替换运算。

更一般地,先前公开的保护方法可以应用于通过软件和/或硬件实现的其它加密算法,并且包括组合敏感数据的xor运算,例如aria(参考文献[7])。aria算法处理以16字节划分的128位数据,并且按照轮次执行,每轮包括通过xor运算的轮密钥加法,使用两个预计算替换表及其逆表的替换步骤、以及扩散步骤。替换步骤逐字节处理与轮密钥组合的输入数据,并且扩散步骤将16个不同xor组合应用于由替换步骤提供的数据的16个字节。在这些组合的每一个中,通过xor运算加上数据的7个字节。

图16表示根据一个实施例的布置在诸如塑料卡的便携式介质hd上,并且实现先前描述的保护方法之一的集成电路ct3。集成电路包括与上面结合图1描述的集成电路ct相同的单元,并且与后者不同之处在于,协处理器cp1被替换为实现上述的一个和/或其它保护方法的协处理器cp2,例如采取电路ct1或ct2的形式。因此,根据一个实施例,协处理器cp2被配置为提供结果数据的输出集而非密码运算的单个数据,每个输出集包括密码运算的预期结果,输出集如此以使得该输出集中的所有数据具有相同的出现次数。处理器prc可以被配置为能够访问掩码表v。因此,处理器prc可以通过将输出集中的任一数据与掩码表v中的一个掩码参数进行组合来从输出集导出输出数据,所选择的数据在输出集中具有与在掩码表v中选择的掩码参数相同的秩。

协处理器cp2还可以被配置为执行加密运算的一部分。在这种情况下,处理器prc被配置为产生包括密码运算的结果的结果数据的输出表,每个输出表如此以使得其中的所有数据具有相同的出现次数。

本文公开的方法还可以通过可由计算机系统执行的软件程序来实现。此外,实施方式可以包括分布式处理和并行处理,特别是用于并行处理输入数据集中的多个或所有数据和/或并行提供输出数据集中的多个或所有数据。

本文描述的例示旨在提供各种实施例的结构的一般理解。这些例示并非旨在用作利用其中描述的结构或方法的装置、处理器和系统的所有元件和特征的完整描述。通过组合所公开的实施例,在仔细研究本公开时,许多其它实施例或其组合对于所属技术领域的普通技术人员来说可以显而易见。可以从本公开中利用和导出其它实施例,以使得可以在不偏离本公开的范围的情况下进行结构和逻辑上的替换和改变。

此外,本公开和例示被视为示例性的而不是限制性的,并且所附权利要求书旨在覆盖落入说明书的真实精神和范围内的所有此类修改、增强和其它实施例。因此,以下权利要求的范围由权利要求及其等效物的最广泛的允许解释来确定,并且不受以上描述的限定或限制。

引用的参考文献

[1]作者p.c.kocher,“timingattacksonimplementationsofdiffie-hellman,rsa,dss,andothersystems”,nealkoblitz编辑,advancesincryptology-crypto'96,计算机科学讲义第1109卷,第104-113页,springer,1996年。

[2]作者p.c.kocher、j.jaffe和b.jun,“differentialpoweranalysis”,m.j.wiener编辑,advancesincryptology-crypto'99,计算机科学讲义第1666卷,第388-397页,springer,1999年。

[3]作者e.brier、c.clavier和f.olivier,“correlationpoweranalysiswithaleakagemodel”,m.joye和j-j.quisquater编辑,cryptographichardwareandembeddedsystems-ches2004,计算机科学讲义第3156卷,第16-29页,springer,2004年。

[4]作者j.-j.quisquater,“electromagneticanalysis(ema):measuresandcounter-measuresforsmartcards”,smartcardprogrammingandsecurity,springerberlin/heidelberg,第2140、2001卷,第200-210页

[5]作者s.chari、j.r.rao和p.rohatgi,“templateattacks”,kaliskijr.、b.s.、c.k.、paar、c(编辑),ches2002.lncs,第2523卷,第172-186页,springer,heidelberg(2003年)

[6]作者b.gierlichs、l.batina、p.tuyls和b.preneel,“mutualinformationanalysis”,ches2008,lncs的第5154卷,第426-442页,springer,2008年

[7]作者daesungkwon等人,“newblockcipher:aria”,informationsecurityandcryptology-icisc2003,计算机科学系列讲义的第2971卷,第432-445页

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1