提供了加密和签名功能的RSA算法的实现方法和装置
技术领域
本发明涉及信息安全技术领域,特别涉及提供了加密和签名功能的RSA算法的实现方法和装置。
背景技术
RSA算法是由Ron Rivest、Adi Shamirh和LenAdleman三人在1977年提出的,提供了加密和签名等功能,是应用最为广泛的密码算法之一。
RSA算法的核心为模乘运算,所谓模乘运算,即指当输入乘数x、y,模数n时,输出(x×y)mod n的结果,mod表示求模运算。
移位-加算法为实现模乘运算的经典算法,具体实现如下:
1)接收输入的k位乘数x、y,k位模数n,x、y和n均为正整数;
2)令s=0,i=k-1;
3)计算(s<<1)+x×y[i],得到计算结果s’,其中,<<表示左移,<<1即表示左移1位,y[i]表示y的第i位的取值,当i<0时,y[i]=0;
计算s’mod n,得到计算结果s”;
4)确定i的取值是否等于0,如果是,则将s”作为模乘运算的结果输出,否则,令i=i-1,s=s”,然后重复执行步骤3).
需要说明的是,上述以及后续将要出现的各数字在实际应用中均以二进制形式进行表示。
另外,在实际应用中,还可对上述移位-加算法进行一定的改造,从而得到采用高基形式的移位-加算法,具体实现如下:
1)接收输入的k位乘数x、y,k位模数n,k=k1×k2,x、y、n、k1和k2均为正整数;
2)令s=0,i=k2-1;
3)计算(s<<k1)+x×y[(i+1)×k1-1∶i×k1],<<表示左移,y[(i+1)×k1-1∶i×k1]表示y的第(i+1)×k1-1位到第i×k1位中的每位的取值,当i<0时,y[i]=0;
计算s’mod n,得到计算结果s”;
4)确定i的取值是否等于0,如果是,则将s”作为模乘运算的结果输出,否则,令i=i-1,s=s”,然后重复执行步骤3)。
上述两种方式虽然均可实现模乘运算,但两者在实际应用均会存在一定的问题,即计算量大,从而导致计算速度慢。
发明内容
有鉴于此,本发明的主要目的在于提供了加密和签名功能的RSA算法的实现方法,能够降低计算量,进而提高计算速度。
本发明的另一目的在于提供了加密和签名功能的RSA算法的实现装置,能够降低计算量,进而提高计算速度。
为达到上述目的,本发明的技术方案是这样实现的:
一种模乘运算的实现方法,包括:
A、接收输入的乘数x、y,模数n;其中,x和y的位数均为k,n的位数为j,j≤k,x、y和n均为正整数;
令n’=n<<t,y’=y<<t,t为正整数,<<表示左移;
B、计算s=(x×y’)mod n’,mod表示求模运算,包括:
B1、令s=0,i=k+t-1;
B2、计算s<<1+x×y’[i],得到计算结果s’,y’[i]表示y’的第i位的取值;
B3、计算s’mod n’,得到计算结果s”;
B4、令s=s”,如果i等于0,则执行步骤C;否则,令i=i-1,并返回执行步骤B2;
C、令s”’=s>>t,将s”’作为模乘运算的结果输出。
一种模乘运算的实现方法,包括:
A、接收输入的乘数x、y,模数n;其中,x、y和n的位数均为k,且x、 y和n均为正整数;
令n’=n<<t,y’=y<<t,t为正整数,<<表示左移,并且,k和t均需要能够被正整数k1整除;
B、计算s=(x×y’)mod n’,mod表示求模运算,包括:
B1、令s=0,i=k/k1+t/k1-1;
B2、计算s<<k1+x×y’[(i+1)×k1-1∶i×k1],得到计算结果s’,y’[(i+1)×k1-1∶i×k1]表示y’的第(i+1)×k1-1位到第i×k1位中的每位的取值;
B3、计算s’mod n’,得到计算结果s”;
B4、令s=s”,如果i等于0,则执行步骤C;否则,令i=i-1,并返回执行步骤B2;
C、令s”’=s>>t,将s”’作为模乘运算的结果输出。
一种模乘运算的实现装置,包括:
第一处理单元,用于接收输入的乘数x、y,模数n,其中,x和y的位数均为k,n的位数为j,j≤k,x、y和n均为正整数;令n’=n<<t,y’=y<<t,t为正整数,<<表示左移;令s=0,i=k+t-1;
第二处理单元,用于计算s<<1+x×y’[i],得到计算结果s’,y’[i]表示y’的第i位的取值;计算s’mod n’,得到计算结果s”,mod表示求模运算;令s=s”,如果i等于0,则令s”’=s>>t,将s”’作为模乘运算的结果输出,否则,令i=i-1,并重复执行自身功能。
一种模乘运算的实现装置,包括:
第一处理单元,用于接收输入的乘数x、y,模数n,其中,x、y和n的位数均为k,且x、y和n均为正整数;令n’=n<<t,y’=y<<t,t为正整数,<<表示左移,并且,k和t均需要能够被正整数k1整除;令s=0,i=k/k1+t/k1-1;
第二处理单元,用于计算s<<k1+x×y’[(i+1)×k1-1∶i×k1],得到计算结果s’,y’[(i+1)×k1-1∶i×k1]表示y’的第(i+1)×k1-1位到第i×k1位中的每位的取值;计算s’mod n’,得到计算结果s”,mod表示求模运算;令s=s”,如果i等于0,则令s”’=s>>t,将s”’作为模乘运算的结果输出;否则,令i=i-1,并重复执行 自身功能。
本发明所述方案中,当未采用高基形式时,x、y均为k位正整数,s、n’均约为k+t位正整数,因此将有:s<<1+x×y’[i]<2n’+2k≈2n’(2k远小于n’),相应地,在每次计算s’mod n’时,只需进行约1次减法运算即可,而现有未采用高基形式的移位-加算法中,x、y、s、n均为k位正整数,因此将有:s<<1+x×y[i]<2n+2k<4n,相应地,在每次计算s’mod n时,最多将需要进行3次减法运算;另外,本发明所述方案中,当采用高基形式后,x、y均为k位正整数,s、n’均为k+t位正整数,因此将有:s<<k1+x×y’[(i+1)×k1-1∶i×k1]<2k1×n’+2k×2k1≈2k1×n’(2k远小于n’),而现有采用高基形式的移位-加算法中,x、y、n、s均为k位正整数,因此将有:s<<k1+x×y[(i+1)×k1-1∶i×k1]<2k1×n+2k×2k1<3×2k1×n,显然,在计算s’mod n’时所需的减法运算更少。总之,本发明所述方案能够较好地降低计算量,进而提高计算速度。
附图说明
图1为本发明方法第一实施例的流程图。
图2为本发明方法第二实施例的流程图。
图3为本发明装置实施例的组成结构示意图。
具体实施方式
针对现有技术中存在的问题,本发明中提出一种改进的模乘运算的实现方案,通过将模数增大等,来达到降低计算量,进而提高计算速度的目的。
为使本发明的技术方案更加清楚、明白,以下参照附图并举实施例,对本发明所述方案作进一步地详细说明。
图1为本发明方法第一实施例的流程图。如图1所示,包括以下步骤:
步骤11:接收输入的乘数x、y,模数n;并令n’=n<<t,y’=y<<t。
其中,x、y和n的位数均为k,或x和y的位数为k,n的位数为j,j<k,j略小于k,x、y和n均为正整数。
另外,t也为正整数,<<表示左移。
步骤12:令s=0,i=k+t-1。
步骤13:计算s<<1+x×y’[i],得到计算结果s’。
y’[i]表示y’的第i位的取值。
步骤14:计算s’mod n’,得到计算结果s”。
mod表示求模运算。
本步骤中的求模运算需要尽量选择逻辑简单的算法,比如:
1)令a为s’的高h位,b为n’的高h位;
h为正整数,取值通常较小,比如可为4或5;
2)将a和b进行比较,如果a>b,则计算s”=s’-n’,并令s’=s”,然后返回执行步骤1),否则,输出s”。
由于步骤13中得到的s’的高位和x、y’的关系很小,因此,本步骤中的求模运算可以看成由比较(即估商)和减法两部分组成,其中比较部分只与s’和n’的高位有关,相应地,可采用二级流水线结构,即将s”的高位计算提前一个时钟周期,并为其它位计算提供比较结果。
具体来说,第一级流水线进行a和b的比较以及s”的高h位的计算,第二级流水线进行s”的除高h位以外的其它位的计算。
另外,由于第一级流水线涉及到的操作的位数比较短,因此可采用非冗余结构的普通加法实现;而第二级流水线涉及到的操作的位数比较长,因此可采用冗余结构的加法,如保留进位加法器(CSA,Carry Save Adder)加法。
步骤15:令s=s”,并确定i是否等于0,如果是,则执行步骤16;否则,执行步骤17。
步骤16:令s”’=s>>t,将s”’作为模乘运算的结果输出,结束流程。
步骤17:令i=i-1,并返回执行步骤13。
步骤12~15用于完成s=(x×y’)mod n’的计算,可以看出,s=(x×2ty)mod 2tn,所以有s/2t=(x×y)mod n,即算法是正确的。
上述实施例中,参数t的选择至关重要,将直接影响算法实现的效率。本发 明所述方案中,2k需要远小于n’(n’约为2k+t),那么t的取值将不能过小;另外,如前所述,求模运算通常由估商和减法两部分组成,估商是使用除数与被除数的前几位对商进行估计,而不是使用所有位来对商进行计算,由于s’和n’均约为k+t位,而x和y均为k位,因此在计算s’时,加法运算相对于移位运算对总和的影响将很小,基本上只会影响s’的低k位,高t位可以较早得预测出来,因此t的选择也影响着估商的能力;和现有移位-加算法相比,本发明所述方案需要额外的t个循环周期,因此t的取值不能过大。
实验显示,如果x、y和n的位数均为k,较佳地,t的取值需要满足以下条件:大于log2k、大于h,且小于k;如果x和y的位数为k,n的位数为j,j<k,则较佳地,t的取值需要满足以下条件:大于log2k+(k-j)、大于h+(k-j),且小于k。
虽然图1所示实施例中增加了t个循环周期,但由于t通常远小于k,因此并不会因此而增加多少计算量。
图2为本发明方法第二实施例的流程图。与图1所示实施例相比,本实施例中采用了高基形式,每次计算多位的乘法。如图2所示,包括以下步骤:
步骤21:接收输入的乘数x、y,模数n;并令n’=n<<t,y’=y<<t;并且,k和t均需要能够被k1整除。
其中,x、y和n的位数均为k,且x、y和n均为正整数;t和k1也为正整数,<<表示左移。
步骤22:令s=0,i=k/k1+t/k1-1。
步骤23:计算s<<k1+x×y’[(i+1)×k1-1∶i×k1],得到计算结果s’。
y’[(i+1)×k1-1∶i×k1]表示y’的第(i+1)×k1-1位到第i×k1位中的每位的取值。
步骤24:计算s’mod n’,得到计算结果s”。
步骤25:令s=s”,并确定i是否等于0,如果是,则执行步骤26;否则,执行步骤27。
步骤26:令s”’=s>>t,将s”’作为模乘运算的结果输出,结束流程。
步骤27:令i=i-1,并返回执行步骤23。
至此,即完成了关于本发明方法实施例的介绍。
基于上述方法,图3为本发明装置实施例的组成结构示意图。如图3所示,包括:
第一处理单元31,用于接收输入的乘数x、y,模数n,其中,x和y的位数均为k,n的位数为j,j≤k,x、y和n均为正整数;令n’=n<<t,y’=y<<t,t为正整数,<<表示左移;令s=0,i=k+t-1;
第二处理单元32,用于计算s<<1+x×y’[i],得到计算结果s’,y’[i]表示y’的第i位的取值;计算s’mod n’,得到计算结果s”,mod表示求模运算;令s=s”,如果i等于0,则令s”’=s>>t,将s”’作为模乘运算的结果输出,否则,令i=i-1,并重复执行自身功能。
或者,
第一处理单元31,用于接收输入的乘数x、y,模数n,其中,x、y和n的位数均为k,且x、y和n均为正整数;令n’=n<<t,y’=y<<t,t为正整数,<<表示左移,并且,k和t均需要能够被正整数k1整除;令s=0,i=k/k1+t/k1-1;
第二处理单元32,用于计算s<<k1+x×y’[(i+1)×k1-1∶i×k1],得到计算结果s’,y’[(i+1)×k1-1∶i×k1]表示y’的第(i+1)×k1-1位到第i×k1位中的每位的取值;计算s’mod n’,得到计算结果s”,mod表示求模运算;令s=s”,如果i等于0,则令s”’=s>>t,将s”’作为模乘运算的结果输出;否则,令i=i-1,并重复执行自身功能。
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明保护的范围之内。