抗侧信道攻击的椭圆曲线密码系统实现方法

文档序号:7704147阅读:162来源:国知局

专利名称::抗侧信道攻击的椭圆曲线密码系统实现方法抗侧信道攻击的椭圆曲线密码系统实现方法
技术领域
:本发明涉及密码算法,尤其是涉及一种抗侧信道攻击的椭圓曲线密码系统实现方法。
背景技术
:密码设备,如智能卡等的应用已经越来越广泛,由于它保护的对象具有较强的私密性,因此其安全性一直备受关注。椭圆曲线密码系统(EllipticCurveCryptosystem,筒称ECC)作为在密码设备中应用较为广泛的一种密码协议,其在数学上具有较强的安全性,但在密码设备上进行实现时,又会面临较多的攻击方式。在众多种攻击方法中,利用密码设备所泄漏的一些侧信道信息来攻破这些密码系统是最有威胁的一种攻击方式,一般把这种攻击叫做侧信道攻击(Side-ChannelAttacks,简称SCA)。功率消耗对于密码设备是一种重要的侧信道信息,因为密码设备执行的计算最终都归结到了对逻辑状态0和1的操作,而当前技术的制约导致当处理逻辑0和逻辑1时会有不同的功率消耗,攻击者能够监测这种功耗的差异并获得有用的侧信道信息。目前针对椭圆曲线密码系统(EllipticCurveCryptosystem,简称ECC)的侧信道攻击方式主要是简单功耗分析(SimplePowerAnalysis,SPA),它的基本思想是功耗与密钥操作数有相关性,在熟悉设备的算法实现的基础上,从少量的功耗曲线,就可直接观察分析出关键数据,甚至能够直接获得密钥。ECC的密钥d主要参与了ECC系统中的点乘运算点乘又叫标量乘,是指对椭圆曲线上的一个点/M故d次的累加运算,根据d的不同,点乘运算的运算结构也会不一样。目前已有很多种实现点乘运算的方法,其中最筒单的实现方法是二进制实现方法,如下所示:弱三涵n方(d位研氐位亍输入"=(《小.…,d0)2,尸=l)'输出d尸。1.2《尸2./从"-2到0执行2.1Q—20;2.2如果c/,=1执行2—Q+户;3.返回(0。—可见,在计算点乘时,需要先将密钥d表示为二进制,然后对其从高位开始逐位扫描,若该位为O,则只需计算一次倍点运算;若该位为1,则需先进行一次倍点运算,再进行一次点加运算。因此,在这种实现方式中,只要能够区别出点加和倍点运算各自所在的区域,就可以直接获得密钥d的二进制表示形式。国际公钥密码标准IEEEStd1363-2000给出了ECC中点加和倍点运算的详细实现方式,但:接照这种方式实现的ECC密码设备+及易受到SPA的攻击。因为在这个标准中,点加运算与倍点运算具有不同的运算形式,如下所示倍点(U2,Z2)H^Z,),则x2=m2-2&:r2=Mos-x2)-r,Z2:2"&,点加(X2,y2,Z2)-(义o,Fo,Zo)+(m,Z,),贝'J其中,S=《:r二f/o+f/,,m=&+《,r=,2-2X2可见,倍点只需要进行10次乘法运算,而点加需要16次乘法运算,而且二者总的运算流程也不一样。因此,在功耗曲线上,无论是运算时间,还是消耗的功耗,二者都是不一样的。图1是采用了投射坐标下素数域中的实现方式后所采集到的一段功耗轨迹。由图1可见,点加的运算时间比倍点的运算长了百分之十以上;二者的功耗轨迹中的功耗尖峰也存在很大的差异倍点的尖峰分布几乎是均匀分布的,而点加的尖峰呈现出不同的集中区域,此外,点加和倍点功耗轨迹中的尖峰数目也不一样。因此,若采用这种方式实现ECC的二进制点乘运算,攻击者将很容易区别出点加和倍点运算所在的功耗区域,因此极易获得ECC的密钥A如图2所示从图2中可直接获得点乘运算所运算的密钥位"0101"。
发明内容有鉴于此,有必要针对ECC容易被依据点加和倍点的功耗的差异攻击的问题,提供一种抗侧信道攻击的椭圓曲线密码系统实现方法,使攻击者无法再区别出点加和倍点运算所在的区域,从而达到保护密钥的作用。一种抗侧信道攻击的椭圆曲线密码系统的实现方法,包括在加解密过程中用密钥对选定坐标的有限域上的椭圆曲线上的点进行点乘运算的步骤,在所述点乘运算的运算步骤中包括有序的点加和倍点运算,所述点加运算和倍点运算均用模运算函数实现,所述点加运算和倍点运算的运算流程是平衡的。优选地,所述的选定坐标包括仿射坐标、投射坐标及其混合坐标。优选地,所述的有限域包括二进制有限域、素数有限域。优选地,所述模运算函数包括模加、模减、模半、模乘、模逆和数据转移。优选地,所述点加运算和倍点运算的运算流程是平衡的,是指点加运算和倍点运算的流程中,包含的模运算函数的个数相同且对应的步骤中的模运算函数的类型相同。在所述的点加和倍点的平衡运算流程中,由于在实现相同的模运算时,实际参与模运算的数据对模运算的运算时间和功耗的影响可以忽略,即不同的数据进行同样的模运算时,整个模运算耗费的时间和消耗的功耗都不会有明显的差异。因此,总体看来,一个完整的点加运算和一个完整的倍点运算所耗费的时间是一样长的,消耗的总功耗是一样多的,因而无法再区别出点加和倍点运算所在的区域。在不知道密钥的情况下,已经无法再通过一些侧信道信息(如功耗)来找出具体执行点加(或者倍点)运算的区域,如在功耗曲线上执行点加运算的功耗区域,也就无法依据二者功耗的差异对ECC的点乘进行攻击了。图1为投射坐标下素数域中的ECC实现方式中所采集到的一段功耗轨迹;图2为投射坐标下素数域中的ECC实现方式中所采集到的另一段较长的功耗轨迹;图3为有限域上6种基本操作的模块示意图4为不平衡的点加U)和倍点(b)运算流程示意图5为有限域上的基本运算的开销示意图(注该图中各值的大小与实际数值的大小不成比例关系);图6为平tf的点加(a)和倍点(b)运算流程示意图7为采用表2中的平衡流程实现表3中的二进制点乘运算时采集到的一段功耗轨迹。具体实施方式在以下抗侧信道攻击的椭圓曲线密码系统实现方法中,通过平衡点加和倍点的运算流程,在密钥参与ECC的点乘运算时,每一个完整的点加运算和每一个完整的倍点运算所耗费的时间是一样长的,消耗的总功耗是一样多的,因而在整个点乘运算过程中已无法再区别出点加和倍点运算所在的区域,也就无法依据二者功耗的差异对ECC的点乘进行攻击了。在椭圆曲线密码算法标准中,不同的坐标下,椭圆曲线上的点有不同的表示形式,因此选定了坐标后才能设计出相应的模运算函数,常用的坐标有仿射坐标、投射坐标及其混合坐标等。对于在何种有限域上的椭圆曲线也决定了不同的密码算法,常见的有限域有二进制有限域、素凄史有限域等。在选定了坐标和有限域之后,首先需要设计该坐标和有限域上的模运算函数,常用的有模加(MA)、模减(MS)、模半(MH)、模乘(MS)、模逆(MI)和数据转移(DT)等搡作。由于ECC的有限域运算都是需要进行取模运算的,6假设ECC中模的值为p,则数据转移、模加、模减、模半、模乘和模逆运算可分别定义如下(1)、数据转移(DateTransfer,简称DT):rz—Tx,表示直接将7;送入rz。(2)、模加运算(ModuloAddition,简称MA):rz—rx+ry(modp),表示rx与ry的和对p取j莫后所得的结果送入rz。(3)、模减运算(ModuloSubtraction,简称MS):rz—rx-ry(modp),表示rx与ry的和对p取^莫后所得的结果送入rz。(4)、模半运算(ModuloHalf,简称MH):rz—rx/2(mod表示rx除以2所得的数对p取一莫后所得的结果送入rz。(5)、模乘运算(ModuloMultiplication,简称MM):7;—!TXxry(mod/),表示rx与t;的乘积对p取模后所得的结果送入rz。(6)、模逆运算(ModuloInversion,简称MI):rz—7V1(mod;),表示rx的逆对p取模后所得的结果送入rz。在不同的工作环境下,不同模运算的开销是不一样的。一般情况下,模乘的运算消耗远大于数据转移、模加、模减和模半的消耗,模逆的开销又大于模乘的。因此,计算点加和倍点的运算开销时常只考虑模乘和模逆的开销,而且,为了较少运算开销,设计时应尽量避免使用开销较大的模逆运算。由于ecc可以在多种坐标和有限域中实现,而且各种实现方式差异较大,如国际^^钥密码标准正EEStd1363-2000中才殳射坐标下素凝:i或上的ECC点加和倍点运算流程中,模逆运算就可以避免。利用前述设计好的模加(MA)、模减(MS)、模半(MH)、模乘(MS)和数据转移(DT)运算函数,分别逐步实现ECC的点加和倍点运算。对比点加和倍点运算流程中各步骤的异同,包括对比总的运算步骤的数量和各步骤所进行的模运算。然后针对点加和倍点运算的不同点,分别在点加和倍点利用模运算函数的运算流程中通过调整模运算函数的顺序和/或增加伪操:作使点加和倍点的每一步的模运算函数是相同的类型。7实施例以国际公钥密码标准IEEEStd1363-2000中4殳射坐标下素^t域上的ECC为例,进一步描述本发明所述的抗侧信道攻击的椭圆曲线密码系统实现方法。如图l所示,将数据转移(DT)、模加(MA)、模减(MS)、模半(MH)、模乘(MM)、模逆(MI)分别用不同的模块表示,即图1(a)表示数据转移(DT)、图1(b)表示模加(MA)和模减(MS)、图1(c)表示模半(MH)、图1(d)表示模乘(MM)以及图1(e)表示模逆(MI)。又由于运算流程中不可避免地需要进行一些条件判断操作,在此可使用图1(f)模块表示这种操作。根据前述的内容,国际公钥密码标准IEEEStd1363-2000中,点加运算与倍点运算的运算形式如下所示倍点(j^r2,Z2)二2(x,,^Z0,则其中M二3X卩+aZ,4,6^4X,"2,r二81^4点加(x2,f2'z2)=(x0,y0,z0)+(xb;r,'z,),贝'j其中,〃。=,s。=y。z入m=j^z^分别将点加与倍点运算用模运算函数逐步表示,如表i所示'表i<table>tableseeoriginaldocumentpage8</column></row><table>*如果r2=o或者r3=o,则返回(i,i,o)。库命入.-p=(x0,;r0,z0),q=(jrbz,)U#p-3且為l)输出2Q或者p+q倍点2Q点加p+q8.n—r卩;8.9.r6—r4;9.r7—r6xr7;io.r4—2xr4;10.r2—r2xr7;11.12.r4—r4+r5;12.r4—r4x:r7;13.r3—r2xr3;13.r7—r3xr7;i4.r3—2xr3;14.r5—r5xr7;i5.r2—:r22;15.^—r,;16.r5—r,xr2;16.r7—r7-r4;n.r5—2xr5;17.r4—r7;i8.r5—2><r5;18.r7—r2;19.7",—r42;19.r7—r7-r5;20.r6—r5;20.r5—r7;2i.r6—2xr6;21.IfCase;22.—r,-r6;22.23.r2—r22;23.r—TV:;;24.r2—2xr2;24.25.r2—2xr2;25.r2—r2-r5;26.r2—2xr2;26.27.r5"r5-r,;27.r3—r3xr4;28.r5—r4xr5;28.r7—r42;29.r5—r5-r2;29.r4—r4xr7;30.r7—xr7;返回(r,,r2,r3)。31.r,—r52;32.33.34.35.36.r5—r5xr7;37.r4—r2xr4;38.39.r2—r2-r4;40.返回(7,,r2,r3)。在倍点运算的流程中,第12步得到M(M-3X,、必4)、第14步表示得到Z2、第18步得到S(s=Wl2)、第22步得到X2、第26步得到T(7=8^)、第29步,如果7"4=0{如果r5=o,则返回(0,0,0);否则,返回(1,1,0)}。9得到Y2。经过筒单4莫运算函数的有序逐步的运算,最后得到了倍点结果。同理,点加运算也是如此。从表l中可以看出,倍点运算总共需要30步,点加运算总共需要40步,并且从第4步开始,模运算函数开始有所不同。将点加与倍点运算的流程用模块有序的表示出来,如图4所示。图4(a)中完成的是点加运算,(b)中完成的是倍点运算,两个运算流程分别包含了不同数量的模加(MA)或模减(MS)、模半(MH)、模乘(MS)和数据转移(DT)操作,对比图(a)和(b),可见,点加运算与倍点运算的运算总量不同,各步骤所完成的运算也不一样。图5是不同的模运算函数运算所需时间及消耗功率的示意图。图中DT、MA(MS)、MH、MM和MI的运算时间分别为At,、At2、At3、At4和At5,相对于非运算时期的工作电势分别为AV,、AV2、AV3、AV4和AVs。由于模加和才莫减的运算机理类似,故其运算时间和工作电势基本相同。从图中可以看出不同的模运算函数具有明显不同的时间和功率消耗。所以如果使用表1所示运算流程来实现点加和倍点运算,二者的功耗轨迹将呈现出极为明显的差异,可能泄露与密钥相关的信息。故此需要逐步对比表l中各步骤的异同,设计点加和倍点的运算流程使其达到平衡,即使二者具有同样多的运算步骤,对应的各步也是相同类型的运算。因此需要在不影响运算结果的情况下调整模运算函数的位置和/或增加一些伪操作,来达到可以使用相似的流程来实现点加和倍点运算的目的。调整模运算函数的位置的基础是,数据转移(DT)的操作往往是用来保存中间结果的,所以在利用这些中间结果之前,这个操作是可以被放在利用中间结果的模运算函数之前的任意位置的。如图2,结合表1,点加运算流程中的4、5、6步的数据转移操作对7、8、9、10步的模乘运算(MM)来说是可以后移的(除开第6步中的将Z,赋值给丁6的操作,因为Z,既可以先赋值给丁6,让T6参与运算,也可以直接参与运算,所以当Z,直接参与运算后,第4、5、6步的数据转移在第7、8、9、IO步的模乘运算之前还是之后也就没有关系了)。而增加伪操作的基础是,可以把任何需要对应相同模运算函数类型的地方进行任意中间结果的计算,而这个中间结果不参与且不影响后面关键步骤的计算即可。这样做的代价就是多消耗一些存储空间。比如表2中,第8步,倍点运算为了和点加运算中的数据转移操作有对应的操作,增加了一步将T2赋值给T7的数据转移操作。可以考到丁7在后面的运算中都没有参与关键步骤的计算(表中伪操作都用Dn标注,D表示伪操作(dummyoperation),n为序号,开始计数,Dn表示第n个伪操作),因而不会影响计算的最终结果。这是一种简单的实现方法,但是一般为了节省步骤,可以设计出更好的可以尽量用到这些伪操作的中间结果。表2是经过调整步骤以及增加伪操作后所得到的具体的模运算函数的操作流程,用相应的模块图表示出来如图4所示。表2输入p=(x0,;r0,z0),(3且Zt4)输出2Q或者P+Q倍点2Q点力"P+Q1.—A;1.2.";2.K—3.—z1;3.4.4.5.—r52;5.—r〉6.—ax6.r7—z,)7.7.r2—r2〉8.八(Dl)8.r8—r1;9.—化(D2)9.r6—r8;(Dl)io.r3io.r7—r32;11.—r2211.r4—x,<r7;12.r5—7V12.r7—r3)13.—7VTV,(D3)13.『8—-7V,14.r6—(D4)14.r4—r8;15.IfCase1a.15.IfCase2v.16.r6"42(D5)16.r5—17.r6—r4;17.K一&is.r7—r"(D6)18.r8—r8-19.r7(D7)19.r5—r8;20.r4—2x20.—2x21.2.—7\-22.r322.r2卄2x23.774—r4+r8;23.t2—r2■『5;如果r2=o或者r;=o,则返回(i,i,o)如果7;=o{如果r5=o,则返回(o,o,o);否则,返回(i,i,o)}li<table>tableseeoriginaldocumentpage12</column></row><table>加的运算流程中的一些冲莫减运算与倍点中的才莫加相对应(如在第21步中,点加运算流程就是利用模减与倍点运算流程中的模加相对应的)。在各种平衡点加和倍点运算流程的实现方式中,表2所示的这种平衡流程兼顾了实现速度的考虑,是投射坐标下素数域上所有的点加和倍点平衡运算流程中较为快速的一种实现方式。在表2所示运算流程中,标注出来的运算就是所增加的伪操作,可见,倍点运算流程增加了15个伪操作,点加运算流程增加了7个伪操作。这些伪操作的作用就是使点加和倍点的运算流程每一步都达到一致。其实,只要不影响点加和倍点的运算结果,实际参与这些伪操作的运算数是可以随意选定的。在使用表2所示的平衡运算流程在智能卡上实现如表3所示的ECC二进制点乘运算时,点加和倍点运算的功耗曲线将极其相似,如图7所示,攻击者已无法通过SPA区别出功耗曲线中点加和倍点运算所在的区域。<table>tableseeoriginaldocumentpage13</column></row><table>在图7中,二进制点乘所运算的密钥位为"0101"。由于采用了平衡的点加和倍点运算流程,使用SPA已经无法从图中猜测出点加运算或者倍点运算所在的区域,也就无法获知所运算的密钥位,从而很好地保护了密钥。(注由于采集功耗曲线时受到一些不可避免的外界因素的影响,图7所示功耗曲线的相似性受到一定的干扰,但攻击者仍无法通过SPA区别出点加和倍点运算所在的区域。)权利要求1、一种抗侧信道攻击的椭圆曲线密码系统实现方法,包括在加解密过程中由密钥决定的点乘运算的运算步骤,在所述点乘运算的运算步骤中包括有序的点加和倍点运算,所述点加运算和倍点运算均用模运算函数实现,其特征在于,所述点加运算和倍点运算的运算流程是平衡的。2、根据权利要求1所述的抗侧信道攻击的椭圆曲线密码系统实现方法,其特征在于,所述的选定坐标包括仿射坐标、投射坐标及其混合坐标。3、根据权利要求1所述的抗侧信道攻击的椭圆曲线密码系统实现方法,其特征在于,所述的有限域包括二进制有限域、素数有限域。4、根据权利要求1所述的抗侧信道攻击的椭圓曲线密码系统实现方法,其特征在于,所述模运算函数包括模加、模减、模半、模乘、模逆和数据转移运算。5、根据权利要求1所述的抗侧信道攻击的椭圓曲线密码系统实现方法,其特征在于,所述点加运算和倍点运算的运算流程是平衡的,是指点加运算和倍点运算的流程中,包含的模运算函数的个数相同且对应的步骤中的模运算函数的类型相同。全文摘要本发明涉及一种抗侧信道攻击(Side-ChannelAttacks,简称SCA)的椭圆曲线密码系统(EllipticCurveCryptosystem,简称ECC)的实现方法,属于密码算法领域。在所述的抗侧信道攻击的椭圆曲线密码系统实现方法中,包括在加解密过程中由密钥决定的点乘运算的运算步骤,所述的点乘运算步骤用具有平衡的运算流程的点加与倍点的运算组合完成。通过对点加和倍点的运算流程进行平衡,使得二者的运算时间相同,消耗的功耗也相同,因此消除了二者泄露的侧信道信息的差异,在整个点乘运算过程中,基于点加和倍点的差异的侧信道攻击方法无法再对ECC进行攻击。文档编号H04L9/30GK101562522SQ20091010694公开日2009年10月21日申请日期2009年5月6日优先权日2009年5月6日发明者李慧云,邬可可,陈廷定申请人:深圳先进技术研究院
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1