免受侧信道分析的保护方法和设备与流程

文档序号:13391204阅读:300来源:国知局
免受侧信道分析的保护方法和设备与流程

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

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

更一般地说,本发明涉及实现置换需要保持隐藏的数据的位的置换运算的电路和软件。



背景技术:

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

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

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

软件在被电路执行期间也可能经历这种侧信道攻击。

dpa(参考文献[2])和cpa分析使得能够通过获取大量电路消耗踪迹并通过对这些踪迹进行统计分析以查找目标信息来找到加密算法的密钥。它们基于这样的前提:即,当寄存器中或总线上的位从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公开了一种用于在电路连续地对不同的输入数据执行运算时分析代表电路活动的踪迹的方法。此方法包括提取每个踪迹的一部分,并且通过对出现在这些踪迹的每个提取部分中的每个可能值的出现次数进行计数,根据每个提取的踪迹部分生成直方图。然后通过对每个输入数据和运算中涉及的密钥的一部分的每个可能值应用运算来计算运算的部分结果。然后,此方法针对密钥的每个可能的部分值,识别提供相同部分结果的所有输入数据。对于密钥的每个可能的部分值,然后将直方图中与识别的输入数据和密钥的部分值对应的出现次数进行相加。密钥的一部分可以通过对相加的出现次数进行统计分析来确定。统计分析假设如果与密钥相关的值已经在所提取的踪迹部分中泄露,则可以通过相加的出现次数突显它。

可能期望提出一种使集成电路或软件程序免受这些侧信道分析中的一种或多种的保护。具体地说,可能期望提出一种对如des算法中涉及的位置换运算的保护。



技术实现要素:

描述一种用于由电路执行位置换运算的方法,所述位置换运算用于混合输入数据的位以获得包括至少两个字的输出数据。所述方法可以包括:生成包括掩码参数的第一掩码集,所述掩码集对于所述输入数据的每个字包括一个字列,每个字列包括的一个输入数据字的所有可能值的出现次数相同,所述出现次数与该输入数据字的大小相关;以及计算包括输出数据的输出集,所述输出数据由将所述位置换运算应用于输入集中的每个数据而产生,所述输入集包括由通过异或xor运算将所述输入数据与所述第一掩码集的每个掩码参数相组合而产生的数据,所述第一掩码集被如此生成,使得:所述输出集包括输出字列,每个输出字列包括的一个输出字的所有可能值的出现次数相同,所述出现次数与该输出字的大小相关。

根据一个实施例,所述第一掩码集的生成包括:生成所述第一掩码集的第一字列,所述第一字列包括与所述第一字列的字的大小相关的所述第一字列的该字的所有可能值的单次出现;以及通过将相应函数应用于所述第一列的每个所述字,计算所述第一掩码集的每个其它列,所述函数被如此定义,使得:将所述位置换运算应用于所述第一掩码集提供了包括字列的掩码输出集,每个字列包括的掩码输出集列的一个字的所有可能值的出现次数相同,所述出现次数与所述掩码输出集列的该字的大小相关。

根据一个实施例,随机生成所述掩码集的所述第一字列。

根据一个实施例,所述位置换运算包括复制所述输入数据的位。

各实施例还可以涉及一种用于根据包括位置换运算的密码算法对输入数据进行加密或解密的方法,其中所述位置换运算根据上面定义的方法被执行。

根据一个实施例,所述密码算法符合数据加密标准des算法,所述位置换运算包括与des位扩展运算相组合的des逆置换运算。

根据一个实施例,所述密码算法符合数据加密标准des算法并相继地包括:第一位置换运算,其包括des位扩展运算并且使用所述第一掩码集被执行;替换运算,其使用经掩蔽替换表被执行,每个替换表使用通过所述第一位置换运算变换的所述第一掩码集的一个掩码参数作为输入掩码,并且使用通过第二位置换运算变换的第二掩码集的对应掩码参数作为输出掩码;以及所述第二位置换运算,其包括des轮置换运算并且使用所述第二掩码集被执行,所述第一掩码集被如此生成,使得:所述第一位置换运算的输出集包括字列,每个列包括的输出集字的所有可能值的出现次数相同,所述出现次数与所述输出集字的大小相关,所述第二掩码集被如此生成,使得:当通过xor运算被与所述第一掩码集的相应第一掩码组合时,所述第二掩码集提供掩码输出集,其中所述输出集的每个列包括与经掩蔽输出字列的字的大小相关的所述经掩蔽输出字列的该字的所有可能值的单次出现,以及所述第二位置换运算的逆运算提供包括字列的输出集,每个列包括的一个输出集字的所有可能值的出现次数相同,所述出现次数与该输出集字的大小相关。

根据一个实施例,所述第一和第二掩码集的生成包括:生成所述第一掩码集的第一字列,所述第一字列包括与所述第一字列的字的大小相关的所述第一字列的该字的所有可能值的单次出现;通过将第一函数应用于所述第一掩码集的所述第一字列,计算所述第二掩码集的第一字列;通过将相应第二位置换函数应用于所述第一掩码集的所述第一列和所述第二掩码集的所述第一列的每个所述字,计算所述第一掩码集和所述第二掩码集的每个其它列,所述位置换函数被如此定义,使得:被应用于所述第一掩码集的所述第一位置换运算提供了包括字列的第一掩码输出集,每个字列包括的第一掩码输出集列的一个字的所有可能值的出现次数相同,所述出现次数与所述第一掩码输出集列的该字的大小相关,被应用于所述第二掩码集的所述第二位置换运算提供了包括字列的第二掩码输出集,每个字列包括的第二掩码输出集列的一个字的所有可能值的出现次数相同,所述出现次数与所述第二掩码输出集列的该字的大小相关,通过xor运算将所述第一掩码集的每个字列与所述第二掩码集的相应字列组合提供了结果列,所述结果列包括与所述结果列的一个字的大小相关的所述结果列的该字的所有可能值的单次出现。

