多字元乘法器电路以及防止功率分析攻击的方法与流程

文档序号:18835532发布日期:2019-10-09 05:12阅读:295来源:国知局
多字元乘法器电路以及防止功率分析攻击的方法与流程

本发明的实施例涉及一种安全计算系统,特别涉及一种多字元乘法器电路以及防止功率分析攻击的方法。



背景技术:

功率分析攻击(poweranalysisattacks)是攻击者在其运算期间监视硬件装置的功耗变化以从装置提取加密密钥和其他秘密信息的攻击。差分功率分析(differentialpoweranalysis,dpa)是一种功率分析方法,允许攻击者通过对多个加密运算(cryptographicoperations)所消耗的功率进行统计分析,以在计算加密计算期间提取秘密信息。

功率分析攻击通常是非侵入性的,因此难以检测。为防止诸如dpa之类的功率分析攻击,一般方法是通过设计硬件,使得功耗变化不会泄露秘密信息。



技术实现要素:

这里描述的实施例提供了一种多字元乘法器电路,其包括接口和电路。接口配置为接收包括一个或多个第一字元的第一参数x,以及包括多个第二字元的第二参数y'。第二参数包括非掩蔽参数(non-blindingparameter)y的掩蔽版本,使用掩蔽参数(blindingparameter)ay进行掩蔽使y′=y+ay。该电路被配置成通过对多个子乘积求和以计算乘积z=x·y,通过将x的第一字元乘以y'的第二字元,并从子乘积的中间临时总和中减去部分乘积p=x·by的相应的第三字元来计算每个子乘积,by是包括在ay的掩蔽字元。

在一些实施例中,电路被配置为消耗通过一个或多个电源输入提供给其的电功率,同时使得非掩蔽参数y在乘积计算期间不能从电源输入的感测中恢复。在其他实施例中,掩蔽参数ay包括大于非掩蔽参数y的位数。在另一实施例中,掩蔽参数ay包括掩蔽字元by及至少一个移位版本(shiftedversion)by的和。

在一实施例中,该电路被配置成使用对应乘积掩蔽参数az计算乘积z的掩蔽版本z’=z+az,通过在x的第一字元的子乘积加上y'的第二字元,以从az中提取掩蔽字元。在另一实施例中,电路被配置为累积子乘积并以置换和交错顺序减去部分乘积的第三字元,其不显示在直接乘积计算中产生的中间结果。

在一些实施例中,该电路被配置为,通过对y'增加与ay不同的掩蔽参数,以产生临时掩蔽参数,然后从临时掩蔽参数减去ay以升级掩蔽参数y'。在其他实施例中,乘积z或z的掩蔽化版本用作加密引擎的输入。

根据这里描述的实施例,另外提供了一种方法,包括在多字元乘法器电路中接收包括一个或多个第一字元的第一参数x,以及包括多个第二字元的第二参数y'。第二参数包括掩蔽非掩蔽参数y的掩蔽版本,通过使用掩蔽参数ay使得y′=y+ay。乘积z=x·y是通过对多个子乘积累加来计算的,每个子乘积的计算方法是将x的第一字元乘以y'的第二字元,然后从子乘积的中间临时总和中减去部分乘积p=x·by的第三个字元,by是包含在ay中的掩蔽字元。

以下对实施例的详细描述,将结合附图,以更全面地理解这些和其他实施例。

附图说明

图1为根据本文描述的实施例示意性地示出了受到功率分析攻击保护的加密系统的方块图。

图2为根据本文描述的实施例示意性地示出使用变化的掩蔽参数计算掩蔽乘积的方法的流程图。

图3为根据本文描述的实施例示意性地示出以硬件实现的多字元乘法器的方块图。

附图标号

20:加密系统

24:加密装置

32:处理器

34、204、206、208、210、mem1~mem4:存储器

36:加密引擎

40:密码存储装置

44、200:多字元乘法器

48:i/o模块

52:总线

56:接口

60、240:基于字元的乘法器

64:x

68:y’

70、222、228、230、232、234、258、264、268、286:加法器

72:ay

78:az

80:乘积结果参数

84:电源

88:电力线

92:攻击者

100~120:步骤

212:y基本地址寄存器

214:x基本地址寄存器

216:结果基本地址寄存器

218:部分乘积基本地址寄存器

