RSA加密算法的实现电路及方法
本发明涉及计算方法的硬件实现领域,尤其涉及RSA加密算法中大数模乘、模幂运算的硬件实现,具体的说是涉及通过集成电路实现采用蒙哥马利模乘法完成大数模幂运算的硬件电路。
随着通讯技术的发展,信息的传输量越来越大,信息的安全问题也越来越重要,尤其在商业领域,信息传输的安全性、完整性和不可抵赖性直接影响到商家的运作模式和经济利益。在信息时代,高速计算机和全球化的INTERNET网络的发展,使世界不同地区的人们可以相互交换信息,信息访问的合法性显得日益重要。日益发展的各种信息加密、解密技术适应了时代的要求,良好的加密算法使信息传输更可靠、更安全,其中公钥加密算法能更好的满足用户的要求。到目前为止,RSA加密算法是最流行的公开密钥算法,可用作加密和数字签名。
RSA加密算法是由R.L.Riverst,A.Shamir,and L.Adleman提出、用三个人名命名的算法。在使用该加密算法的系统中,对于每个用户而言对应着三个很大的二进制整数M、e和d,一般为512位或1024位,数越大所加密的信息越难破解。这三个二进制整数之间有着特殊的关系,其中M和e是公开的,d是保密的,并由用户保存,M是模数,e是加密密钥,d是解密密钥。当向某用户发送信息C时,利用对应该用户的加密密钥e,对信息C加密再发向该用户,这里C为明文,E为密文,加密过程可表示为:E=CemodM;当用户接到密文信息E后,用对应该用户的解密密钥d对其解密可恢复明文信息C:C=EdmodM。
可见采用RSA算法对信息加密和解密都必须进行大数模幂运算,众所周知模幂运算可分解为多次模乘运算,设加解密涉及的大数为C、A、e,模为M,即:
C=AemodM=(A×A×…×A)modM模乘运算可采用蒙哥马利模乘运算法硬件实现,其完成的计算记作Mont(A,A,M)。
若模M的二进制数的长度为n位,蒙哥马利模乘就需要经过n+1轮迭代运算,设其完成的运算结果为P,则:
P=Mont(A,A,M)=A×A×2-(n+1)modM可知经过n+1轮蒙哥马利模乘运算后,所得结果比模乘多一个因子2-(n+1),由此需构造蒙哥马利模乘运算T:
T=Mont(P,PP,M)=A×AmodM其中 PP=22n+2modM如此完成了加解密所需的大数模幂运算。其中PP的运算即为采用蒙哥马利模乘算法时的初始预计算。美国专利US 6,061,706公开了一种蒙哥马利模乘硬件电路,在该电路中它的初始预计算PP=22n+2modM由用户完成,给用户带来了不便,而且由用户采用软件实现该运算,速度没有硬件实现快。
在模乘计算完成后,其结果可能比模大,因此必须再做一次取模运算,实现结果的归一化处理。
本发明的目的在于提出一种RSA加密算法中采用蒙哥马利模乘法实现大数模幂、模乘运算时初始预计算和结果归一化处理的实现电路及方法。
实现本发明目的的一种大数模幂运算的蒙哥马利模乘法实现电路,由多级基本处理单元连接而成,模的二进制数长度为n,其初始预计算电路由n+1个预计算单元连接而成,处于预计算链最高位n的预计算单元包括触发器D和全加器FA,低一位预计算单元的计算结果R[n-1]输入触发器D,经过一个时钟后写入,触发器D的输出和数值1以及低一位预计算单元的进位输出Br[n-1]作为操作数输入全加器FA,产生本级进位输出Br[n];
处于预计算链的非最高位i(i等于0,1,…,n-1)的预计算单元包括触发器D、全加器FA、反相器N,以及前后两个多路器(101和102),低一位预计算单元的计算结果R[i-1]和模乘结果PV[i]输入前一级多路器(101);模M的二进制数第i位的值M[i]经反相器N后和前一级多路器(101)的输出以及低一位预计算单元的进位输出Br[i-1]分别同时输入全加器FA,全加器FA产生本级进位输出Br[i],前一级多路器(101)和全加器FA的输出输入后一级多路器(102),后一级多路器(102)输出预计算结果R[i];
上述预计算单元组成预计算链,低一位预计算单元的计算结果R[i]输入上一位预计算单元的触发器D,低一位预计算单元的进位输出Br[i]输入上一位预计算单元的全加器FA,最底位预计算单元的触发器D的输入为0、全加器FA的输入为1,用于选择预计算和模乘运算的前一级多路器(101)组的使能信号为En,用于信号输出选择的后一级多路器(102)组的使能信号Sel为根据进位产生的控制信号。
实现本发明目的的一种大数模幂运算的蒙哥马利模乘法实现方法,在多级基本处理单元连接而成的链路中实现迭代运算,模的二进制数长度为n,其在初始预计算电路中实现的初始预计算包括以下步骤:
①计算2nmodM;
②左移一位写入寄存器,再做取模运算;
③重复步骤②共n+2次。
本发明有以下优点:将预计算和结果归一化处理电路集成在芯片内,无需用户输入预计算数据,方便用户,提高运算速度;预计算和结果归一化处理采用同一电路,减少电路面积,降低设计复杂度,降低成本。
下面结合附图对本发明作进一步详细说明:
图1A是处于预计算链最高位的预计算单元电路示意图;
图1B是非预计算链最高位的预计算单元电路示意图;
图2是产生选择信号Sel的电路示意图;
图3是预计算链电路结构示意图;
图4是链长为4的预计算电路示意图。
在预计算PP=22n+2modM中指数2n+2是两次蒙哥马利模乘的迭代次数,将上式写成如下形式:
PP=(2n×2×…×2)modM=(…((2nmodM)×2modM)…×2)modM
其中…代表n次(×2modM)运算。
所以PP的运算过程可分解为:
1.计算2nmodM;
2.左移一位写入寄存器,再做取模运算;
3.重复步骤2共n+2次。
因为二进制数2n长度为n+1位,且最高位为1,其它位为0;模M取为奇数,长度为n位,即M的最高位和最低位是1;则2M的长度是n+1位,且至少最高位和次低位两位为1,所以有:
2M>2n>M则: 2nmodM=2n-M该二进制运算可以通过零与减数的补数相加得到:
0+M补其中 M补=
M+1将该结果左移一位即完成乘以2的运算,写入寄存器后再求模输出,即完成运算
2n+1modM然后再左移一位写入寄存器,接着再求模输出,即运算
2n+2modM
…………这样再经过n次运算后完成:
22n+2modM
图1A和图1B的两种电路是预计算链中的两种处理单元。图1A所示的电路用于预计算链的最高位,图中的D代表D触发器,FA代表全加器,Br是全加器的进位输出,R是处理单元的计算结果。该电路的运作过程是这样的:下一级的计算结果R[n-1]输入D触发器,经过一个时钟后写入D触发器;D触发器的输出和数值1以及下一级全加器的进位输出Br[n-1]作为操作数输入全加器FA,Br[n]是本级产生的进位输出,用于产生选择预计算链输出结果的控制信号。图1B所示的电路用于预计算链的非最高位i位,其电路比图1A多两个多路器101和102,PV是模乘结果,M[i]是模M的二进制数第i位的值,前一级多路器101用于信号输入选择,选择预计算和模乘运算;后一级多路器102用于信号输出选择,该多路器102的使能信号根据进位产生,若进位位为1,说明结果数据(在寄存器D中)大于模值M,这时输出数据要减掉模M;若进位位为0,说明结果数据小于模值M,输出数据可以直接输出。图1B的运作过程与图1A相同。
图2所示是一多路器,用于选择计算结果。该多路器的使能是模长ML,ML的值是模的二进制数据长度减1,如模为1011,则ML为3。预计算链中各全加器的输出进位Br[i]输入多路器,多路器的输出同Ctrl信号相或得到控制信号Sel,Ctrl信号来自运算核的控制电路,在第一次时钟脉冲写入时为1(即第一次左移一位时),以后为0。
图3是预计算链电路结构示意图,由如图1A和图1B所示的两种预计算单元组成。预计算链的长度根据模M的长度决定:若模M的长度为n,则需要n+1个预计算单元,模M[i]经过一组反向器后,它的每一位分别输向对应计算链单元全加器的一个操作数输入端,在最高位输入“1”;D触发器组Di的输出数据和模乘结果数据PV[i]共同输入各多路器Si,多路器Sn-1…S1S0的选通信号En,选择模乘结果PV[n-1]、PV[n-2]、……、PV[1]、PV[0]和最低位的“0”分别输入相应全加器。多路器组Seln-1…Sel1Sel0的输出分别输入上一位预计算单元的D触发器,这样每次写入D触发器时,预计算结果值左移一位。在模乘运算完成后,信号En为高,模乘结果PV[n-1]、PV[n-2]、……、PV[1]、PV[0]经过多路器组Sn-1…S1S0输到全加器,其结果小于2M,但可能大于M,若大于M要对模乘结果求模后输出,若小于M则直接输出,如此完成结果归一化过程。
图4是模乘为3位的预计算链电路示意图,图中最低位的预计算单元,因在右移过程中,最低位为0,所以D触发器可以省掉。根据前面的推导过程,该预计算链有4个预计算单元,每一位的输出连向上一位的D触发器的输入,数据PV[2]、PV[1]、PV[0]是模乘结果的输出,模M以补数形式输入,在全加器中完成与数据R[2]、R[1]、R[0]的减法运算。假设模M等于5,则n为3,即计算
22×3+2mod5首先计算第一步
(23mod5)×2将D触发器清零,运算0+M补,这时要取全加器的输出结果,控制信号Ctrl使Sel为1,经过一个时钟后,预计算链的输出结果分别左移一位并写入D触发器组D2D1D0。接下来计算
(((23mod5)×2)mod5)×2这时Ctrl为0,不参与控制,信号Sel与Br[3]等价,计算mod5,再经过一个时钟后,使结果左移一位写入D触发器组D2D1D0。如此反复,3个时钟后完成运算。
R=22n+2modM
在模乘运算结束后,其二进制结果的各位为PV[2]、PV[1]、PV[0],该值可能大于M,且小于2M,这样需要对该值取模,本电路的后处理功能就完成模乘结果的取模运算。当模乘结束后,输入多路器使能信号EN为1,选通模乘结果PV[2]、PV[1]、PV[0]输出并使PV<M。