根据一个实施例,所述方法包括通过xor运算组合第一和第二轮数据以提供轮输出数据的运算,所述运算被应用以将包括所述第一轮数据的第一轮集的每个数据与包括所述第二轮数据的第二轮集的相同秩处的每个数据相组合,所述第一和第二轮集包括字列,每个字列包括的所述字列的一个字的所有可能值的出现次数相同,所述出现次数与所述字列的该字的大小相关,所述运算的输出集以行和列来布置,每个行或列包括由将所述运算应用于所述第一或第二输入集中的一者的同一数据以及应用于所述第一和第二输入集的中的另一者的所有数据而产生的输出数据,所述方法包括:选择所述输出集的包括所述轮输出数据的数据列,所述数据列包括字输出列,每个输出列包括的所述字输出列的一个字的所有可能值的出现次数相同,所述出现次数与所述字输出列的该字的大小相关。

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

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

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

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

附图说明

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

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

图2是根据一个实施例的变换输入数据的保护步骤的流程图;

图3是示出根据一个实施例的保护步骤的框图;

图4是示出由图2的电路执行的运算的框图;

图5是根据一个实施例的包括保护步骤的des加密算法的框图;

图6到8是在图5的des加密算法中使用的表;

图9是根据另一个实施例的变换输入数据的保护步骤的流程图;

图10是根据一个实施例的当执行des算法时获得的中间数据集的框图;

图11是示出根据一个实施例的des算法的运算的框图;

图12是示出根据一个实施例的des算法的运算的框图;

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

图14是根据另一个实施例的包括保护步骤的des加密算法的框图;

图15是根据一个实施例的用于生成受保护替换表的方法的流程图;

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

图17和18是表示根据不同实施例的实现des加密算法的电路的框图;

图19是表示根据另一个实施例的安全电路的框图。

具体实施方式

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

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

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

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

与现有技术的保护不同(现有技术涉及在应用于随机数据的大量相同运算中隐藏要保护的运算,因此与要保护的运算的所需输入数据不相关),本文的理念是针对不是随机选择的其它数据执行运算。实际上,这种其它数据在这样的程度上与所需输入数据相关:即,由此类其它数据和要处理的所需数据形成的输入集如此以使得该输入集中的每个数据包括至少一个第一字,所述第一字具有相同大小并形成字子集,所述字子集包括的第一字的所有可能值的出现次数相同,所述第一字具有易于被所述运算处理的数据的大小。当然,要由运算处理的输入数据应在输入集中具有不可预测的位置,但执行所述运算的电路知晓该位置。

可以通过以逻辑xor(异或)运算将所需输入数据x与掩码ml组合来获得输入集,掩码ml包括例如等于l的值,其表示具有一个字节的所有可能值(在0与255之间)的字节。因此,如果输入数据x的大小为一个字节,则输入集包括等于x⊕ml的256个数据,其中ml=0到255,并且所需输入数据x=px[n]=x⊕mn,其中mn=0(“⊕”表示应用于字节的异或(xor)运算符)。当输入数据在一个字节上编码时,可以根据一个实施例,通过将运算应用于输入集中的所有数据来保护该运算,该输入集包括数据px[l+1]=x⊕ml,其中l=0到255,即,大小为一个字节的所有可能数据。可以以随机顺序执行输出集中的输出数据的计算。为此,可以以随机顺序布置输入集中的数据。

图2表示根据一个实施例的用于生成包括输入数据x的输入集px的程序的步骤s11到s17。相继地执行步骤s11到s16。在步骤s11,变量rn接收0与最大值w之间的随机值,最大值w根据由用于以二进制码对输入数据x进行编码的位数来定义的大小确定。因此,对于在b位上编码的变量rn,最大值w等于2b-1。如果变量rn在8位上编码,则值w等于255,并且如果变量rn在16位上编码,则值w等于65535。在步骤s12,将索引i设定为0。在步骤s13,通过将xor运算应用于索引i和变量rn来计算变量msk(=l⊕rn)。在步骤s14,通过将xor运算应用于输入数据x和变量msk,计算由索引i在形成输入集px的表中指定输入数据px[l]。图3表示输入数据x、变量msk的不同值m0(=0⊕rn)、m1(=1⊕rn)、…mw(=w⊕rn)以及输入集px的不同数据px[0]、px[1]、…px[w]。

在步骤s15,使索引i递增一(1)。在步骤s16,将索引i与最大值w进行比较,并且如果它大于值w,则执行步骤s17,否则在步骤s13到s16执行计算的新迭代。在步骤s17,提供表px作为程序s11-s17的输出,预期输入数据在表px中的索引n处(x=px[n]),该索引n具有值以使得变量mn=0。实际上,应用于数据d和0的xor运算的结果不会变换数据d。

应该注意,变量msk的值可以以随机顺序被处理,不一定以从0⊕rn到w⊕rn的顺序被处理。可以将多个运算应用于输入集px以计算输出集。可以在例如被认为对侧信道分析不太敏感的处理中的随后步骤在已知索引n处从输出集提取预期输出数据。

