1、 公钥密码 RSA 加解密体制中的数论和快速算法(武汉工业学院 数理科学系 陈欣 )关键字:单向函数与严格单向函数 公钥与私钥 欧拉定理 素性判别 大数分解 模算术内容摘要:传统的密码体制,收发双方有相同的加密密钥和解秘密钥,如 DES,3-DES,AES 等。而且加密密钥和解密密钥都是相同的。这就给密钥的分配和管理带来了很大的难度。公钥密码体制的好处有两点。第一,加密密钥和解密密钥分开,加密密钥可以公开,而解密密钥是严格保密。第二,这一密码体制可以用来进行数字签名认证。本文重点介绍 RSA 公钥密码体制的理论基础、算法流程以及相关算法的软件实现。正文:一、公钥密码算法体制 RSA基本数论知识
2、定义 1:一个数论函数 称作严格单向函数,如果它满足以下条件:()fn存在一个有效的方法,对所有 , 是容易计算的N()yfn方程 在 中有解,但是由 计算 是困难的。()yf N定理 1:任意一个正整数 ,总可以分解为 ,其中 是 的所n12sp 12,sp n有的素因子, 是正整数。11,s有几个单向函数,人们长期以来无法证明其不是严格的单向函数。但是从另一方面讲,也增加了他们是的可能性2。目前人们就把他们当作是严格单向函数使用,大素数相乘就是其中之一。求大素数的乘积是一件很容易的事,可是将一个合数分解成大素数的乘积就不是一件容易的事情了。特别是当素数的规模在 1024 位及以上时( 2
3、进制) 。这样可以认为它是一个严格单向函数,这是数学上一个著名的难题- 大整数分解难题(IFP) 。关于大整数分解问题的困难性,可以参见2。著名的 RSA 密码算法体制的安全性就基于此。定义 2: , 在 中与 互素的元素个数记作 。称 为欧拉函数。nN1,2n ()n()定理 2: , ,其中 是 的所有的素因子,,12sp 12,sp是正整数。则 = 。11,s ()n1()sii定理 3:若整数 互素。则 。特别的。当 是素数,则当 时,,an()1mod)np(,)1ap有 ,此特殊形式称之为费马小定理。11(mod)p定理 4:若 ,则同余方程 有唯一的解 。1,()axmodRSA
4、 密码体制简介RSA 密码体制采用下述加解密变换:为方便起见,我们约定 Alice 为明文消息发送方,Bob 为密文接受者。步骤 1:Bob 选取两个大素数 (严格保密) 。,pq步骤 2:Bob 计算 (公开) ,由定理 2 可知 (保密)n ()1()npq步骤 3:Bob 选取随机整数 ,满足 (公开)e(,Gcde步骤 4:Bob 计算 ,满足 ,由定理 4 可知 存在且唯一 (保密)d1mo)dmodp步骤 5:将加密信息及明文数字化记为 ,记 为加密后的密文。MC加密: Bob 将 公开。Alice 用 Bob 的公钥 加密明文 ,得到密文,ne,neM。并且将密文 发给 Bob
5、(od)C解密: Bob 接到 Alice 发过来的密文 ,用自己的私钥 解密。得到明文d(m)dMn下面证明解密过程是正确的:由于 。设 。这样对任何 ,一定有1o()ed()1,ekZ()mn。()knm接下来分两种情况进行处理:如果 :(,)1则由定理 3, ,故 。()mod)n()1mod)dekn如果 :(,由于 ,故 ,则不妨设 ,则 。npq(,),)npq(,),0nplq(,)1m由定理 3, ,这样对任何 ,总有 ,则由欧拉函数的性()1odmk()1od)kqm质得到 ,由此 。这样一定存在整数 ,使()1odknh,从而 。 。()1knmhq()1knmhqlpmn
6、l()1mod)dekn二、RSA 算法中的快速的模运算算法在本文第一部分中,我们通过详细介绍 RSA 公钥密码体制,发现数论是其主要理论基础。当然学过数论的读者,当然不会对本文中的一些数论相关的理论感到陌生。事实上,我们考虑的是,其中相关的算法如何实现。我们都知道,现在的电脑处理大整数的能力是远远不能满足 RSA 的需要的。因为从现在的安全角度来讲,RSA 算法中初始的大素数起码要是 1024 位(2 进制)的,而现在电脑处理的整数最多不超过 64 位(换算成十,pq进制数仅仅只有 ) 。我们在这里假定读者已经实现了大整数的基本四则运算。事实上,641关于这一点,读者有多种选择:既可以使用国
7、际上现行流行的免费大整数库例如 GNU MP(http:/ RSA 是远远不够的。因为 RSA 基本加解密的流程主要是模算术。在 RSA 加解密变换的 5 个步骤中。仍然有以下一些算法(重点是模算术)上的问题我们要单独拿出来分析。素数的判别与生成在 RSA 密码体制采用加解密变换的步骤 1 中,如何选择合适的大素数一直是 RSA 的焦点所在。我们接下来介绍几种常见的素数判定方法。俄拉多塞筛法(试除法)定理 5:如果 是合数,则 必能被一个不大于 的素数所整除。3nNnn这样对于 ,要判别是不是素数,只要用不大于 的所有素数去试除 ,只要有一n个能整除,则 是合数。否则 是素数。用传统的素数筛选
8、方法检测一个随机数 是否为素数首先需要获得所有小于 的素数,当 很大时,要获得所有小于 的素数就是一n件困难的事。并且以下的定理告诉我们,用这样的方法去计算的时候计算量是很大的,特别是在 很大的情况下。n定理 6:用试除法判定给定的整数 是否素数其计算量是 312(log)On目前对于大数的素性测试,通常都采用MillerRabin测试法。这是美国国家标准和技术研究所(NIST)在数字签名标准(DSS)建议中推荐使用的算法。MillerRabin(测试法)首先选择一个待测的正奇数 ,计算 , 是2整除 的最大pr1p次数,然后计算 ,使得 ,显然此时 是奇数。此算法的基本思想如下:m12rpm
9、步骤1:选择一个小于 的随机数 ;a步骤2:设 10,odjz步骤3:如果 ,那么 通过了测试,可能是素数;p步骤4:否则继续:对 ,计算 ,sr21modszp如果 ,停止。那么 通过了测试,可能是素数;1modsz如果 ,则停止。返回 是合数,()sps步骤5:如果 都不是 ,则返回 是合数121,rz p步骤 6: 通过了测试,可能是素数;p可以证明,进行一次MillerRabin测试,将合数误判为素数的概率仅是 。2我14们可以选取不同的随机数 重复进行此判别比如10次,这样一来如果在10次判别后仍然没a有返回“合数” ,则可以将 当成概率素数,并且误判率不会高于 。 p 10()大整
10、数的分解破解 RSA 实际上就等同于对大整数 进行分解。事实上我们有下面的定理。n定理 7:设 ,则计算 与分解 是等价的。3npq()对大数分解的困难就保证了 RSA 加密体制的安全性。为了实际上的安全考虑,我们选取的大素数应该至少是 155 位到 200 位的素数,以抵御现行的分解大整数的能力。1977 年,当里凡斯特等人提出 RSA 加密体制的时候,他们给出了一个例子。 是 64 位的素数,p是 65 位的素数, 是 130 位的素数。在当时分解这样的素数简直就是一项不可能qnpq的事。但是随着计算机的运算能力的不断加强,在 1996 年 4 月。人们已经可以成功分解出一个 130 位的
11、 RSA 数。并且在现在为止,随着连分数法、二次筛法、数域筛法的相继出现,人们掌握的整数分解办法已经可以成功地分解出 155 位的十进制数。所以现在 RSA 数的选择必须要更大一些。相关模运算a. 求最大公约数(Gcd)在 RSA 加密流程的步骤 3 中,要求两个数的最大公约数(Gcd)。我们采用 stein 算法,其理论基础由如下定理给出:定理 8:对于正整数 ,则对任意整数 , 4,abk(,),)abk定理 9:对于正整数 ,则 421m2流程如下:输入:正整数 ,ab输出: ()dGc步骤 1:令正整数 0p步骤 2:若 都是偶数。则,ab,12abp步骤 3:若 仍是偶数。转到步骤
12、2步骤 4:若 是偶数, 是奇数。则 a步骤 5:若 仍是偶数,则转到步骤 4a步骤 6:若 是偶数, 是奇数。则b2b步骤 7:若 仍是偶数,则转到步骤 6步骤 8:若 都不是偶数。则,a,tmpatpb步骤 9:若 ,转到步骤 20b步骤 10: pd步骤 11:输出 (,)Gcab比起传统的 Eculid5求 Gcd,Stein 算法没有用除法,始终都在作加减和移位运算。因为在计算机中,乘以 2 或者处以 2 都是用左移和右移来实现的,这就极大加快了运算的速度。b扩展 Eculid 算法求模逆元在 RSA 加密流程的步骤 4 中,要用到计算 ,满足 。这就是我们所d1mod()en说的求
13、模逆的运算。我们采用扩展 Eculid 算法求 的解。算法流程如下:(axb输入:正整数 ,ab输出: 或者 不存在的信息11步骤 1:如果 ,返回 不存在(,)1ab1a步骤 2: 31231230,)(,)(,0),)(0,1)txbya步骤 3:计算 3qy步骤 4:1212333(,)(,),txqyxyt步骤 5:回到步骤 2,直到 ,返回3y1a2y算法分析:其理论基础是 Eculid 辗转相除法。1我们用数学归纳法来证明算法的正确性:首先,我们证明在以上算法流程中,每一次循环体内均有下面等式成立:123123123,btatxbya()第一轮的初值可以验证成立。假设 轮候等式仍成
14、立,则考虑第 轮的赋值(打 好表n1n示新一轮的值) 。利用归纳假设可以知道:1212133()()txqyxybabat1212xyx3batty故 论是仍然成立,上述 中的三个等式得证。n()其次,每新一轮的 被赋值 ,这样辗转下去, 必然下降到3(,xy 33,)xy3y初始值的最大公约数 。所以当循环结束时,根据等式 ,此时的 即为所求。1123ba2C模幂算法在 RSA 加密流程的步骤 5 中,无论是加密还是解密,都用到了计算 这样的modECMn同余式。我们介绍一种快速的算法:输入: ,这里 采用的是 2 进制的表示10,2,0,1kiiiMEeE输出: modCn算法流程:步骤
15、1:如果 则 ,否则1,ke1C步骤 2: 从 ,重复执行i202.1 *(od)Cn2.2 如果 ,则1e*(mod)Mn步骤 3: 返回 E算法流程中 2.1 这一步,可采用特殊的平方乘算法。读者可参阅5()Cd.模乘算法在这里我们介绍一种快速的模乘即是著名的 Montgomery 模乘。1985 年,Peter L.Montgomery 提出 Montgomery 算法,后进过多次改进。算法思想如下:给定一个 比特正整数 (模)和两个 比特级操作数 ,其中 ,nMn,XY0,YM模乘就是计算 。(mod)DXY我们记110,00,12eieiiBBforie100, ,eiiiiiXxY
16、yxfi 其中 , , 是字长通常取 32 或者 64。对于 RSA,一般 取 1024 或者2wBn n2048。算法流程:输入: 。其中 为模,,XYMR 12,nRM输出: 1mod步骤 1: T步骤 2: S步骤 3: ()UR步骤 4:若 ,则返回 ,否则返回UMU最后 。其中对121mod(od)(m)(odXYRMR事先做一个预处理即可。上述算法可知,Montgomery 模乘不需要用到除法或2R者求逆,因为 ,模 实际上就是取其最低 位,而除 就是将其右移 位,这无论2n nn是在硬件还是软件都是很容易实现的。参考文献:1 华罗庚 数论导引科学出版社 1957 2 Bruce
17、Schneier应用密码学、协议与源程序机械工业出版社3 柯召 孙琦 数论讲义高等教育出版社 第二版 2001 年4 潘承洞 潘承彪初等数论北京大学出版社 19985 Paul Garrett 著密码学导引机械工业出版社 20036 Peter L.Montgomery. Modular Multiplication Without Trial Division.MatheMatica of Computation,1985,44(170):519-521 Abstract: In the traditional cryptography , the management and alloca
18、tion of key became very inconvenient. Cryptography which develop s gradually in the struggle between coding and decoding ,has became an all-around and outlying technology, with the progress of application of advanced science and technology.This thesis consist of two parts as follows:In part 1,we introduce the fundamental theory and mathematical base of RSA.In part 2,we give some efficient algorithms of modular operation.