在电子部件中使用公共密钥加密算法的模求幂算法的制作方法

文档序号:6656161阅读:508来源:国知局
专利名称:在电子部件中使用公共密钥加密算法的模求幂算法的制作方法
技术领域
本发明涉及一种在电子部件中使用公共密钥加密算法的抗SPA(“简单功率攻击(Simple Power Attack)”)模求幂算法。
人们知道公共密钥密码学算法特征进行的计算、使用的参数。唯一不为人知的是包含在程序存储器中的私有密钥。这些密码学算法的整体安全性在于包含在卡中的该私有密钥,而且该私有密钥不为该卡之外的环境所知。不能仅根据作为一个输入所施加的消息以及返回中所提供的编码的消息的知识,或根据公共密钥的知识推导该私有密钥。
然而,人们已明显意识到当卡中的微处理器处于运行用于签署一条消息或解密一条消息的密码学算法的过程中时,根据电流的消耗或对电流消耗的分析,可以发动外部攻击,使恶意的第三方能够发现包含在该卡中的私有密钥。人们把这些攻击称为SPA攻击,SPA为英文Single Power Analysis的首字母缩略语。
这些SPA的攻击的原理基于这样的一个事实执行指令的微处理器的电流消耗随所操作的数据而变化。
具体地说,当微处理器所执行的一条指令要求逐位地操作一个数据项时,存在两种不同的电流分布,取决于该位是“1”还是“0”。通常,如果微处理器操作一个“0”,那么在执行的该时刻,存在着一个第一消耗电流幅度。如果微处理器操作一个“1”,那么存在着一个不同与第一的第二消耗电流幅度。
于是,在一条指令的执行期间,SPA攻击根据所操作的位的值,利用了卡中的电流消耗分布方面的差别。简而言之,执行一个SPA攻击包括识别一或多个特定周期,在这些周期期间运行算法,该运行包括至少执行一条逐位操作的数据指令,并区别两个不同的电流消耗分布,一个相应于一个等于“0”的位的操作,另一个相应于一个等于“1”位的操作。在一条曲线上,或可能在算法的同一运行的n条曲线上进行分析,并对它们加以平均,以消除噪音。
模求幂由下列数学公式定义R=XYmod N,
其中Y是一个指数,其大小为k位;N是一个模数,其大小为k′位;X是一个已知的变量,其大小为k″位;R是一个模求幂操作的结果,其大小为k′位;可以使用以下所描述的人们所熟悉的常规算法A或B。
用于计算以上所提到的数学公式的常规算法A如下-把R初始化为1R=1;-从表示为Y(k-1)的最高有效位到最低有效位Y(0),运行Y的二进制表示;对于每一位Y(i),i从(k-1)变至0,执行附加的操作R=R2。
如果位Y(i)等于1,那么运行由操作R=R*X组成的一个附加步骤。
例如,如果位Y等于5,那么其二进制表示为101。
如果实施以上的算法-对于第一位[Y(2)=1],R=R2受到影响,接下来操作R*X=X受到影响,即结果为R=X;-对于第二位[Y(1)=0],执行操作R=R2,即结果为R=X2;-对于第三位[Y(0)=1],执行操作R=(R2)2,接下来执行操作R=R*X,即结果为R=(X2)2=X5;注意,始终使用先前的R。
自然地,对针对例子Y等于5所描述的所有数学操作执行模N操作, 这使与一个具有k′位大小的寄存器r一起工作成为可能。
用于计算以上所提到的数学公式的常规算法B如下-把R初始化为1,并把Z初始化为XR=1和Z=X,Z是一个变量-从表示最低有效位Y(0)到最高有效位Y(k-1),运行Y的二进制表示;对于每一位Y(i),i从0变至(k-1),当i大于0时,执行附加的操作Z=Z2。
如果位Y(i)等于1,那么执行由操作R=R*X组成的一个附加步骤。
例如,如果位Y等于5,那么其二进制表示为101。
如果实施以上的算法-对于第一位,Y(0)=1;不执行操作Z*(因为i=0),而执行操作R=R*Z=X。
-对于第二位[Y(1)=0],执行操作Z2=X2,因为Y(1)=0,所以R不变;-对于第三位[Y(2)=1],执行操作Z=Z2=X4,并当Y(2)等于1时,执行操作R=R*Z,因而得到X5。
注意,始终使用先前的R和Z。
自然地,对针对例子Y等于5所描述的所有数学操作执行模N操作,这使与一个具有k′位大小的寄存器r和z一起工作成为可能。
然而,在芯片卡型的电子部件中很少使用该算法B,因为它要求较多的存储器(一个具有k′位大小的附加的寄存器z)。
可以发现,在以上所解释的常规算法A和B中,根据Y的每一位,如果该位为0,执行一个操作,如果该位为1,执行两个操作。把算法A和B用于RSA。注意,RSA加密系统是最广泛使用的公共密钥加密系统。可以把其用作一种加密方法或用作一种签字方法。在芯片卡中针对其某些应用使用RSA加密系统。在一个芯片卡上的RSA的可能的应用是访问数据库、银行应用、远程付款应用(例如,支付电视费、支付汽油费、或支付公路费等)。当然,这里所列举的应用是十分有限的。
RSA加密系统的原理如下。可以把其分成三个不同的部分,即1)生成一对RSA密钥;2)加密一条明文(message in clear)的消息,使其成为一条加密的消息,以及3)解密一条加密的消息,使其成为一条明文的消息。
RSA加密操作包括计算一个密码C,密码C等于一条消息MemodN,由操作C=Memod N加以表示。其中,e是公共加密指数,N是模数。
一个RSA解密操作包括计算一条消息M′,如果正确地执行解密,M′等于M,并由操作M′=Cemod N加以表示。
其中,d是私有解密指数,N是模数。
可以发现,RSA就是一个模求幂操作。
实践证明,d是一个秘密单元,因为它是私有的。因此可以发现d等价于在本说明书开始处所述的常规算法A或B中的Y。然而,通过对实现本发明的电子部件的电流消耗的研究,便可简单地攻击用于RSA的这些算法。
这是因为,如果考虑到被称为“平方操作”(表示为S(SQU))的针对算法A的操作R2的签字S和针对算法B的Z2,不同于被称为“乘操作”(表示为S(MUL))的针对算法A的操作R*X的签字S和针对算法B的Z*R,那么,在执行以上所描述的算法A和B期间,电流消耗由一系列直接依赖于Y的签字S(SQU)和S(MUL)组成。
例如,在算法A的情况中,对于Y等于5,将存在以下的一系列签字[S(SQU),S(MUL)]、[S(SQU)]、[S(SQU),S(MUL)]。其中,跟随在系列签字[S(SQU)]后面的[S(MUL)]相应于一个等于1的位,跟随在[S(SQU)]后面的签字[S(SQU)]相应于一个等于0的位。
如果已知如何区别[S(SQU)]和[S(MUL)],则通过简单地观察电流消耗就可发现整个Y值。如果把该攻击施用于以上所描述的RSA,可发现Y=d,根据定义,Y=d肯定是保持秘密的私有解密指数,因此这将是非常可怕的。
本发明使消除该重大缺陷成为可能。
然而,为了明显突出本发明的发明性,对仍有缺陷的算法A和B加以改进的一个例子进行描述是十分有益的。
在常规算法A或B中,考虑到实现本发明的部件拥有一个被称为″平方″(表示为SQU)的优化的操作,它比表示为MUL的操作″乘″可更有效地计算R2。
针对攻击的第一还击包括仅使用操作MUL。在该情况中,除了操作“乘”的签字外,什么也没有保留,这使区别任何能够回到值Y的信息不再可能。更确切地说,数学操作“乘”拥有两个操作码V和W,并由下列公式加以定义MUL(V,W)=V*W。
理论上讲,对某一事物加以保护是可行的,但在实践中使用操作MUL(V,V)或操作MUL(V,W);因为操作码(operand)不同,所以仍存在着电流消耗的差别。这不是一个可靠的解决方案。
本发明包括通过本算法计算模求幂,并使避免以上刚刚加以陈述的缺陷成为可能。
使用两个寄存器R1和R2以及一个指示器I,I等于0意味着结果位于寄存器R1中,I等于1意味着结果位于R2中,从而可指示正确的结果位于哪一个寄存器中。
采用算法A的本发明的算法包括通过下列初始化步骤a和b以及计算步骤c、d、e以及f执行该算法,对这些步骤执行k次,k是Y的大小,所描述的步骤如下a)初始化R1=1;b)初始化I=0。
对于Y的每一个二进制表示的位Y(i),从“0”到“k-1”执行下列4个步骤c、d、e以及f;从最高有效位Y(k-1)到最低有效位Y(0)运行Y的二进制表示。
c)如果I=0,执行操作R2=(R1)2;如果I=1,执行操作R1=(R2)2;d)对I求补,即其值仅从“0”变到“1”或从“1”变到“0”;e)在I上重复测试操作如果I=0,执行操作R2=R1*X;如果I=1,执行操作R1=R2*X;f)如果Y(i)=1,那么对I求补;如果Y(i)=0,那么I保持不变;于是,无论Y的值如何,总是执行一个SQU操作和一个MUL操作。因而在步骤d将存在下列两个签字之一S(R2=SQU(R1))或S(R1=SQU(R2))。
在步骤f也将存在下列两个签字之一S(R1=MUL(R2,X))或S(R2=MUL(R1,X))。
步骤c的签字是等效的,因为它们使用了相同的操作码,并执行了相同的操作(SQU)。
步骤e的签字是等效的,因为它们使用了相同的操作码,并执行了相同的操作(MUL)。
因此,回到Y的值已不再可能,它将是操作(SQU)和(MUL)的一个后继。本发明的该应用使在一个使用要求模求幂算法的公共密钥算法的电子部件中以一种受保护的方式计算模求幂成为可能。
采用常规算法B的本发明的算法包括通过下列初始化步骤a和b以及下列计算步骤c、d、e以及f执行该算法,对这些步骤执行k次,k是Y的大小a)初始化R1=1,以及Z=X;b)初始化I=0。
对于Y的每一个二进制表示的位Y(i),执行3个步骤c、d以及e,i从“0”变化到“k-1”;从最低有效位Y(0)到最高有效位Y(k-1)运行Y的二进制表示;c)执行操作Z=Z2;d)如果I=0,执行操作R2=R1*Z;如果I=1,执行操作R2=R2*Z;e)如果Y(i)=0,那么I保持不变,如果Y(i)=1,那么对I求补;于是,无论Y的值如何,总是执行一个SQU操作和一个MUL操作。因而在步骤c将存在下列签字S(SQU)。
在步骤d将存在下列两个签字之一S(R1=MUL(R2,Z))或S(R2=MUL(R1,Z))。步骤d的签字是等效的,因为它们使用了相同的操作码,并执行了相同的操作(MUL)。
因此,回到Y的值已不再可能,它将是操作(SQU)和(MUL)的一个后继。本发明的该应用使在一个使用要求模求幂算法的公共密钥算法的电子部件中以一种受保护的方式计算模求幂成为可能。
作为本发明的一个例子,使用了DSA,DSA是Schnorr和E1 Gamal签字算法的一个变种。
为了签字m个步骤,执行下列步骤1)生成一个随机数k;2)计算r=(gkmodp)modq,其中g、p以及q为芯片卡外部已知的公共整数;3)计算s=(K-1(H(m)+x*r))modq其中H()是一个印迹函数,x是一个私有密钥。
对(r,s)相应于消息m的签字。
将会注意到K是秘密所在。
步骤2部分地包括一个模求幂
r′=gkmodp和r=r′modq如果模求幂受到如以上所描述的常规算法A或B的影响,那么SPA攻击使其回到值k成为可能。知道k,并已知s,m和r时,攻击者可以计算出密钥x。于是,他发现了签字的密钥,因而系统将会遭到破坏。因此,较佳的做法是使用本发明或本发明实施方案变型,以影响本实例步骤2的模求幂。
于是,在本发明中,由于计算算法的方法使攻击者不可能通过考察电流消耗发现k,所以攻击者不能回到私有密钥x的值。
权利要求
1.一种模求幂算法,该方法由下列数学公式加以定义R=XYmod N,Y是一个指数,其大小为k位,N是一个模数,其大小为k′位,X是一个已知的变量,其大小为k″位;R是模求幂操作的结果,其大小为k′位,并且包括寄存器R1和R2以及一个指示器I,一种算法,其特征在于,该算法包括下列的执行步骤,这些步骤包括叫做初始化步骤的步骤a和b,以及叫做计算步骤的步骤c、d以及ea)初始化R1=1以及Z=X;b)初始化I=0;对于Y的每一个二进制表示的位Y(i),执行3个步骤c、d以及e,i从“0”变化到“k-1”;因此,可从最低有效位Y(0)到最高有效位Y(k-1)运行Y的二进制表示;c)执行操作Z=Z2;d)如果I=0,执行操作R2=R1*Z;如果I=1,执行操作R1=R2*Z;e)如果Y(i)=0,那么I保持不变,如果Y(i)=1,那么对I求补;
2.一种模求幂算法,该方法由下列数学公式加以定义R=XYmod N,Y是一个指数,其大小为k位,N是一个模数,其大小为k′位,X是一个已知的变量,其大小为k″位;R是模求幂操作的结果,其大小为k′位,并且包括寄存器R1和R2以及一个指示器I,一种算法,其特征在于,该算法拥有下列的执行步骤,这些步骤包括叫做初始化步骤的a和b,以及叫做计算步骤的c、d、e以及fa)初始化R1=1;b)初始化I=0;对于Y的每一个二进制表示的位Y(i),执行下列4个步骤c、d、e以及f,i从“ 0”变化到“k-1”;因此,可从最低有效位Y(0)到最高有效位Y(k-1)运行Y的二进制表示。c)如果I=0,执行操作R2=(R1)2;如果I=1,执行操作R1=(R2)2;d)在步骤d的两种情况中,对I求补,即它的值仅从“ 0”变化到“1”或从“1”变化到“ 0”;e)在I上重复执行测试操作;如果I=0,执行操作R2=R1*X;如果I=1,执行操作R1=R2*X;f)如果Y(i)=1,那么对I求补;如果Y(i)=0,那么I保持不变;
3.一种电子部件,其特征在于它实现了权利要求1至权利要求2之一。
4.根据权利要求2的一种电子部件,其特征在于它是一个芯片卡类型的便携式的电子物体。
5.一种电子终端,其特征在于实现了权利要求1至权利要求2之一。
全文摘要
本发明涉及一种使用公共密钥加密算法的电子部件中的抗SPA(简单功率攻击)模求幂算法。
文档编号G06F7/72GK1397035SQ0180411
公开日2003年2月12日 申请日期2001年1月18日 优先权日2000年1月26日
发明者O·伯努瓦 申请人:格姆普拉斯公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1