此外,输入数据x可以在具有相同位数的多个二进制字上编码。赋予变量msk的每个值也具有与数据x中的每个字相同的位数。如果数据在一个字节(8位字)上编码,则变量msk也可以在8位上编码。必须在步骤s13到s16之间执行的迭代次数w+1等于2b,b是数据x的位数的大小。如果数据x在16、32或64位的一个字上编码,则可能需要限制该迭代次数。如果逐字节执行应用于输入数据的运算,则变量msk可以在8位上编码,并且可以在步骤s14通过将变量msk与其自身串接多次以形成输入数据x的大小的字,将变量msk与输入数据x相组合。因此,在数据x在16位上编码的情况下,在8位上编码的变量msk可以与其自身串接以获得16位上的字。然后,在步骤s14执行的运算变为:

px[l]=x⊕msk//msk(1)

“//”表示二进制字的串接运算符。在数据x在32位上编码的情况下,在8位上编码的变量msk的每个值与其自身串接三次以获得32位上的字。然后,在步骤s14执行的运算变为:

px[l]=x⊕msk//msk//msk//msk(2)

实际上,用作掩码的变量msk可以具有由算法中的所考虑的运算处理的字的大小。

图4示出将运算opr应用于形式为输入集px的受保护数据x,可以使用图2的程序获得输入集px,数据x具有一个或几个字的大小。因此,数据x由包括数据px[0],px[2],...px[w]的输入集px表示,这些数据中的每一者具有与输入数据x相同的大小。所需输入数据x位于输入集px中的索引n处:x=px[n],n是0和w之间的整数。运算结果是包括w+1个输出数据pr[0],pr[1],…pr[w]的输出集pr,其中每个数据pr[1]等于opr(px[l])。期望输出数据opr(x)等于在输出集pr中位于相同索引n处的输出数据pr[n]。输出集pr中的每个数据可以表示如下:

pr[l]=opr(px[l])=opr(x⊕im[l])=opr(x)⊕om[l](3)

对于0与w之间的每个索引i,其中im是输入掩码集,om是多个字的输出掩码集以使得对于0与w之间的每个索引i,om[l]=opr(im[l]),每个掩码集im、om包括w+1个掩码参数im[l]、om[l]。

事实证明,当输出集pr的每个字列包括的一个字的所有可能值的出现次数相同(所述出现次数与字列的一个字的大小相关)时,这种保护有效。为此,每个掩码集im和om应该包括掩码参数,每个掩码参数包括掩码集中以字列布置的至少一个字并包括来自掩码集的每个掩码参数的一个字,掩码集im和om的一个字列中的字具有相同大小并且包括的字的所有可能值的出现次数相同,所述出现次数与字大小相关。进一步证明,如果输入掩码集具有该性质,则位置换运算(无论是否可扩展)一般不将该性质传输到输出掩码集。

根据一个实施例,通过选择特定输入掩码参数im[1],可以将该性质传输到输出掩码集。此类输入掩码参数可以通过以下方法来确定。

输出掩码集om被定义为使得对于0和w之间的每个索引l:

om[l]=opr(im[l])(4)

每个掩码参数im[i]由k位的m个字imi[i]形成(i=1到m):

im[l]=im1[l]//im2[l]//…//imm[l]

其中imi=ib[i,x1]//ib[i,x2]//…//ib[i,xk],ib[i,xj]表示字imi的位数xj,对于j和j'的每个可能的不同值,xj≠xj’,并且每个索引值i在1和m之间,imi一般表示任何值imi[i]。每个掩码参数om[i]由k'位的m'个字omj形成(i=1到m'):

om[l]=om1[l]//om2[l]//…//omm’[l]

其中omi=ob[i,x1]//ob[i,x2]//…//ob[i,xk’],ob[i,xj]表示字omi的位数xj,对于j和j'的每个可能的不同值,xj≠xj’,并且每个索引值i在1和m'之间,omi通常表示任何值omi[i]。

使用位置换运算的定义,等式(4)可以转换为掩码参数字imi和omi'的位之间的一组等式。可以通过检验假设来确定采取字omi'的每个位与字imi的一个位之间的等同形式的解,从而检验字imi、omi'的位之间的上述规则。

需要将上述方法应用于由软件或以硬件实现的des(数据加密标准)算法的位置换运算。图5表示实现用于加密数据的des算法的密码计算电路ct1的一个实例。有关des的更多详细信息,可以参考1999年10月25日公布的文献“dataencryptionstandard(des)fipspub46-3(数据加密标准(des)fipspub46-3)”。在图5中,密码计算电路ct1接收要处理的数据x1,并提供结果数据cx1。电路ct1还接收包含根据des算法从私钥导出的全部轮密钥的轮密钥表kt1和des替换表sbx。电路ct1包括初始置换电路pipm、最终置换电路pfpm,以及主加密电路rec1,主加密电路rec1包括执行xor运算的电路xg11、xg12、扩展电路pexp、替换计算电路sds、一个寄存器rg1和多路复用器mx1、mx2。在64位字上编码的输入数据x1被应用于初始置换电路pipm。电路pipm执行与des逆向轮置换运算组合的des初始置换运算,des逆向轮置换运算可以使用图6所示的单个表ipt定义。由电路pipm执行的运算的结果被分成左和右32位字。表ipt包括左侧部分iptl和右侧部分iptr。每个表部分iptl、iptr提供输出左和右32位字的每个位在输入数据x1中的位置,输入数据中的位的编号从1到64。每个表部分iptl、iptr包括8个位的四行,每个行提供输出左或右32位字的一个字节的值。例如,左输出字的第一个(左)字节包括输入数据x1的位编号,依次为60、62、14、16、28、40、50和54。

