RSA算法RSAAlgorithm概况MIT三位年青数学家R.L.Rivest,A.Shamir和L.Adleman[Rivest等1978,1979]发现了一种用数论构造双钥的方法,称作MIT体制,后来被广泛称之为RSA体制。它既可用于加密、又可用于数字签字。RSA算法的安全性基于数论中大整数分解的困难性。迄今为止理论上最为成熟完善的公钥密码体制,该体制已得到广泛的应用。算法原理RSA算法使用了乘方运算。要求:明文M经过加密得到密文C:C=Memodn密文C经过解密得到明文M:Cdmodn=(Memodn)dmodn=Medmodn=M即:必须存在e,d,n,使Medmodn=M成立如何确定e,d,n确定n:独立地选取两大素数p和q(各100~200位十进制数字)计算n=p×q,其欧拉函数值(n)=(p-1)(q-1)确定e:随机选一整数e,1e(n),gcd((n),e)=1确定d:根据ed=1mod(n)在模(n)下,计算d这样确定的e,d,n是否能使Medmodn=M成立呢?因为ed=1mod(n)即ed=k(n)+1所以:Med=Mk(n)+1如果M和n互素,即gcd(M,n)=1那么,根据欧拉定理(如果gcd(a,n)=1,则aФ(n)≡1modn):有:M(n)≡1modn所以:Med≡Mk(n)+1≡M[M(n)]kmodn≡M[1]kmodn≡Mmodn如果M和n不互素,即gcd(M,n)≠1,即M和n有大于1的公约数。因为n=pq,而p、q都是素数,不可再分解,所以M一定包含了p或q为因子。又因为Mn,所以M不可能既是p的倍数又是q的倍数。不妨设M是p的倍数,M=cp。由于M不是q的倍数,所以gcd(M,q)=1,则M(q)≡1modq,所以:[M(q)](p)≡1modq即M(n)≡1modn,即M(n)=1+kqM(n)=1+kq两边同乘以M=cp,则:M(n)+1=M+kqcp=M+kcn把kc看作一个常数,则:M(n)+1=M+tn即:M(n)+1≡Mmodn,即M(n)≡1modn因为ed=1mod(n),所以:Med≡Mk(n)+1≡M[M(n)]kmodn≡M[1]kmodn≡Mmodn综上,这样的e,d,n可以实现加密C=Memodn和解密M=Cdmodn密钥以n,e为公钥。秘密钥为d。(p,q不再需要,可以销毁。)RSA算法在计算上的可行性加密和解密无论是加密还是解密都需要计算某个整数的模n整数次幂,即C=Memodn、M=Cdmodn。但不需要先求出整数的幂再对n取模,而可利用模运算的性质:(amodn)*(bmodn)=(a*b)modn对于Memodn,可先求出M1modn,M2modn,M4modn……,再求MemodnRSA算法在计算上的可行性产生密钥由于n是公开的,为了避免攻击者用穷举法求出p和q(根据n=pq),应该从足够大的集合中选取p和q,即p和q必须是大素数。目前还没有有效的方法可以产生任意大素数,通常使用的方法是:随机挑选一个期望大小的奇数,然后测试它是否是素数,若不是,则挑选下一个随机数直至检测到素数为止。素性检验引理:如果p为大于2的素数,则方程x2≡1modp的解只有和x≡1和x≡-1证明:x2≡1modpx2-1≡0modp(x+1)(x-1)≡0modp所以,p|(x+1)或p|(x-1)或p|(x+1)且p|(x-1)存在k,j,x+1=kp,x-1=jp2=(k-j)p,这是不可能的。引理的逆命题:若方程x2≡1modp有唯一解x不为+1或-1,p不是素数素性检验Miller-Rabin素性概率检测法n为待检测数,a为小于n的整数,将n-1表示为二进制形式bkbk-1…b0,d赋初值为1,算法核心如下fori=kdownto0do{xd;d(d×d)modn;ifd=1and(x≠1)and(x≠n-1)thenreturnFalseifbi=1thed(d×a)modn}ifd≠1thenreturnFalse;returnTrue若返回False,n不是素数,若返回True,有可能是素数。素性检测For循环结束,有d≡an-1modn.由费尔玛定理,若n为素数,d为1.所以d≠1,则d不是素数n-1≡-1modn,所以x≠1和x≠n-1指x2≡1modn有非±1的根,n不是素数该算法对s个不同的a,重复调用,如果每次都返回true,则n是素数的概率大于等于1-2-sMiller-Rabin算法可以确定一个整数是合数,但不能确定其一定是素数。要找到一个2200左右的素数,在找到素数之前大约要进行ln(2200)/2=70次尝试在N附近平均每隔lnN个整数就会有一个素数。RSA算法在计算上的可行性确定d和e有了p和q,可计算出(n)=(p-1)(q-1)根据gcd((n),e)=1来选择e,这一步计算量也不大,因为两个随机数互素的概率约为0.6有了e,再计算d=e-1mod(n),这里用的是扩展的Euclid算法。①选两个保密的大素数p和q。②计算n=p×q,φ(n)=(p-1)(q-1),其中φ(n)是n的欧拉函数值。③选一整数e,满足1eφ(n),且gcd(φ(n),e)=1。④计算d,满足d·e≡1modφ(n),即d是e在模φ(n)下的乘法逆元,因e与φ(n)互素,由模运算可知,它的乘法逆元一定存在。⑤以{e,n}为公开钥,{d,n}为秘密钥。算法描述选p=7,q=17。求n=p×q=119,φ(n)=(p-1)(q-1)=96。取e=5,满足1eφ(n),且gcd(φ(n),e)=1。确定满足d·e=1mod96且小于96的d,因为77×5=385=4×96+1,所以d为77。因此公开钥为{5,119},秘密钥为{77,119}。设明文m=19,则由加密过程得密文为C=195mod119≡2476099mod119=66解密为6677mod119=19RSA的安全性RSA的安全性是基于分解大整数的困难性假定如果分解n=p×q,则立即获得(n)=(p-1)(q-1),从而能够确定e的模(n)乘法逆dRSA-129历时8个月(曾经预言需要4*1016年)被于1996年4月被成功分解,RSA-130于1996年4月被成功分解密钥长度应该介于1024bit到2048bit之间由n直接求(n)等价于分解nRSA-129的故事鹗鸟(ossifrage),又名髭兀鹰(lammergeier),是阿尔卑斯山上一种稀有的肉食秃鹰。它的翅膀展开将近十米宽。鸟名的字面含义是“碎骨”。顾名思义,其习性令人毛骨悚然。MirtinGardner在1977年“ScientificAmerican”的专栏文章中介绍了RSA码。为了显示这一技术的威力,RSA公司的研究人员用一个129位的数N和一个4位数e对这个关于秃鹰的消息作了编码。Gardner刊登了那个密文,同时给出了N和e。RSA公司还悬赏100美元,奖给第一个破译这密码的人。96869613754622061477140922254355882905759991124574319874695120930816298225145708356931476622883989628013391990551829945157815154一批松散组成的因子分解迷,大约有六百多人,分布在二十几个国家。他们经过八个月的努力最后于1994年4月为RSA-129找到了64位数和65位数两个素数因子。114381625757888867669235779976146612010218296721242362562561842935706935245733897830597123563958705058989075147599290026879543541=3490529510847650949147849619903898133417764638493387843990820577*32769132993266709549961988190834461413177642967992942539798288533“Themagicwordsaresqueamishossifrage”来自两个方面的威胁人类计算能力的不断提高分解算法的进一步改进。分解算法过去都采用二次筛法,如对RSA-129的分解。而对RSA-130的分解则采用了一个新算法,称为推广的数域筛法,该算法在分解RSA130时所做的计算仅比分解RSA-129多10%。将来也可能还有更好的分解算法,因此在使用RSA算法时对其密钥的选取要特别注意其大小。估计在未来一段比较长的时期,密钥长度介于1024比特至2048比特之间的RSA是安全的。几个建议为了防止可以很容易地分解n,RSA算法的发明者建议p和q还应满足下列限制条件:P和q的长度应仅相差几位。对于1024位的密钥而言,p和q都应在1075到10100之间。(p-1)和(q-1)都应有一个大的素因子。Gcd(p-1,q-1)应该较小。其它公钥密码算法ElGamal密码ElGamal密码是由ElGamal于1985年提出。该密码系统可应用于加/解密、数字签名等,其安全性是建立于离散对数(discretelogarithm)问题之上的,即给定g,p与y=gxmodp,求x在计算上不可行。椭圆曲线密码体制(ECC)椭圆曲线在密码学中的使用是在1985年由NealKoblitz和VictorMiller分别独立提出的。其依据就是定义在椭圆曲线点群上的离散对数问题的难解性。椭圆曲线在代数学和几何学上已经广泛研究了150多年之久,有丰富而深厚的理论积累。