220:x计数器

224、270、280、284:多工器

226:y计数器

244:非掩蔽输入寄存器

246:x掩蔽寄存器

250、272:减法模块

252、274:借位

256:msb寄存器

262:进位位

266:解多工器

282:掩蔽字元寄存器

具体实施方式

概述

这里描述的实施例提供了用于保护加密系统免受功率分析攻击的改进的方法和系统。在所揭露的实施例中,在用作加密运算的输入之前,以可恢复的方式修改参数(例如,秘密参数)。秘密参数通常在每个使用它的加密运算之前以这种方式被修改。这种修改也称为“掩蔽化(blinding)”,并且修改的参数也称为“掩蔽参数(blindedparameter)”。

例如,将加密函数f(.)应用于参数xin的加密装置,即,加密装置需要计算xout=f(xin)。为了隐藏xin和xout的值,可以将xin修改为使用合适的掩蔽化函数e计算的表示为xin'的掩蔽参数,其中xin'=e(xin)。在这种情况下,加密函数的输出xout'=f(xin')是掩蔽的,并且可以通过对xout'施加合适的反掩蔽函数(reverseblindingfunction)e'使得xout恢复为非掩蔽的输出xout',其中xout=e'(xout')。值得注意的是,e'不一定是e的反函数(inversefunction)。由掩蔽函数e施加的运算可以是,例如,向xin添加一些随机值rn,即,xin'=xin+r,其中r是随机选择的。

在所揭露的实施例中,要求加密装置计算表示为x和y的两个参数的乘积,每个参数包括多个m位字元。假设出于安全目的的参数y在掩蔽形式提供为y′=y+ay,x·y的计算后的乘积可以通过x·y=x·y′-x·ay间接地计算得知。

在所揭露的实施例中,一个多字元乘法由m乘m乘法器(m-by-mmultiplier)进行,也被称为“基于字元的乘法器(word-basedmultiplier)”。使用基于字元的乘法器,通过计算各个输入参数的m位字元之间的多个子乘积来执行整个多字元乘法。假定输入参数相乘包括n个m位的字元,计算乘积为x·y′-x·ay需要(2.n2)个m乘m相乘运算。

尽管在下面将要描述的实施例中,我们主要涉及将大数乘法分解成m乘m乘法运算,在替代实施例中,此基本乘法运算也可以使用由m位字元乘以n位字元进行计算,其中n≠m。当诸如x或y的参数不是m(或n)的整数倍时,可以用一个或多个最高次零位(most-significantzerobits)填充(padded)它以将参数大小完成为基础字元大小的整数倍。

在揭露的实施例中,对y的掩蔽参数ay为选自一个表示为by的m位掩蔽字元构成,即,y的掩蔽参数的形式为ay=[by,by,...,by]。ay中的m位字元的数量比y的m位字元的数量大。通过使用这种特殊的结构,可以通过预先计算x·by一次,并将x·by的移位版本减去中间结果,可以仅使用n个m乘m乘法运算上的一个数,有效地表达x·ay(与任意掩蔽参数的n2乘法运算的数量相比),其将在下面详细描述。乘积结果或乘积结果的掩蔽版本可以例如,作为加密引擎的输入使用。

在一些实施例中,多字元乘法器累加子乘积并以置换和交错顺序减去部分乘积的m位字元,该顺序不显示将在直接乘积计算中产生的中间结果。

在一些实施例中,多字元乘法器以一种方式迭代地执行乘积计算,该方式使得非掩蔽参数y在乘积的计算期间不能从电源输入的感测中恢复。

令z表示乘积z=x·y,并且让z'表示z的掩蔽版本。在一些实施例中,多字元乘法器使用相应乘积掩蔽参数az=[bz,bz,...,bz],通过添加az的m位字元bz到一个由x的m位字元乘上y'的m位字元的子乘积计算乘积z的掩蔽版本z’=z+az。

在一个实施例中,加密装置(或多字元乘法器)通过添加与ay’不同的后续掩蔽参数(subsequentblinding)至y’来更新掩蔽参数,以便产生临时掩蔽参数,然后对临时掩蔽参数减去ay。

在所揭露的技术中,多字元乘法器计算第一参数和第二参数的乘积,其中至少第二参数是掩蔽的。该乘积计算以不显示第二参数的非掩蔽值,也不会通过直接乘法产生中间结果的方式被分解为基于字元的乘法。结果,揭露的加密装置可有效防御功率分析攻击。有效地执行乘积计算,使延迟与直接乘算相当。

系统描述

图1是示意性地示出根据本文描述的实施例的抵御功率分析攻击的加密系统20的方块图。在图1的例子中,加密系统20包括加密装置24,其包括处理器32、处理器的系统存储器34、加密引擎36、密码存储装置40、多字元乘法器44,以及i/o模块48,其使用合适的总线52互连。在图1的例子中,多字元乘法器44包含在加密引擎36内。

加密系统20可以用在以安全方式处理数据的各种应用中。例如,加密系统20可以提供加密服务,例如数据机密性、完整性和认证,以上仅举几个例子。

加密引擎36通常实现加密函数的套件,例如评估与rivest-shamir-adleman(rsa)方法相关的密钥所需的加密函数。

密码存储装置40存储例如要由处理器32执行的程序指令,和要由加密引擎36运用的数据。密码存储装置40可包括多个存储器装置(未示出),其中至少一些可平行访问。密码存储装置40中包括的每个存储器装置可以是任何合适的存储技术,诸如只读存储器(readonlymemory,rom)、随机存取存储器(randomaccessmemory,ram)、非挥发性存储器(nonvolatilememory,nvm)如闪存(flashmemories),或任何其他合适的存储技术。具体来说,密码存储装置40中的相异存储装置为不同的相应存储类型。

多字元乘法器44包括用于访问密码存储装置40中的某些信息的接口56。接口56通常包括一个或多个地址寄存器,用于指向密码存储装置中的相关地址的其他逻辑电路(未示出),以及用于存储本地所需的参数以进行有效乘法运算的数据寄存器(未示出)。

多字元乘法器44包括基于字元的乘法器60,其接收2个m位输入并产生相应的2m位子乘积。在本实例中,多字元乘法器44将表示为x64的参数乘上表示为y'68的参数。通常,输入参数x和y'中的每一个分别包括表示为xi和y'j的多个m位字元。多字元乘法器计算xi·y’j的子乘积,并使用支援加法和减法运算的加法器70以适当的m位移位累加这些子乘积。在一些实施例中,多字元乘法器将中间累积结果存储在密码存储装置中,以用于后续计算。

参数y'68是仅在相应的非掩蔽参数y的掩蔽的形式提供,因此y'是源自通过对y加入掩蔽参数ay72而衍生,即y′+y+ay。在一些实施例中,为有效计算x·y的乘积,y的掩蔽参数被配置为多个并联的m位掩蔽字元加上m位移位,表示为by,即,ay=[by,by,...,by]。掩蔽参数ay的m位字元应该具有许多比y的m位字元大的数字。掩蔽字元另外用于计算由p=x·by得到的部分乘积p76,例如,作为一个预乘阶段(pre-multiplicationphase)。在计算乘积x·y时,加法器70从x·y乘积的临时结果p的m位字元减去具有选定的m位移位,以便导出x·y的乘积结果。

在一些实施例中,加密装置24需要以掩蔽的形式存储x·y的乘积结果。在这样的实施例中,加法器70将从掩蔽参数az78的乘积中提取的m位字元添加到子乘积。掩蔽乘积结果由z’=x·y+az给出。在一些实施例中,类似于上述y的掩蔽化方案,az由掩蔽的m位字元bz组成。在这种情况下,仅需要存储bz而不是整个掩蔽参数a。在图1的例子中,加密装置24存储由多字元乘法器产生的中间结果以及最终掩蔽乘积至密码存储装置40中的乘积结果参数80。

在加密系统20中,加密装置24通过一个或多个电力线88使用电源84供电。电源84包括例如电池或电源模块。电源84通常提供一个或多个直流(dc)电压以供加密装置24内的各个元件使用。电力线88的一端通常电连接和机械连接到电源,并且其另一端使用合适的连接器连接到加密装置。电源84,电源线88或两者一般不受保护且可被攻击者92访问。

加密装置24消耗的瞬时功率通常根据例如,通过加密引擎36和/或多字元乘法器44执行的基础计算而变化。攻击者92可以在一段时间内监视功耗,以试图揭示秘密信息。例如,攻击者92可执行由统计分析的加密装置24的功率消耗的多个样本以执行dpa攻击。在里面在本揭露的上下文中,术语“功耗(powerconsumption)”是指与功耗相关的任何可测量的物理属性,例如能量、电压或电流。

在加密系统20中,设计由多字元乘法器44执行的乘法运算,使得多字元乘法器有效地计算x·y的乘积而不在中间结果中暴露非掩蔽值y,详如后述。因此,攻击者92无法通过监视电源线88或电源84来重建y。

有效多字元掩蔽乘法(efficientmulti-wordblindedmultiplication)

在本揭露的上下文中,术语“掩蔽乘法”是指两个参数之间的乘法运算,其中至少一个参数是掩蔽的。令非掩蔽参数x和y包括m位字元的相应数量lx和ly。公式1:给出用于y的掩蔽参数ay,其相应的掩蔽版本y'由下式给出:

公式1:

y′=y+ay

掩蔽参数ay包括多个m位字元,其数量比ly多一个或多个m位字元。如本文所解释的,这对于保护加密系统20免受对y的最高有效位的统计攻击是必需的。当y和ay的长度是n个字元,并且y的最高有效位(msb)等于1时,一个进位位(carrybit)传递(propagates)到第(n+1)个的y'的公式1的字元。可以使用功率分析技术推断该进位位。根据x、y'和ay,乘积x·y的乘积可写为:

公式2:

z=x·y=x,y′-x·ay

为了有效地计算公式2,使用表示为by的单个m位掩蔽词来定义掩蔽参数。具体地,通过用m位移位填充掩蔽字元的多个实例(instances)来构成掩蔽参数ay,即,ay=[by,by,...,by]。假设ay的长度(以m位字元为单位)是ly+1,则ay由下式给出:

公式3:

掩蔽字元by可以具有除了全为1的m位字元之外的任何合适的值。这个限制防止进位位传播超出第(n+1)个字元。由于y的第j个字元给定为yj=(y′j-by),公式2可以改写为:

公式4:

公式4可以进一步分解为:

公式5:

根据公式5,乘积计算包括具有m位移位值2m(i+j)的所有xi·y′j的子乘积的双倍和,及具有m位移位值2mj的移位版本的部分乘积p=(x·by)。公式5中的双倍和需要通过lx·(ly+1)的m乘m乘法运算,而第二和(secondsum)只需要(ly+1)乘法运算来计算p=(x·by)一次。下面将参考图3详细描述一个基于分解的公式5的有效多字元乘法器电路。

接下来,我们提供一个掩蔽乘法运算的例子。为了清楚起见,中的数字元示例以十进制基数表示,在这种情况下,二进制基数中使用的因子2m的幂被替换为10的幂。在该例子中要乘的值是x=721并且y=347,其结果是乘积z=x·y=250187。在描述该例子时,yk表示y的第k个十进制数字,y’k表示y’的第k个十进制数字元。该例子中的掩蔽字元是by=2,并且掩蔽参数是ay=2222。

在直接计算中:给出721.7+721.4.10+721.3.100=250187。直接计算生成中间结果5047和5047+28840=33887。

掩蔽乘积可以通过进行掩蔽计算。通过以非置换和交错方式对子乘积求和,我们得到:721.9.1442+721.6.10–14420+721.5.100–144200+721.2.1000-1442000。在这种非置换的交错顺序中,每个子乘积x·y′k的计算之后减去x·y′k·10k。在这种情况下的中间结果是{6489,5047,48307,33887,394387,250187,1692187},最终结果是250187。因此,该顺序计算不期望地揭示了直接计算的中间结果5047和33887。

可选地,可以以置换和交错顺序执行掩蔽计算,例如,721.9+721.6.10–1442+721.5.100–14420+721.2.1000–144200-1442000。在此实例中,x·y′0+x·y′1·10在减去移位部分乘积x·by之前计算。在这种情况下,中间和为{6489,49749,48307,408807,394387,1836387,1692187},结果再次为250187。应注意的是,通过使用该置换和交错顺序计算乘积,不会暴露直接计算的中间结果。上述例子中的特定置换和交错的计算顺序不是强制性的,也可以使用对子乘积求和的任何其他合适的置换和交错顺序。

具有变化的掩蔽参数的掩蔽乘积

图2是根据本文描述的实施例示意性地示出使用变化的掩蔽参数计算掩蔽乘积的方法的流程图。该方法将被描述为由图1的加密装置24的各种元件执行。

在第一参数初始化步骤100,加密装置使用从掩蔽m位字元by(n-1)导出的掩蔽参数ay(n-1)来准备基于非掩蔽参数y掩蔽的多字元参数y′(n-1)。符号n表示顺序时间索引。y的掩蔽化基于例如上面的公式2和公式3。关联by(n-1)的是部分乘积p(n-1),通过与by(n-1)的前置参数x相乘来计算。在第二参数初始化步骤104中,加密装置准备非掩蔽多字元参数x。在一个实施例中,在步骤100和步骤104,加密装置经由i/o模块48接收相应参数。或者,参数x和y′(n-1)中的至少一个由处理器32、加密引擎36或两者产生。该加密装置将参数x和y′(n-1)分别存储在存储密码存储装置40中分别的存储空间64和68。加密装置也将掩蔽参数ay(n-1)存储在密码存储装置40的存储空间72中。

在一个掩蔽参数更新步骤108中,加密装置产生更新的掩蔽参数ay(n)。在一个例示性实施例,加密装置使用任何合适的随机化方法以随机或伪随机方式产生更新的掩蔽m位字元by(n),并且连接by(n)的多个m位移位版本以产生如公式3中给出的更新的掩蔽参数ay(n)。

在再掩蔽(re-blinding)步骤112中,加密装置通过将更新的掩蔽参数ay(n)与加至y′(n-1),然后减去先前掩蔽参数ay(n-1)以再掩蔽参数y。应注意的是,使用这种更新方案,ay(n-1)不直接从y′(n-1)中减去,因为这种减法会不合需要地暴露y的值。

在部分乘积计算步骤116中,加密装置计算使用步骤108的更新的掩蔽m位字元更新部分乘积p(n)=x·by(n)。加密装置将计算出的部分乘积存储在密码存储装置的存储空间76中。

在积计算步骤120中,加密装置计算x·y的乘积。例如,加密装置配置多字元乘法器44的接口56以访问密码存储装置40相应的存储空间中的x、y′(n)和p(n),并使用密码存储装置的存储空间80来输出乘积结果。然后,加密装置触发多字元乘法器以执行乘法运算,例如,基于上面的公式5。

在步骤120之后,该方法循环回到步骤100以接收随后的掩蔽参数以与另一(或相同)参数x相乘。

虽然在图2的方法中,加密装置在每个多字元乘法之前重新掩蔽y,但这不是强制性的,并且在替代实施例中,加密装置可以选择性地掩蔽y,即,每一个预定义的乘法运算执行一次,或使用任何其他采样方法。

硬件实现多字元乘法器

图3是示意性地示出根据本文描述的实施例的以硬件实现的多字元乘法器200的方块图。例如,多字元乘法器200可用于实现图1的加密装置24的多字元乘法器44。

在图3的例子中,多字元乘法器200连接存储器204、206、208和210,以读取输入参数并输出中间和最终结果,如下面将详细描述的。在本例子中,存储器204、206、208和210中的每一个可以以m位字元的数据单元访问。因此,具有m.w位的参数占据相应存储器中的w个条目(entries)。存储器204、206、208和210分别表示为mem1、mem2、mem3和mem4。

存储器mem1存储表示为x'和y'的输入参数。在本例子中,为了提高加密等级,输入参数作为掩蔽参数存储在多字元乘数的外部,并使用相应的掩蔽参数,即x’=x+ax及y’=y+ay,其中x和y是衍生自x'和y'的非掩蔽参数,其分别的掩蔽参数为ax和ay。

通过将各个掩蔽m位字元bx和by填充为ax=[bx,bx,...,bx]和ay=[by,by,...,by]来构成掩蔽参数。设lx和ly表示x和y的以m位字元为单位的相应长度。ax通过填充bx的lx+1实例构成,ay通过填充by的ly+1个实例来构成。

多字元乘法器200包括y基本地址寄存器(ybaseaddressregister)212、x基本地址寄存器(xbaseaddressregister)214、结果基本地址寄存器(resultbaseaddressregister)216和部分乘积基本地址寄存器(partialproductbaseaddressregister)218。y基本地址寄存器212和x基本地址寄存器214分别指向mem1中的第一m位字元y'和x'。结果基本地址寄存器216指向将被放置在存储器mem2和mem3之一中的乘法结果的第一m位字元。部分乘积基本地址寄存器218指向存储器mem4部分乘积x·by的第一m位字元。假设部分乘积预先计算并存储在mem4中。可以计算部分乘积x·by,例如使用多字元乘法器200。或者,可以使用处理器32或使用任何其他合适的手段来计算部分乘积。

x计数器220产生'i'的范围为i=0....(lx+1)的索引。通过使用加法器222产生地址值,经由路由至多工器224的地址值以访问mem1的x’,索引'i'的值被添加到在x基本地址寄存器的值中。类似地,y计数器226产生当i=0时,’j’的范围为j=0....(ly+1)的索引,当i>0时j的范围为j=-1....(ly+1)。通过使用加法器228产生地址值,经由路由至多工器224的地址值以访问mem1的y’,索引'j'的值被添加到在y基本地址寄存器的值中。

x计数器220和y计数器226根据使用合适的时脉电路(clockingcircuit)(未示出)产生的时脉周期(clockcycles)而递增。在一些实施例中,y计数器每个时脉周期递增一次,并且在达到值ly+1之后归零或设为-1。x计数器(索引'i')在y计数器之后递增(索引'j'到达值ly+1,并在达到值lx+1后归零)。或者,也可以使用用于y计数器226和x计数器220的其他合适的计数方案。

加法器230累加x计数器和y计数器的索引以产生总和索引(i+j),其使用加法器232加到寄存器216的结果基本地址中的该值,以产生一个地址来访问在mem2或mem3中的乘法结果的第(i+j)个m位字元(或中间结果)。加法器234将索引值(j+1)加到寄存器218的基本地址中的部分乘积值,以访问mem4中的部分乘积x·by的第j个m位字元。

在本例子中,多字元乘法器200包括基于字元的乘法器240,其在两个m位字元之间施加乘法运算以产生2m位输出。基于字元的乘法器240可用于实现图1的基于字元的乘法器60。基于字元的乘法器240接收来自非掩蔽输入寄存器244的非掩蔽参数x的m位字元xi,从mem1读取的掩蔽信号y'的另一个m位字元n,以及输出2m位子乘积xi·y′j。

在一些实施例中,基于字元的乘法器在一个时脉周期内生成子乘积结果。在另一个实施例中,产生子乘积需要多个时脉周期,在这种情况下,相应地禁止x计数器和y计数器的计时。在一些实施例中,响应于满足条件j=-1、j=lx+1或i=lx+1中的一个,强制使基于字元的乘法器的输出为零,如下所述。

x掩蔽寄存器(x-blindingregister)246保持掩蔽字元b。多字元乘法器200从mem1读取m位字元x′i,并使用减法模块250计算xi=x′i-bx-b,其中b是在计算先前的m位字元xi-1时产生的借位252。

在一个实施例中,多字元乘法器分别将x计数器220和y计数器226初始化为i=0和j=0(或j=-1)。对于给定的索引’i’,多字元乘数如上所述的计算非掩蔽值x,并且将xi存储至非掩蔽输入寄存器244。然后,多字元乘法器依次从mem1读取m位字元y′0...y′ly+1,并计算与j=0...ly+1对应的子乘积xi·y′j。多字元乘法器将每个子乘积的m个最高有效位(mostsignificantbits,msb)存储在msb寄存器256中。

计算中间结果xi·y′时,多字元乘法器使用加法器258通过将子乘积xi·y′j的m个最低有效位(lsb)加到存储有xi·y′j-1的m个msb的msb寄存器256以累加子乘积。在累加子乘积时,使用加法器264将在先前计算中产生的进位位262添加到从msb寄存器256读取的m位值,并且将xi·y′j的msb部分存储在msb寄存器256中以进行用于一个或多个后续计算。

在i=0....lx的情况下积累中间结果xi·y′,当索引’i’为偶数时,多字元乘法器交替在mem2存储xi·y′累加的中间结果(用另外的元素,如下所述)否则存储在mem3。使用基于索引’i’的lsb的解多工器(de-multiplexer)266来控制选择写入mem2或mem3。

在上述xi·y′的计算中,多字元乘法器使用加法器268加至xi·y′,公式∑kxk·y′·2m·k中累积到k=i-1所累积的中间结果从mem2(或mem3)读取,并存储包含xi·y′的更新的累积结果至另一个存储器mem3(或mem2)。使用基于索引’i’的lsb值的多工器270来控制选择相关的存储器mem2或mem3。应注意的是,在计算第一中间结果x0·y′之前,要存储在mem2中,m位的数量lx在计算该第一中间结果期间从mem3读取的字元被归零。

应注意的是,在迭代计算索引’i’的并存储在存储器mem2(或mem3)第i个存储器条目(相对于基本地址)的中最低有效字元应该被复制到mem3(或mem2)的第i个条目,以使第一计算结果存储在第(i+1)个条目中。在一个实施例中,该复制运算是在索引'j'从j=ly+1返回到j=-1之后但在索引'i'递增到i+1之前执行,例如,使用一个时脉周期从mem2(或者mem3)读取一个字元,而另一个时脉周期用于将读取字元写入另一个存储器mem3(或mem2)。应注意的是,由于在上面的方案中,复制运算在j=-1时发生,并且在i递增之前,因此复制的字元具有相对于结果基本地址(i-1)的偏移量。

如上所述,例如,参考公式5,多字元乘法器需要用适当的m位移位减去x·by以便计算所需乘积x·y。多字元乘法器200使用从mem4接收x·by的m位字元的减法模块272以交错方式执行上述减法。减法运算包括在减法模块272的先前的减法运算中产生并存储的借位274。

如上所述,当i>0时,索引'j'在范围j=-1...ly+1计数。当条件j=-1时,强制使基于字元的乘法器的输出为零值,因此当j=-1时,使用减法模块272从mem2或mem3读取的第一个m位字元减去从mem4读取的x·by的第一个m位字元。条件j=-1(发生在当i>0)也被用于从mem1读取x′i和存储相应的xi至非掩蔽输入寄存器244。

条件j=ly+1时,也强制基于字元的乘数的输出为零。在这个时脉周期中,最近的子乘积xi·y′ly的msb存储在mem2或mem3取决于索引’i’。

当i>0时,多工器280向减法模块272输出从mem4读取的m位字元,当i=0时,多工器280输出0m位字元。结果,实际上只有在第一中间结果x0·y′被完全计算且存储在mem2中之后,才减去x·by。换句话说,x·by·2mj在xi+1·y′的累积期间被有效地减去。这种置换和交错的计算顺序有助于防止直接乘法x·y的中间结果的泄漏。

在一些实施例中,需要多字元乘法器200以掩蔽形式存储乘积结果。在这样的实施例中,多字元乘法器在结果掩蔽字元寄存器282中保持一个m位的掩蔽字元bz,以用于计算z′=x·y+az,其中az=[bz,bz,...bz]。多工器284在条件(j=-1)或(i=lx+1)之一为真时路由值bz,否则路由0m位字元,以使用加法器286加到子乘积中。在这种情况下,条件j=-1表示在将相关字元如上所述的从mem2复制到mem3(或从mem3到mem2)之后,并且’i’已经递增到i+1。在计算xi·y′的第i次迭代完成之后,添加bz需要条件j=-1。是当整个多字元乘法计算完成时,需要条件i=lx+1以添加最后一个bz。

当x计数器220达到值i=lx+1时,基于字元的乘法器240的输出被强制为零。在该时脉周期中,从mem2或mem3读取的中间结果的相关m位字元中减去从mem4读取的x·by的msb的m位字元。

可以使用任何合适的方法有效地实现多字元乘法器200的基于字元的乘法器240。在例示性实施例中,基于字元的乘法器240被实现为收缩阵列(systolic-array)乘法器或华莱士树乘法器(wallacetreemultiplier)。在一些实施例中,由加法器258、264、268和286中的一个或多个执行的加法运算可以在华莱士乘法器的收缩阵列的结构内实现,例如,通过在乘数中包括一个或多个全加法器计算行(computationalrowsoffull-adders)。

图1的加密系统20和加密装置24的配置及其包括多字元乘法器44的组件以及图3的多字元乘法器200是例子配置,其选做例子说明纯粹为了使概念清晰起见。在备选实施例中,还可以使用任何其他合适的加密系统配置和多字元乘法器配置。

加密装置24和多字元乘法器44和200的不同元件可以使用任何合适的硬件实现,诸如在专用集成电路(asic)或现场可编程门阵列(fpga)来实现。例如,基于字元的乘法器240可以使用专用asic或fpga实现,而多字元乘法器200的其他元件在另一个asic或fpga中实现。

在一些实施例中,加密装置和多字元乘法器44的一些元件可使用软件、或使用硬件和软件元件的组合来实现。例如,在一个实施例中,处理器32准备用于乘法的参数,以及多字元乘法器44可以在硬件中或在软件和硬件的组合中应用乘法运算。作为另一例子,多字元乘法器44可以在硬件中完全实现为多字元乘法器200。在一些实施例中,加密引擎36包括专用协作处理器(dedicatedco-processor)。在替代实施例中,加密引擎36以硬件或硬件和软件的组合实现。加密存储装置40包括一个或多个存储器,例如随机存取存储器(ram)。

为清楚起见,从图中省略了对于理解本发明的原理不必要的元件,例如各种接口、控制电路、寻址电路、定时和排序电路以及调试电路。

通常,加密装置24中的处理器32包括通用处理器,其以软件编程以执行本文描述的至少一些功能。软件可以例如通过网络以电子形式下载到处理器,或者可以替代地或附加地将软件提供和/或存储在诸如磁性、光学或电子存储器的非暂态有形媒体上。

在本揭露和权利要求的上下文中,术语“电路”指的是除了接口56之外的多字元乘法器60的所有元件,或者是除了经由多字元成法器所连接的存储器204、206、208及210的多字元乘法器200的所有元件,在多字元乘法器44的电路包括基于字元的乘法器60和加法器70。在多字元乘法器200中,电路包括诸如基于字元的乘法器240、加法器258、264、268、286、减法模块272、msb寄存器256、x计数器220、y计数器226、进位位262和借位274。

图3的多字元乘法器200可用于实现图1的加密装置24中的多字元乘法器44。在这样的实施例中,存储器204、206、208和210在密码存储装置40中实现。多字元乘法器200使用诸如基本地址寄存器212、214、216和218、x计数器220、y计数器226、加法器222、228、230、232、234、多工器224和270,以及解多工器266之类的各种元件来连接存储器204、206、208和210。

上述实施例是仅作为举例,并且也可以使用其它合适的实施例。例如,尽管图3中的多字元乘法器200累加了xi·y′的中间结果,但该方案不是强制性的,也可以使用其他合适的方案。例如,在替代实施例中,多字元乘法器200累加xi·y′j的中间结果。另外,图3的多字元乘法器200,以及图1的多字元乘法器60可以任何其他合适的顺序累加xi·y′j的子乘积。

作为另一例子,尽管在图3的实施例中,多字元乘法器以掩蔽的形式从存储器204读取参数x,但是在替代实施例中,参数x被提供给非掩蔽的多字元乘法器。在这样的实施例中,可省略x掩蔽寄存器246、减法模块250和借位252。

在上面我们描述的实施例已经假定每个x和y'包括m位字元,并且该多字元乘法是基于一个m乘m乘法器组件以用于由使x的m位字元乘以y'的m位字元。在替代实施例中,y'可包括多个n位字元,其中n≠m。在这样的实施例中,m×m乘法器(例如,图3中的乘法器240)由n×m乘法器代替,并且相应地修改图3中描绘的配置。

尽管这里描述的实施例主要涉及保护加密系统免受功率分析攻击,但是本文描述的方法和系统也可以用在其他应用中,例如在需要防御功率分析攻击的任何安全计算系统中。这样的计算系统可包括电子装置,例如智能手机、智能卡、笔记本电脑、平板电脑、销售点系统、路由器、智能电视等。

应当理解,上面描述的实施例是作为举例,并且所附权利要求不限于上文已经具体示出和描述的内容。相反,本发明的范围包含上文描述的各种特征的组合和子组合,以及本领域技术人员在阅读前述描述时将会想到的变化和修改,而这些变化和修改未在现有技术中揭露。在本专利申请中通过引用并入的文件被认为是本申请的组成部分,而在这些并入的文件中以与在本说明书中明确或隐含地作出的定义相冲突的方式来定义任何术语的范围时,只应考虑本说明书中的定义。

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