左字被发送到电路xg2。右字被发送到电路pexp和多路复用器mx1,多路复用器mx1的一个输出端连接到寄存器rg1,一个输出端连接到电路pfpm的右输入端。寄存器rg1连接到电路xg2的一个输入端。电路pexp使用图7所示的单个表pext,执行des轮置换运算与des扩展运算的组合。电路pexp接收32位数据,并将由8个6位字形成的48位数据提供给电路xg1。表pext的每个行提供电路pexp的输出中的八个6位字的相应一个的每个位在电路pexp的输入中的32位字中的位置。例如,电路pexp的输出数据的第一个左6位字由提供给电路pexp的32位字(编号从1到32)的位编号形成,这些位编号依次为25、16、7、20、21和29。

电路xg1通过xor运算将电路pexp的输出中的48位字与也在48位上编码的第一轮密钥kt[0]进行组合。由电路xg1执行的运算的结果由使用八个des替换表sbx提供32位字的替换计算电路sds进行处理。电路sds的输入中的每个6位字用作在八个替换表sbx中的相应一个中选择4位字的索引。因此,电路sds提供八个4位字,从而形成32位数据,通过应用xor运算的电路xg2将该32位数据与寄存器rg1中的32位数据组合。由电路xg2提供的结果被发送到多路复用器mx2,多路复用器mx2的一个输出端连接到电路pexp和多路复用器mx1,一个输出端连接到电路pfpm的左输入端。电路pfpm使用图8所示的单个表fpt,执行des轮置换运算和des最终置换运算。电路pfpm提供64位字cx1。表fpt提供64位输出数据cx1的每个位在电路pfpm的输入中的字中的位置,提供给电路pfpm的左32位字的位的编号是从1到32,提供给电路pfpm的右32位字的位的编号是从33到64。例如,输出数据cx1的第一个(左)字节包括提供给电路pfpm的64位数据的位编号,这些位编号依次为49、17、42、10、41、9、57和25。

在根据des算法的第一计算轮中,电路pipm的输出中的右32位字(r0)被存储在寄存器rg1中并由电路pexp处理,然后由电路xg1和sds相继处理,并被提供给电路xg2。电路pipm的输出中的左32位字(l0)被发送到电路xg2。右字(r0)由多路复用器mx1发送到寄存器rg1。电路xg2的输出中的字(r1)由多路复用器mx2发送到电路pexp以进行新的计算轮,并且被发送到多路复用器mx1以执行下一轮。在第二计算轮中,字r1由电路pexp、xg1、sds和xg2处理,电路xg2从寄存器rg1接收字(r0)。

在第16和最后一轮中,寄存器rg1中的字(r14)通过电路xg2被与电路sds的输出相组合,电路xg2将字(r16)提供给多路复用器mx2,多路复用器mx2将该字作为最高有效字发送到最终置换电路pfpm的左输入端。同时,字r15(=l16)由多路复用器mx1作为最低有效字提供给输出所述输出数据cx1的电路pfpm的右输入端。

根据一个实施例,电路ct1接收掩码集u,并且包括利用来自掩码集u的掩码参数u[l]执行xor运算的电路xg3、xg4。电路xg3、xg4通过执行图9的步骤s21到s27,处理从电路pipm接收的数据x2l、x2r以提供两个数据集px2l、px2r(=px2<0>)。步骤s22和s24到s27与步骤s12和步骤s14到s17相同。在步骤s21,生成随机置换u1,置换u1以随机顺序包括所有256个字节值(在0和255之间)。通过将函数f1、f2、f3分别应用于置换u1来进一步生成置换u2、u3和u4。在步骤s23,可以通过串接位串u1[l]、u2[l]、u3[l]和u4[l]生成掩码值msk,其中ui[l]是置换ui中的秩i的一个字节,并且i=1、2、3和4。因此,在步骤s24,32位右字和左字x2r、x2l中的每一者与按照以下方式形成的32位字组合:

px2[l]=x2⊕u1[l]//u2[l]//u3[l]//u4[l](5)

其中x2=x2r(或x2l),并且px2=px2r(相应的px2l)。

如图10所示,每个输出集px2r(=px2<0>)、px2l包括w+1(=256)个32位字px2[l]或w+1个字节构成的四列p21、p22、p23、p24,每列包括一个字节的每个可能值的单次出现,具体是指输出数据x2r、x2l在第n行上的一次出现,n使得u1[n]=0。由于掩码字集u2、u3和u4通过应用函数(f1、f2、f3)而从掩码字集ui导出,因此u2[n]=u3[n]=u4[n]=0。

如图11所示,电路pexp提供输出集px3<0>,其包括w+1个6位字p3[l.k](l=0到w)构成的八(8)列p3k(k=0到7)。由于掩码表u的上述定义,输出集px3<0>的每列p3k包括在六位(4x26=256)上编码的每个可能值的四(4)次出现。因此,使用掩码表u使得能够保护诸如由电路pexp执行的扩展位置换运算之类的扩展位置换运算。

根据一个实施例,如图11和12所示,包括电路xg1、sds和xg2的电路fc相继处理每个列p3k。在图11中,电路xg1将列p3k的每个6位字p3[l.k](l=0到w=255)与48位轮密钥kt[r]的6位的相应部分kt[r,k]相组合,并且提供w+1个6位字p4[l.k]的输出集px4<0>的列p4k,其中包括在六(6)位(4×26=256)上编码的每个可能值的四(4)次出现。使用相应des替换表sbx[k],利用集px4<0>的列px4k中的所有6位字p4[l.k]来执行由电路sds执行的替换运算。列p4k中的每个6位字p4[l.k]被用作在des替换表sbx[k]中选择4位字p5[l.k]的索引。电路sbs提供输出集px5<0>的列p5k,该列包括w+1个4位字p5[k.l](l=0到w),以及在四位上编码的每个可能值的十六(16)次出现(16×24=256)。

