发明内容
针对上述现有技术中存在的缺陷,本发明所要解决的技术问题是提供一种无统计特性,有较大攻击难度的抗旁路攻击RSA算法及其芯片。
为了解决上述技术问题,本发明所提供的一种抗旁路攻击RSA算法的芯片,其特征在于,包括:
一接口模块(IFC),用于完成芯片内外数据的交互,设芯片的输入、输出端;
一随机数模块(RNG),用于产生随机数;
一存储器模块(MEM),分别连接接口模块和随机数模块,用于存储RSA需要计算的大数、中间和最终结果;
一模幂模块(EXP),连接存储器模块,用于完成采用MIST算法的模幂运算;
一模约减模块(RED),分别连接模约减模块和存储器模块,用于完成普通的模约减算法,计算余数和商;
一控制模块(CTRL),分别连接模幂模块、模约减模块、存储器模块和接口模块,用于控制整个RSA设计的流程,使得模幂运算和模约减运算并行运行,并通过调用RED实现随机化的模约减运算。
进一步地,所述模幂模块(EXP)用于完成:Montgomery预计算(CMD_EXP_RR)、Montgomery计算(CMD_EXP_MONT)、模幂(CMD_EXP_EXP)、数据搬移(CMD_EXP_MOV)、乘加(CMD_EXP_MUL_ADD)以及模幂结果处理(CMD_EXP_FINISH)。
进一步地,所述模幂模块(EXP)由两个子模块组成:
EXP控制子模块(ExpCtrl),负责解析Montgomery预计算、Montgomery计算、模幂、数据搬移、乘加以及模幂结果处理的六个EXP任务命令;
Montgomery模乘运算子模块(MMM),用于完成:MUL、SQU、MOV、CMP、INI以及MA各项基本操作。
进一步地,所述Montgomery模乘运算子模块MMM包括MMMCtrl单元和PE处理单元,其中MMMCtrl单元控制对数据的读取和写入;PE处理单元用于数据处理。
进一步地,所述PE处理单元中使用了一个乘法器α×α,一个加法器α+α,以及一个4-2压缩器。需要注意的是MMM对平方运算作出了改进,使得其所需计算周期是同等长度下乘法的四分之三。该改进原理如下:
令X=(x1-1,…,x0),计算X×X可以用以下算法:
The Improved Square Algorithm
Square(X){
result=0;
for(i=0;i<l;i++){
for(j=0;j<i;j++)
result=2*xi*xj*2α*(i+j)+result;
result=xi*xj*2α*(i+j)+result;
}
Return(result);
}
算法第5、6行是区别与普通乘法的地方,j没有像i那样从0增加到l-1。
为了解决上述技术问题,本发明所提供的一种抗旁路攻击RSA算法芯片的抗旁路攻击RSA算法表示成ABmod N,其特征在于,该运算过程在控制模块CTRL中的步骤:
1)根据大数N得到H,其用于计算A的Montgomery表示(MontA=(H*A)mod N);
2)计算A的Montgomery表示,并且计算MIST(模糊)算法和模约减算法RandRed直到RedB等于0;
3)调整第二步得到的结果,并把其从Montgomery表示转化为普通表示。
进一步地,所述步骤2)中的MIST算法:
The Mist Exponentia tion Algorithm[6]
MistExp(B,A){
RemB=B;
StartA=A;
ResultA=1;
Wh ile(RedB>0){
Choose a random″divisor″d;
r=RedB mod d;
if(r≠0)
ResultA=StartAr×ResultA;
StartA=StartAd;
RemB=RedB/d;
}
Return(ResultA);
}
该算法的第8行在本发明中已经被替换成RandRed,并且除了第一个RandRed之外,其他的RandRed都可以和模幂运算并行运算。作为基本运算的模乘运算是通过Montgomery算法来实现的。
进一步地,所述步骤2)中的模约减算法RandRed,其特征在于,如要计算E modd,则算法描述如下:
RandRed(E,d){
选取一个随机数rand;
d′=d×rand;
(Q,r′)=Red(E,d′);
(Q′,r)=Red(r′,d);
Q=Q×rand+Q′;
Return(Q,r);
}
d是在MIST算法中从2,3,5中选取的操作数,而Red是普通的模约减函数。
本发明提供的抗旁路攻击RSA算法的芯片及其算法的有益效果:由于改进后的算法调用了两次普通模约减算法。第一个模约减算法需要重复的减法次数较多,甚至可以接近密钥的长度;第二个模约减算法调用的减法次数取决于选取的随机数的大小,一般较少。如果随机数从3,5,6,7,9,10,11,12,13,14中选取,对于第一个模约减调用,固定的操作数从3个扩大到30个,大大增加了攻击者的攻击难度。对于第二次模约减,减法次数不会超过10次,这意味着无法得到固定操作数的统计特性,从而无法通过观察功耗波形获取内部运算的数据。保证了芯片工作的安全性。
具体实施方式
以下结合附图说明对本发明的实施例作进一步详细描述,但本实施例并不用于限制本发明,凡是采用本发明的相似结构、方法及其相似变化,均应列入本发明的保护范围。
本发明通过引入随机数,提出了一种更为安全的模约减算法RandRed。同时结合MIST算法,给出一个抗旁路攻击的RSA芯片设计方法。
在引入随机数之后,固定在减法运算一端的操作数选择空间大大增加,使得攻击者需要在大量数据中确定用于计算的操作数。如要计算E mod d,则算法描述如下:
RandRed(E,d){
选取一个随机数rand;
d′=d×rand;
(Q,r′)=Red(E,d′);
(Q′,r)=Red(r′,d);
Q=Q×rand+Q′;
Return(Q,r);
}
d是在MIST算法中从2,3,5中选取的操作数,而Red是普通的模约减函数。改进后的算法调用了两次普通模约减算法。第一个模约减算法需要重复的减法次数较多,甚至可以接近密钥的长度;第二个模约减算法调用的减法次数取决于选取的随机数的大小,一般较少。如果随机数从3,5,6,7,9,10,11,12,13,14中选取,对于第一个模约减调用,固定的操作数从3个扩大到30个,大大增加了攻击者的攻击难度。对于第二次模约减,减法次数不会超过10次,这意味着无法得到固定操作数的统计特性。
本发明通过引入MIST算法和随机化的模约减算法来实现RSA运算。芯片整体框图如图1所示。芯片包括六个功能模块:
一接口模块(IFC),用于完成芯片内外数据的交互,设芯片的输入、输出端;
一随机数模块(RNG),用于产生随机数;
一存储器模块(MEM),分别连接接口模块和随机数模块,用于存储RSA需要计算的大数、中间和最终结果;
一模幂模块(EXP),连接存储器模块,用于完成采用MIST算法的模幂运算;
一模约减模块(RED),分别连接模约减模块和存储器模块,用于完成普通的模约减算法,计算余数和商;
一控制模块(CTRL),分别连接模幂模块、模约减模块、存储器模块和接口模块,用于控制整个RSA设计的流程,使得模幂运算和模约减运算并行运行,并通过调用RED实现随机化的模约减运算。
本发明所涉及到的算法除了以上给出的随机化的模约减算法外,还有MIST算法和Montgomery模乘算法。以下给出MIST算法:
The Mist Exponentia tion Algorithm[6]
MistExp(B,A){
RemB=B;
StartA=A;
ResultA=1;
Wh ile(RedB>0){
Choose a random″divisor″d;
r=RedB mod d;
if(r≠0)
ResultA=StartAr×ResultA;
StartA=StartAd;
RemB=RedB/d;
}
Return(ResultA);
}
该算法的第8行在本发明中已经被替换成RandRed,并且除了第一个RandRed之外,其他的RandRed都可以和模幂运算并行运算。作为基本运算的模乘运算是通过Montgomery算法来实现的。
模块分述
控制模块(CTRL),
将整个RSA运算表示成ABmod N,该运算过程被CTRL分成三个步骤:
1)根据大数N得到H,其用于计算A的Montgomery表示(MontA=(H*A)mod N);
2)计算A的Montgomery表示,并且计算MIST和RandRed直到RedB等于0;
3)调整第二步得到的结果,并把其从Montgomery表示转化为普通表示。
CTRL中的状态转换图如图2所示。状态图分两条路径。其一是预计算路径。当状态机接到预计算命令时,跳转到RedRR状态,计算Montgomery预计算所需要的数据,之后再跳转到ExpRR进行Montgomery预计算。结束后跳回空闲状态。另一条路径是模幂计算路径。如果状态机接到模幂命令,则从空闲状态Idle跳转到计算Montgomery数状态(ExpMont),接着计算以上所涉及的RandRed函数第三行运算(RedRand0)。之后进入RandRed函数第四行运算(RedRand1)和第五行运算(ExpMulAdd),至此便计算出了随机加法链的第一个数,此后的运算可以由模幂模块(EXP)和模约减模块(RED)并行计算。EXP一直进行模幂运算,RED进行RandRed函数第三、四行运算,直到幂指数B等于0为止。所以可以分成ERExpRand0和ERExpRand1两个状态。B等于0后,进行最后一次模幂运算(ExpExp)。如果最终结果无需调整(Valid=1),则直接返回空闲状态,否则进入RED普通模约减状态(RedDiv)进行调整。最后调用EXP模块将结果搬运到结果输出SRAM中(ExpMov)并返回空闲状态(Idle)。除了控制芯片状态的转换,CTRL还负责分配存储单元给EXP和RED模块。对存储器的访问分三种方式,其一:只有EXP才能访问MEM;其二:只有RED才能访问MEM;其三:EXP和RED都能对存储器进行访问。根据状态的不同,访问状态在这三种状态间进行跳转。
存储模块(MEM),
RSA算法的一个特点是运算数据较大(称之为大数)。建议使用SRAM来存储这些数据。拿密钥长度最长可达2048,处理位宽为32为例,MEM中需要使用5个70×32SRAM(A,B,N,TY,TR)和1个36×64SRAM(T)。SRAM A,B,N分别用于写入RSA操作数A,B和N。TY,TR被用来模幂运算的中间结果,其中TR还用于存储最终结果,SRAM T存储的是Montgomery模乘运算的中间结果。这些SRAM根据EXP单元给出的选择信号,将被映射到各个EXP的操作数上。具体的映射关系将在3.2.3节给出。
模幂模块(EXP),
EXP完成的任务有:Montgomery预计算(CMD_EXP_RR)、Montgomery计算(CMD_EXP_MONT)、模幂(CMD_EXP_EXP)、数据搬移(CMD_EXP_MOV)、乘加(CMD_EXP_MUL_ADD)以及模幂结果处理(CMD_EXP_FINISH)。
CMD_EXP_RR:H的计算分两步进行:Mont2=2×2
rmod N以及H=(Mont2)
rmod N,其中
(α是设计中乘法的位宽)。CMD_EXP_RR用于完成第二步H=(Mont2)
rmod N运算。而第一步Mont2=2×2
rmod N由RED单元得到。MEM单元计算出r后,将N的长度和r送给RED单元,得到结果后也将r按由低到高的顺序传给EXP单元,EXP据此按照普通的模幂运算计算出H。
CMD_EXP_MONT:该任务完成将输入的RSA操作数A转化成Montgomery表示MontA。即MontA=Mont(A,H,N),其中Mont表示Montgomery模乘运算。
CMD_EXP_EXP:完成加法链上一个元素(ExpRand,Re)所对应的运算。各元素对应的运算如表1所示。
元素(SC) |
操作 |
(2,0) |
(A,A,A) |
(2,1) |
(A,A,TY)(A,TR,TR) |
(3,0) |
(A,A,TY)(A,TR,A) |
(3,1) |
(A,A,TY)(A,TR,TR)(A,TY,A) |
(3,2) |
(A,A,TY)(TY,TR,TR)(A,TY,A) |
(5,0) |
(A,A,TY)(A,TY,A)(A,TY,A) |
(5,1) |
(A,A,TY)(A,TR,TR)(A,TY,A)(A,TY,A) |
(5,2) |
(A,A,TY)(TY,TR,TR)(A,TY,A)(A,TY,A) |
(5,3) |
(A,A,TY)(A,TY,A)(A,TR,TR)(A,TY,A) |
(5,4) |
(A,A,TY)(TY,TY,TY)(TY,TR,TR)(A,TY,A) |
操作栏内括号表示一次Montgomery模乘运算。例如(A,TY,A)表示Mont(A,TY,N),最后将结果存储在A中。在完成(2,1)对应的运算后,需要将A和TY的地址输入输出等控制线调换。CMD_EXP_EXP总是和RED并行执行的,每当CMD_EXP_EXP运算时,RED同时计算下一次CMD_EXP_EXP所需要的SC。
CMD_EXP_FINISH:当RedB等于0,RED可以停止工作,而EXP需要将最后一组SC计算完,这个工作由CMD_EXP_FINISH完成,其计算过程和CMD_EXP_EXP完全一样,参照表1所示。
CMD_EXP_MOV:所完成的工作较为简单,就是把一个存储器中的数据转移到另一个存储器。主要用在当CMD_EXP_FINISH计算出的结果大于N时,需要由RED来完成一次模约减,而该结果无法由RED本身来存储在TR中,所以需要运用CMD_EXP_MOV来完成。
CMD_EXP_MUL_ADD:用于完成RandRed中最后一条语句,由于Montgomery模乘运算中由m×N+T的运算,所以两者可以复用硬件资源(一个乘法器和一个加法器)。
EXP由两个子模块组成:EXP控制子模块(ExpCtrl)以及Montgomery模乘运算子模块(MMM)。ExpCtrl负责解析以上列出的六个EXP任务命令,并根据表1将他们分解成更为基本的模乘和转移操作。
MMM完成各项基本操作。MMM所需要完成的任务有:MUL、SQU、MOV、CMP、INI以及MA。
MUL:采用Montgomery算法的取模乘法;在表1中,所有前两个操作数不同的操作都属于这个范围。
SQU:考虑到设计已经采用了MIST算法,即使攻击者能分辨出乘法和平方的区别也无法得到密钥。所以可以针对平方运算中的冗余进行优化,而不需要考虑改进的安全性。表1中所有前两个操作数相同的操作都属于这个范围。
MOV:完成将一个存储器中的数据转移到另一个存储器。
CMP:在完成Montgomery模乘之后需要判断结果是否大于N,CMP就是完成这个操作。
INI:对TR存储器进行初始化:写入1。(MIST算法描述的第5行)
MA:完成CMD_EXP_MUL_ADD的任务。
MMM包括MMMCtrl和PE处理单元,其中MMMCtrl控制对数据的读取和写入;PE负责数据处理。PE中使用了一个乘法器α×α,一个加法器α+α,以及一个4-2压缩器。需要注意的是MMM对平方运算作出了改进,使得其所需计算周期是同等长度下乘法的四分之三。该改进原理如下:
令X=(xl-1,…,x0),计算X×X可以用以下算法:
The Improved Square Algorithm
Square(X){
result=0;
for(i=0;i<l;i++){
for(j=0;j<i;j++)
result=2*xi*xj*2α*(i+j)+result;
result=xi*xj*2α*(i+j)+result;
}
Return(result);
}
算法第5、6行是区别与普通乘法的地方,j没有像i那样从0增加到l-1。而是在第6行采用乘以2来改进,由于只需要将乘法器输出结果向高位映射一位,改进代价较小。
PE的另一个特点是对中间结果的读取、写入处理。在PE工作过程中,一个周期内即需要读取α位的上一次结果,同时又要写入α位的本次运算结果。考虑到双口RAM面积较单口大,将中间结果存储器的位宽设为2α,这样每次读和写都可以完成2α位的数据传输,将读写操作交替进行便可以满足计算要求,同时使用的T RAM是单口的。
PE单元结构图如图3所示。PE主要由一个乘法器、一个4-2压缩器和一个加法器组成。根据需要给乘法器选择输入的数据,乘法器得到的结果存在寄存器PRODUCT中,长度是2α,其中高α位输入到寄存器PRODUCT_H中,在下一个时钟送到4-2压缩器,低α位直接输入到4-2压缩器,进入4-2压缩器的数还有加法器结果的进位以及中间计算结果。压缩器压缩的结果直接给加法器进行计算并存储在寄存器SUM0中。SUM1和SUM2用于缓存结果数据,配合SRAM存储单元的写入。
模约减模块(RED),
RED只完成普通的模约减运算,前文中所提到的随机化模约减算法是通过CTRL根据算法和随机数调用RED完成的。RED单元具体完成的任务有:计算B mod d’(CMD_RED_B_DACC)、计算r’mod d(CMD_RED_RACC_D)、模约减(CMD_RED_DIV)、为Montgomery预计算进行的特殊模约减(CMD_RED_RR)。
CMD_RED_B_DACC:完成随机化模约减算法中调用的第一个模约减运算,将余数写入r’,商写回B。
CMD_RED_RACC_D:完成随机化模约减算法中调用的第二个模约减运算,将余数写入r,商写入Q’。
CMD_RED_DIV:用于调整Montgomery模乘结果,只计算余数,余数写入A存储器。
CMD_RED_RR:完成Mont2的计算,为计算H作准备,只计算余数,余数写入A存储器。
本模块采用算法如下:
The Classical Reduction Algorithm
Red(E,d){
i=Length(E) -Length(d);
c=0;Q=0;
r=E>>(i+1);
w hile(i≥0){
if(c=1)
c:r=2×r+E[i]+d;
else
c:r=2×r+E[i]-d;
Q[i]=NOT c;
i=i-1;
}
if(c=1)
r=r+d;
Return(Q,r);
}
随机数模块(RNG),
RNG利用噪声产生真随机数,内设一个计数器,每64个时钟读取一位随机数,并将该位移入一个移位寄存器。CTRL处于EXP_MONT和EXP_MUL_ADD的开始周期读取一次这个6位移位寄存器,其中三位用作MIST算法中的d,另外三位用作RandRed的rand。
RNG结构如图4所示。随机数由两部分组成一个是利用随机噪声源组成的随机种子产生器(RBG)。另一部分是一个伪随机网络,由线性移位寄存器(LFSR)和固定位的异或组成。由固定位异或得到的结果再和RBG产生的种子再异或一次,作为LFSR的输入。最终的输出由一个计数器(Counter)控制,在给定的时间间隔后输出LFSR的低位部分。