用于rsa密码的蒙哥马利阶梯算法
【技术领域】
[0001]本发明涉及密码学领域,特别是涉及一种用于RSA密码的蒙哥马利阶梯算法。
【背景技术】
[0002]目前,蒙哥马利算法是计算RSA密码模密运算gkmodN的常用方法,其步骤如下:
[0003]步骤I,求 k” 满足 k=^^^1+...+k。,其中 ki=0 或 I,且 V1 Φ O;
[0004]步骤2,R[0] = 1,R[l] = g;
[0005]步骤3,i从m-Ι到O循环:
[0006]步骤3.1,如果 Iii=O,
[0007]那么R[2] = (R[O])2mod N, R[1] = (R[0].R[l])mod N;
[0008]步骤3.2,如果 Iii=I,
[0009]那么R[2] = (R[0].R[l])mod N, R[l] = (R[l])2mod N;
[0010]步骤3.3,R[0] =R[2];
[0011]步骤4,输出 R[0]。
[0012]以上方法的不足在于:它对于k的每一比特,需要计算两次模(mod)运算。而模运算相对于整数运算更耗时。
【发明内容】
[0013]本发明要解决的技术问题是提供一种用于RSA密码的蒙哥马利阶梯算法,能够提高现有蒙哥马利阶梯算法的计算速度,从而加快RSA密码的运算效率。
[0014]为解决上述技术问题,本发明用于RSA密码的蒙哥马利阶梯算法,包括如下步骤:
[0015]步骤I,求 Iii,满足 k = K1+-+k0,其中 Iii=O, I, 2 或 3,且 Iv1 古 O ;
[0016]步骤2, R[0]=1, R[l]=g ;
[0017]步骤3, i从n-Ι到O循环:
[0018]步骤3.1,如果 Iii=O,那么 tmp[0] = (R[0])2,tmp[l]=R[0].R[l],
[0019]R[2] = (tmp [O])2mod N, R[l] = (tmp [0].tmp[l])mod N;
[0020]步骤3.2,如果 Iii = I,那么 tmp[0] = (R[0])2,tmp[l]=R[0].R[l],
[0021]R[2] = (tmp [0].tmp [I])mod N, R[l] = (tmp [I])2mod N;
[0022]步骤3.3,如果 ki=2,那么 tmp[0]=R[0].R[l],tmp [I] = (R[l])2,
[0023]R[2] = (tmp [0])2mod N, R[l] = (tmp [0].tmp [I])mod N;
[0024]步骤3.4,如果 ki=3,那么 tmp[0]=R[0].R[l], tmp[l] = (R[ll)2,
[0025]R[2] = (tmp [0].tmp [I])mod N, R[l] = (tmp [I])2mod N;
[0026]步骤3.5,R[0] =R[2];
[0027]步骤4,输出 R[0]。
[0028]其中,(R[0])2,R[0] *R[1], (R[l])2是整数运算。指数k表示成4进制。
[0029]本发明给出了一个新的蒙哥马利阶梯算法来计算RSA密码中的核心运算一模密,由于整数乘法和整数平方运算比模乘和模平方更快,从而使得对于k的每一比特,由原来的两次模运算降为一次模运算。因此,这种新算法比现有蒙哥马利阶梯算法具有更快的速度。
【附图说明】
[0030] 下面结合附图与【具体实施方式】对本发明作进一步详细的说明:
[0031 ] 附图是在模密运算过程中使用本发明的流程图。
【具体实施方式】
[0032]结合附图所示,该附图是在模密运算过程中使用所述用于RSA密码的蒙哥马利阶梯算法的流程图,具体步骤如下:
[0033]步骤I,输入 I^Pg;
[0034]步骤2,计算Iii ;
[0035]步骤3, R[0] = I, R[l] = g, i=n_l ;
[0036]步骤4,判断i >= 0?,如果等于0,则输出R[0];否则,执行步骤5 ;
[0037]步骤5,判断Iii = 0?,如果等于0,则
[0038]tmp [O] = (R[0])2,tmp [I] =R[0].R[l],R[2] = (tmp [O]) 2mod N,
[0039]R[l] = (tmp[0].tmp [I])mod N ;然后转移到步骤9 ;否则,执行步骤6 ;
[0040]步骤6,判断Iii = 1?,如果等于0,则
[0041]tmp [O] = (R[0])2,
[0042]tmp[l]=R[0].R[l],
[0043]R[2] = (tmp [0].tmp [I])mod N, R[l] = (tmp [I])2mod N ;然后转移到步骤 9 ;否则,执行步骤7。
[0044]步骤7,判断ki = 2?,如果等于2,则
[0045]tmp [O] =R [O].R [I],
[0046]tmp[l] = (R[l])2,
[0047]R [2] = (tmp [O]) 2mod N,
[0048]R[l] = (tmp[0].tmp [I])mod N,然后转移到步骤9 ;否则执行步骤8。
[0049]步骤8,判断Iii = 3?,如果等于3,则
[0050]tmp [O] =R [O].R [I],
[0051]tmp[l] = (R[l])2,
[0052]R[2] = (tmp [O].tmp [I])mod N, R[l] = (tmp [I])2mod N,然后执行步骤 9。
[0053]步骤9,i — 1-1,然后转移至步骤4。
[0054]下面,进一步说明本发明的具体实施细节。
[0055]取
[0056]N=784410365147213935350089762751323617722372938355044611589082401619987455035339988869243105392675823257766114591824936048827969994090939919191244086979078924291748435474742040404576498121005811242486740703173307569951195524070084347706556814643109340793974332538384795118980904109540836272238798f606l00l££ZLZf9Z8nf6Z9L9Z0n900f899Z99LlLZ8890Z9Z0£0f9LLZ99fLf6£09f0Z69l£f9L9lLL£09l9f69989£niL08f9l8999ZZ8l999LZL£0Ll09Ll£99f9f99LlZLZZ8£9l06Z£lZffL96£8n99£009L8996n999fZ£9f969l9f6££08lZZ6l8l8Z9Z9L09ff0n89Z8968969fZ0£0Z£££l9L£Z8Z0ZZ988996U0f09fff68669£999f9L96066£98£LfZ90lZn£^[0]^m [^900]
糊 O=T _
[9900] ^9C8^8CT6T0^6TT99
£ZL8LZf8LZ8fZ£9£8n0L£0Z9899880£f88LfZ89f9LL£0L9£9l£99lL09lLZ0fZ£809UL96lZ6Zl£0L9n9L68lL0fLl908f0fU9Z£Z99f9£l9ZLfZZ60ZfLZ8lf99lL6£89fL9Z6ZZZLZ966£66L80lZ0Z9Z8lZ8f60909LZ69f6ff9lf6f00lf999996L966f9LZU£££ZL960Z8LZ£9ULZZ£9ZZ0L9U9Z89l0£lL0£6Z96££6f06Zlf6n88989989L8Z0£0lf8ZZLl9lf96f9£Zf^[l])i
[9900]
L8£lfL0Z60lZ9ff9l£9L909l6£l99inLZ0£f6££060£nni9l0f998800fU9066l6L9f99£ZL86f9£9L8f6Z9£L9ZfL88899lL9609ZL6£l86fL6986l9f0fZ09LZ980£9L0LZ9l6£ZZlfZ09nZlLLZ98££0£9f80L9LL9ZLffZ0l0L8LU968l£l9Z9LfLOflf9699906L09961Z9L£891Z90988£99T9S^ZT68ZTSC6998T0ZTS896SZCC^8C688C^S8TT8^6^Z6C^000C^6098SS=[C]H [1^900]
6 ^zzm Lm
£lfL0Z60lZ9ff9l£9L909l6£l99inLZ0£f6££060£nfU9l0f998800fU9066l6L9f99£ZL86f9£9L8f6Z9£L9ZfL88899lL9609ZL6£l86fL6986l9f0fZ09LZ9