电路xg2在输出集px5<r>(在第r轮中计算)的列p5k中的每个32位字p5[l1.k]与输出集px2<r-1>(l1=0到w并且l2=0到w)的列p2k中的每个32位字p2[l2.k]之间执行xor运算。如图12所示,xor运算的结果形成包括(w+1)(w+1)个4位字r[0.0.k]到r[w.w.k]的表pr2,其中按照以下方式计算每个4位字r[l1.l2.k]:

r[l1.l2.k]=p5[l1.k]⊕p2[l2.k](6)

其中p2[l2.k]表示在r=0轮的集px2l的列p2k的4位字,以及在其它r=1到15轮的集px2<r-1>的列p2k的4位字。

由于选择置换u1、u2、u3、u4,因此输出表pr2的每列r[l.k](l=0到w)包括w+1个4位字以及一个4位字的所有可能值的16次出现。此外,预期输出4位字在输入集px1中保持在输入数据x1的相同秩(行和列数)n处,n使得ui[n]=0,其中i=1、2、3和4。

根据一个实施例,从表pr2提取包括所有数据r[n,l2,k]的列r[n.k],以便作为由电路xg2提供的输出集px2<r+1>的列p2k而被存储。因此,提取的列r[n.k]包括所有数据p5[n.k]⊕p2[l2.k]。因此,来自输出集px5<r>并由替换运算变换的掩码参数被去除,并且只保留来自输出集px2<r-1>的掩码参数u。

然后,由电路xg1、sds和xg2计算集px2<r+1>的下一列p2k,直到所有列p2k(k=1到8)被处理,以使得输出集px2<r+1>被完全定义。由于只有来自输出集px2<r-1>的掩码参数u保留在结果集px2<r+1>中,因此后者包括w+1个32位字或四(4)列的w+1个字节,每个字节列包括每个可能字节值的一次出现。

可以观察到,列p2k的处理彼此独立并且可以以任何顺序执行,只要遵循应用于每列的运算顺序即可。

在最后一轮r中,电路pfpm接收两个输出集px2<r>和px2<r-1>。电路pfpm通过在输出集px2<r>和px2<r-1>中的索引n处选择输出数据px2<r>[n]和px2<r-1>[n],并且通过将des轮置换和des最终置换应用于选定数据,提供64位输出数据cx1。可以观察到,由于选择输出集pr2中所提取的列,因此掩码参数u[i]被保留在由电路pexp和fc执行的运算中。此外,通过将输出集px2<r>和px2<r-1>的每个数据px2<r>[l]和px2<r-1>[l]与相应掩码参数u[l]组合,并且通过检测不同于其它结果数据的结果数据,可以检测到故障注入。

可以生成置换u1、u2、u3、u4,以使得由被应用于字u[l]=u1[l]//u2[l]//u3[l]//u4[l](l=0到w)中的每一者的电路pexp所提供的48位字包括八个六位字,每个六位字只包含一次字u1[l]、u2[l]、u3[l]、u4[l]的位。当满足该条件时,由被应用于字u1[l]//u2[l]//u3[l]//u4[l]中的每一者的电路pexp提供的集的每个6位字列包括在6位上编码的每个可能值的四(4)次出现。例如,选择u1[l]=u2[l]=u3[l]=u4[l]=b0//b1//b2//b3//b4//b5//b6//b7。接收32位字u1[l]//u2[l]//u3[l]//u4[l]的电路pexp提供以下6位字:

b0//b7//b6//b3//b4//b4,其包含位b4两次,

b4//b4//b3//b3//b0//b0,其包含位b0、b3和b4两次,

b0//b0//b6//b6//b1//b4,其包含位b0和b6两次,

b1//b4//b1//b6//b1//b1,其包含位b1四次,

b1//b1//b7//b7//b5//b7,其包含位b1两次和位b7三次,

b5//b7//b2//b2//b0//b2,其包含位b2三次,

b0//b2//b4//b5//b5//b5,其包含位b5三次,

b5//b5//b2//b3//b0//b7,其包含位b5两次。

因此,不能满足每个输出掩码字omi'仅包括不同数量的位的条件。

针对由电路pexp提供的结果的上述条件可以由方程组表示,其解决方案提供大量解(约222个解)。这些解可以根据最后一个置换u1以三个第一置换(例如u2、u3、u4)的值的形式表示。其中一些解如下所示:

u2=b0//b2//b1//b3//b4//b5//b6//b7

u3=b1//b0//b3//b2//b5//b6//b7//b4

u4=b0//b3//b1//b2//b4//b7//b5//b6

u2=b1//b3//b0//b6//b4//b5//b2//b7

u3=b5//b7//b3//b0//b4//b6//b1//b2

u4=b2//b6//b0//b3//b1//b7//b5//b4

u2=b0//b2//b1//b4//b3//b6//b5//b7

u3=b3//b0//b7//b1//b2//b4//b6//b5

u4=b0//b7//b4//b1//b5//b2//b6//b3

其中u1=b0//b1//b2//b3//b4//b5//b6//b7。这些解中的每一者定义在步骤s21中使用的置换函数f1、f2、f3。如果电路pexp接收如在第一解中定义的32位字u1[i]//u2[i]//u3[i]//u4[i],则提供以下6位字:

b0//b7//b6//b2//b5//b4,

b5//b4//b3//b2//b1//b0,

b1//b0//b6//b7//b3//b4,

b3//b4//b0//b5//b2//b1,

b2//b1//b7//b4//b5//b6,

b5//b6//b1//b2//b0//b3,

b0//b3//b4//b7//b5//b6,

b5//b6//b1//b3//b0//b7。

可以观察到,上述6位字中没有一者包含置换u1的同一位两次(或更多次)。

可以注意到,先前公开的保护方法可以仅被应用于在易受侧信道分析影响的des算法中执行的一些运算。例如,所述保护方法可以仅被应用于des算法的从中泄露敏感数据的第一轮和最后一轮。

根据des算法的解密包括与加密算法基本相同的运算。因此,可以应用先前描述的保护方法以保护实现des解密算法的程序和电路。

更一般地说,上述方法可以被应用于包括位置换运算的任何其它加密或解密算法,例如基于feistel方案的算法,例如blowfish、camellia、cast-128、feal、ice、rc5、三重des和twofish。

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

opn(…op2(op1(x⊕u))…)=cx⊕v(u)(7)

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

cx=opn(…op2(op1(x))

这样,每个电路oc2提供等于cx⊕v(u)(u=0、1、...或w)的输出数据。因此,电路ct2提供包括输出数据cx⊕v(0),cx⊕v(1),...cx⊕v(u),...cx⊕v(w)的输出集pcx。可以调整运算op1-opn,以使得对应于由运算op1-opn提供的输入数据x⊕u的输出数据对于掩码参数u(0-w)的每个值等于cx⊕v(u),并且输出掩码参数v(u)(其中u=0到w)的集使得每个输出掩码参数包括至少一个第一字,所述输出掩码集中的所有掩码参数的第一字具有相同大小并形成子集,当考虑输出掩码参数v(u)字的大小时,该子集包括的所述字的所有可能值的出现次数相同。每个输出掩码参数v(u)可以等于对应输入掩码参数u。

根据一个实施例,输出集pcx中的输出数据的计算可以以随机顺序被执行和/或以随机顺序被存储。以这种方式,掩码参数u的不同值分别以随机顺序应用于电路oc2。因此,电路ct2中的秩k的电路oc2接收输入掩码参数u=u[k],u是由0和w之间的所有可能数字的随机置换生成的掩码集。以同样的方式,电路ct2中的秩0的电路oc2接收掩码参数u[0],电路ct2中的秩w的电路oc2接收输入掩码参数u[w]。

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

图14表示实现用于加密数据的des算法的密码计算电路ct3的另一个实例。电路ct3与电路ct1的不同之处在于,它具有电路ct2的架构,因此包括w+1个电路oc3,每个电路oc3接收输入数据x1和来自掩码集u的相应掩码参数u[l]。每个电路oc3与电路ct1的不同之处在于,它处理由电路xg3、xg4生成的数据集中的一个相应数据。此外,电路ripm由仅执行des初始置换运算的初始置换电路ipm所替代。主加密电路rec1由包括仅执行des扩展运算的扩展电路exp的另一个电路rec2所替代,在替换电路sds与电路xg2之间插入电路xg1、xg2和sds,多路复用器mx1、mx2,寄存器rg1以及执行des轮置换运算的置换电路rpm。电路rfpm由仅执行des最终置换的电路fpm所替代。图14仅表示属于电路oc3之一的电路xg1、xg2、sds、mx1、mx2、rg1和rpm的一部分。

电路sds使用经掩蔽替换表sbm。此外,每个电路oc3包括分别利用来自掩码表v的掩码参数u[l]和掩码参数v[l]执行xor运算的电路xg5、xg6、xg7。电路xg5、xg6分别介于多路复用器mx1、mx2和电路fpm之间。电路xg7介于电路xg2和多路复用器mx2之间。所有电路oc3的电路xg3和xg4从由电路ipm提供的输出数据x2l、x2r,提供32位字输入集px2<0>和px2l。所有电路oc3的电路exp从输出集px2<r>提供48位字输出集px3<r>,r是从0到r的des轮数。所有电路oc3的电路xg1从输出集px3<r>提供48位字输出集px4<r>。所有电路oc3的电路sds从输出集px4<r>提供32位字输出集px5<r>。所有电路oc3的电路rpm从输出集px5<r>提供32位字输出集px6<r>。所有电路oc3的电路xg2从输出集px6<r>和集px2l(在第一轮)或存储在寄存器rg1中的输出集px2<r-1>(在其它轮)提供32位字输出集px7<r>。最后,所有电路oc3的电路xg7从输出集px7<r>提供32位字输出集px2<r+1>。所有电路oc3的电路xg5从数据px2[l]<r-1>中去除掩码u[l],电路xg6从数据px2[l]<r>中去除掩码参数u[l]。

根据一个实施例,电路ct3的输入中的掩码表u包括w+1个32位字,每个字是通过针对0和w=255之间的每个整数l串接四个字节u1[1]、u2[1]、u3[1]、u4[1]而获得的(u[l]=u1[l]//u2[l]//u3[l]//u4[l]),u1、u2、u3、u4为w+1个字节的四个置换,以使得:

u2=f1(u1),

u3=f2(u1),以及

u4=f3(u1)(8)

f1、f2、f3是8位函数,以使得由电路exp提供的被应用于32位字u[1](l=0到w)中的每一者的48位字exp(u[l])中的每一者包括八个六位字,每个六位字仅包含一次8位字u1[1]的位。换言之,通过对掩码集u应用扩展函数exp而获得的经变换集exp(u)具有(w+1)(w3+1)个6位字形成的表的形式,(w+1)个6位字构成的每列包括该6位字的每个可能值(0到63)的四(4)次出现。

如图12所示,电路xg1将列p3k的每个6位字p3[k.l](l=0到x=255)与48位轮密钥kt[r]的6位的相应部分kt[r][k]相组合,并且提供w+1个6位字p4k.l的输出集px4<0>的列p4k,其中包括在六(6)位(4×26=256)上编码的每个可能值的四(4)次出现。

例如通过执行图15的程序,生成经掩蔽替换表sbm。图15的程序包括步骤s31到s43。首先相继执行步骤s31到s38。在步骤s31,所述程序接收des替换表sbx和掩码集u。替换表sbx包括w3+1(=8)个替换表sbx[0..w3,0..w6],每个替换表包括w6+1(=64)个4位字。在步骤s32,计算掩码集v。掩码集v包括w+1个32位掩码参数,每个掩码参数由四个字节v1[i]、v2[i]、v3[i]、v4[i](i=0到w)形成,v1、v2、v3、v4是w+1个字节的置换(包括一个字节的每个可能值的单次出现)。

根据一个实施例,通过将函数f4应用于置换u1来生成置换v1。选择函数f4,以使得由字节u1[l]⊕f4(u1[l])(其中l=0到w)形成的置换z1也形成w+1个字节的置换,其中包括一个字节的每个可能值的单次出现。进一步选择函数f4,以使得电路rnp所执行的被应用于集v的掩码参数v[i]的des轮置换运算的逆运算p-1的应用所导致的集p-1(v[l])包括一个字节的每个可能值的单次出现。考虑到v0=f4(u0),可以使用等式(10)或(11),从置换u1来定义置换v1。使用用于计算置换u2、u3、u4的置换函数f1、f2、f3来计算置换v2、v3和v4。因此:

v2=f1(v1),

v3=f2(v1),以及

v4=f3(v1)(9)

进一步选择置换u1和置换函数f1、f2、f3,以使得电路rnp所执行的被应用于32位字v[l](l=0到w)中的每一者的运算的逆运算p-1所提供的32位字rnp(v[l])中的每一者包括八个4位字,每个4位字仅包括一次8位字v1[i]的位。换言之,经变换集p-1(v)的形式为(w+1)(w3+1)个4位字构成的表,(w+1)个4位字构成的每列包括4位字的每个可能值(0到15)的十六(16)次出现。

根据一个实施例,掩码表u1和v1的一个或多个对(u0,v0)(例如v0=f4(u0))被存储在电路ct3中,每个对(u0,v0)被测试为提供表z,其中包括值z[l]=u0[l]⊕v0[l](对于l=0到w),以及包括字(其具有掩码参数u1[l]或v1[l]的大小,在本实例中为一个字节)的所有可能值的单次出现。电路ct3被配置为使用按照以下方式计算的导出掩码表对(u2,v2)作为掩码表u1、v1:

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

v2[l]=pm(v1[l]⊕vr)(10)

或者

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

v2[l]=pm(v1[l])⊕vr(11)

对于0和w之间的每个索引l,其中ur和vr是具有掩码参数u0或v0中任一者的大小的随机字,u1和v1是通过等式(10)或(11)获得的先前计算的表,或分别等于u0和v0,以及pm是被应用于表u1和v1的元素的随机选择的置换。可以证明,使用等式(10)或(11)计算的每个对(u2,v2)具有提供表z(z[l]=u2[l]⊕v2[l])的性质,表z包括的字(其具有掩码参数u1[l]或v1[l]的大小)的所有可能值的出现次数相同。然后,针对置换u1选择置换u2,以及针对置换v1选择置换v2。

在步骤s33,将索引l初始化为零(0)。在步骤s34,将索引k初始化为零(0)。在步骤s35,将索引j初始化为零(0)。在步骤s36,使用以下等式计算经掩蔽表sbm的一个元素:

sbm[l,k,j]=sbx[k,j⊕e(u[l][k]]⊕p-1(v[l])[k](12)

其中sbx[k]表示秩k(其中k=0到w3=7)的des替换表,每个表sbx[k]包括可以使用6位索引选择的64个4位字,e(u[l])表示由电路exp执行的被应用于掩码参数u[l]的des扩展运算产生的48位字,e(u[l])[k]表示48位字e(u[l])中的秩k的6位字,p-1(v[l])表示由电路rnp执行的被应用于掩码参数v[l]的des轮置换运算的逆运算产生的32位字,以及p-1(v[l])[k]表示32位字p-1(v[l])中的秩k的4位字。在步骤s37,索引j递增一(1)。在步骤s38,将索引j与等于26-1(=63)的最大值w6进行比较。如果索引j大于值w6,则执行步骤s39和s40,否则再次执行步骤s35到s38以进行新的迭代。在步骤s39,索引k递增一(1)。在步骤s40,将索引k与等于23-1(=7)的最大值w3进行比较。如果索引k大于值w3,则执行步骤s41和s42,否则再次执行步骤s35到s40以进行新的迭代。在步骤s41,将索引l与等于28-1(=255)的最大值w进行比较。如果索引l大于值w,则执行步骤s43,否则再次执行步骤s34到s42以进行新的迭代。在步骤s43,提供经掩蔽替换表sbm[0..w,0..w3]作为步骤s31到s42的结果。

因此,对于每个字p4[l,k],对于0和w之间的l的所有值,以及对于0和w3之间的k的所有值,使用不同经掩蔽表sbm[l,k]执行由电路sds实现的替换运算。由于使用上面定义的掩码表u和v,电路sds的输出中的输出集px5<r>包括w3+1(=8)个列p5k,所述列包括16个可能4位字值中每一者的16次出现。由电路rpm执行的置换运算提供包括4(w+1)个8位字的输出集px6。由于使用上面定义的经掩蔽替换表sbm和掩码表v,输出集px6的每个字节列也包括256个可能字节值中每一者的一次出现。可以观察到,掩码表u和v的上述定义使得能够保护可扩展的位置换运算(诸如由电路exp执行的运算)或不可扩展的位置换运算(诸如由电路rpm执行的运算)。

然后,通过将xor运算应用于每个数据px6<r>[l]和应用于相同索引i处的对应数据px2<r-1>[l],电路xg2将输出集px6<r>与输出集px2<r-1>进行组合。电路xg2可以将xor运算逐字节应用于数据px6<r>[l]和px2<r-1>[l]。由于使用函数f4从掩码参数字节u1[l]定义掩码参数字节v1[l],以及使用函数f1、f2、f3定义其它字节u2[l]、u3[l]、u4[l]、v2[l]、v3[l]、v4[l],由电路xg2提供的输出集px7<r>的每个32位字被掩码参数组合u[l]⊕v[l]所掩蔽,掩码参数u[l]来自输出集px2<r-1>的字,掩码参数v[l]来自输出集px6<r>的字。此外,输出集px7<r>的每个字节列包括所有可能字节值的单次出现。电路xg7通过执行被应用于4位字的xor运算,从输出集px7<r>中去除掩码v[i]以提供输出集px2<r+1>。由电路xg7执行的程序的一个实例在图16中示出。在该实例中,所有xor运算以随机顺序被执行。图16的程序包括步骤s51到s58。首先相继执行步骤s51到s57。在步骤s51,输入掩码表v和输出集px7。输出集px7包括字节p7[0,0]、...p7[w,w2](w2=22-1=3),并且包括w个32位掩码参数v[0]、...v[w]的掩码表v被视为(w+1)(w2+1)个字节的表。在步骤s52,使用函数rnp随机地生成形式为表的置换pm,置换pm包括0和最大值kx=(w+1)(w2+1)-1之间的(w+1)(w2+1)个值,其中w+1是表px7和v中的32位字的数量(=256)(w也是这些表中的最大值)。在步骤s53,将索引k初始化为零(0)。在步骤s54,通过考虑置换pm是包括w2+1个元素构成的行和w+1个元素构成的列的双项表,从索引k计算索引l和m。因此,索引l可以被计算为值pm[k]除以(w2+1)的整数部int(),并且索引m可以被计算为值pm[k]与索引i和(w2+1)的乘积之间的差。步骤s55通过使用xor运算将在输入集px7中随机选择的索引i和m处的输入字p7[l.m]与在掩码表v中随机选择的索引i处的掩码参数vm[l]相组合,使用随机置换pm计算输出集px2中的索引i和m处的输出字p2[l.m](p2[l.m]=p7[l.m]⊕vm[l]),vm[l]表示32位掩码参数v[1]中的字节m。在步骤s56,索引k递增一(1)。在步骤s57,将索引k与最大值kx进行比较。如果索引k大于值kx,则执行步骤s58,否则再次执行步骤s54到s57以进行新的迭代。在步骤s58,输出集px2被完全定义并被提供为步骤s51到s57的输出。

可以观察到,此类置换pm也可以由电路oc3的其它电路(诸如xg1、xg2、rpm)使用,以便以随机顺序处理和/或存储处理后的数据集中的不同字。如果表px2中的数据可以以确定的顺序被计算和/或存储,则可以省略置换pm的生成和使用。另外,大型且成本较高的置换pm可以分别由w+1个元素和w2+1(=4)个元素构成的两个置换所替代,它们的元素在两个嵌套循环中被读取,一个循环用于选择两个置换中的第一置换的元素,另一个循环用于选择两个置换中的另一置换的元素。

还可以通过使用一个或多个随机替换,以随机顺序执行替换掩蔽表的计算。

图17表示根据一个实施例保护的实现三重des算法的电路ct4。电路ct4串联地包括执行des初始置换的电路ipm、若干主加密电路rec、执行des最终置换的电路fp,以及插在电路ip和电路rec中的第一个电路rec之间的电路xg3和xg4。电路ip、rec和fp可以例如是图5的电路pipm、rec1和pfpm,或者是图14的电路ipm、rec2、fpm。电路fp接收输入数据x1。电路xg3、xg4通过生成输入数据集x2l、x2r在处理时引入掩码集u。最后一个电路rec向提供输出加密数据cx1的电路fp提供最终输出数据px2[l]<r>//px2[l]<r-1>。在两个电路rec之间,两个电路rec中的一者提供64位数据px2[l]<r>//px2[l]<r-1>的中间输出集px2<r>//px2<r-1>,该输出集首先由下一电路rec的扩展电路pexp或exp进行处理,而不必去除中间输出集的掩码或提取输出数据。因此,保护从电路xg3、xg4到电路fp的整个过程。

图18表示根据des算法实现基于块密码的消息认证码算法(例如cmac(基于密码的消息认证码))的电路ct5。电路ct5包括多个级,每个级包括实现des初始置换的电路ip、电路xg3、xg4和实现des或三重des算法的主加密电路rec。电路ip、rec和fp可以例如是图5的电路pipm、rec1和pfpm,或者是图14的电路ipm、rec2、fpm。

第一级包括执行将64位初始值iv与64位的第一输入数据块db1进行组合的xor运算的电路xg10。最后一级包括接收由最后一级的电路rec提供的数据,并提供输出数据mc的电路fp。第一级的电路xg3、xg4都接收掩码集u。由第一级的电路rec提供的输出数据被提供给下一级的电路xg3、xg4的输入端,电路xg3接收输出数据的右侧部分,电路xg4接收输出数据的左侧部分。下一级的电路ip接收另一个数据块db2、...dbn。最后一级包括从最后一级的电路rec接收64位输出数据,并提供输出数据mc的电路fp。

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

协处理器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