1、Cd mod n=(Me mod n)d mod n=Med mod n=M即:必须存在e,d,n,使Med mod n=M成立,如何确定e,d,n,确定n:独立地选取两大素数p和q(各100200位十进制数字)计算 n=pq,其欧拉函数值(n)=(p1)(q1)确定e:随机选一整数e,1e(n),gcd(n),e)=1确定d:根据ed=1 mod(n)在模(n)下,计算d,这样确定的e,d,n是否能使Med mod n=M成立呢?,因为ed=1 mod(n)即ed=k(n)+1 所以:Med=Mk(n)+1如果M和n互素,即gcd(M,n)=1 那么,根据欧拉定理(如果gcd(a,n)=1,
2、则 a(n)1 mod n):有:M(n)1 mod n所以:Med Mk(n)+1 MM(n)kmod n M1kmod n M mod n,如果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)1 mod q,所以:M(q)(p)1 mod q 即M(n)1 mod n,即M(n)=1+kq,M(n)=1+kq两边同乘以M=cp,则:M(n)+1=M+kqcp=M+kcn
3、把kc看作一个常数,则:M(n)+1=M+tn即:M(n)+1 M mod n,即M(n)1 mod n因为ed=1 mod(n),所以:Med Mk(n)+1 MM(n)kmod n M1kmod n M mod n综上,这样的e,d,n可以实现加密C=Me mod n和解密M=Cd mod n,密钥,以n,e为公钥。秘密钥为d。(p,q不再需要,可以销毁。),RSA算法在计算上的可行性,加密和解密无论是加密还是解密都需要计算某个整数的模n整数次幂,即C=Me mod n、M=Cd mod n。但不需要先求出整数的幂再对n取模,而可利用模运算的性质:(a mod n)*(b mod n)=(
4、a*b)mod n对于Me mod n,可先求出M1 mod n,M2 mod n,M4 mod n,再求Me mod n,RSA算法在计算上的可行性,产生密钥由于n是公开的,为了避免攻击者用穷举法求出p和q(根据n=pq),应该从足够大的集合中选取p和q,即p和q必须是大素数。目前还没有有效的方法可以产生任意大素数,通常使用的方法是:随机挑选一个期望大小的奇数,然后测试它是否是素数,若不是,则挑选下一个随机数直至检测到素数为止。,素性检验,引理:如果p为大于2的素数,则方程x21 mod p的解只有和x1和x-1证明:x21 mod p x2-1 0 mod p(x+1)(x-1)0 mod
5、 p 所以,p|(x+1)或p|(x-1)或p|(x+1)且p|(x-1)存在k,j,x+1=kp,x-1=jp2=(k-j)p,这是不可能的。引理的逆命题:若方程x21 mod p有唯一解x不为+1或-1,p不是素数,素性检验,Miller-Rabin素性概率检测法n为待检测数,a为小于n的整数,将n-1表示为二进制形式bkbk-1b0,d赋初值为1,算法核心如下 for i=k downto 0 do xd;d(dd)mod n;if d=1 and(x1)and(xn-1)then return False if bi=1 the d(da)mod n if d 1 then retur
6、n False;return True若返回False,n不是素数,若返回True,有可能是素数。,素性检测,For循环结束,有dan-1 mod n.由费尔玛定理,若n为素数,d为1.所以d1,则d不是素数n-1-1 mod n,所以x 1和x n-1指x21 mod n 有非1的根,n不是素数该算法对s个不同的a,重复调用,如果每次都返回true,则n是素数的概率大于等于1-2-s,Miller-Rabin算法可以确定一个整数是合数,但不能确定其一定是素数。要找到一个2200左右的素数,在找到素数之前大约要进行ln(2200)/2=70次尝试在N附近平均每隔lnN个整数就会有一个素数。,R
7、SA算法在计算上的可行性,确定d和e有了p和q,可计算出(n)=(p1)(q1)根据gcd(n),e)=1来选择e,这一步计算量也不大,因为两个随机数互素的概率约为0.6有了e,再计算d=e-1 mod(n),这里用的是扩展的Euclid算法。,选两个保密的大素数p和q。计算n=pq,(n)=(p-1)(q-1),其中(n)是n的欧拉函数值。选一整数e,满足1e(n),且gcd(n),e)=1。计算d,满足de1 mod(n),即d是e在模(n)下的乘法逆元,因e与(n)互素,由模运算可知,它的乘法逆元一定存在。以e,n为公开钥,d,n为秘密钥。,算法描述,选p=7,q=17。求n=pq=11
8、9,(n)=(p-1)(q-1)=96。取e=5,满足1e(n),且gcd(n),e)=1。确定满足de=1 mod 96且小于96的d,因为775=385=496+1,所以d为77。因此公开钥为5,119,秘密钥为77,119。设明文m=19,则由加密过程得密文为C=195 mod 1192476099 mod 119=66解密为6677mod 119=19,RSA的安全性,RSA的安全性是基于分解大整数的困难性假定如果分解n=pq,则立即获得(n)=(p1)(q1),从而能够确定e的模(n)乘法逆dRSA-129历时8个月(曾经预言需要4*1016年)被于1996年4月被成功分解,RSA1
9、30于1996年4月被成功分解密钥长度应该介于1024bit到2048bit之间由n直接求(n)等价于分解n,RSA-129的故事,鹗鸟(ossifrage),又名髭兀鹰(lammergeier),是阿尔卑斯山上一种稀有的肉食秃鹰。它的翅膀展开将近十米宽。鸟名的字面含义是“碎骨”。顾名思义,其习性令人毛骨悚然。Mirtin Gardner在1977年“Scientific American”的专栏文章中介绍了RSA码。为了显示这一技术的威力,RSA公司的研究人员用一个129位的数N和一个4位数e 对这个关于秃鹰的消息作了编码。Gardner刊登了那个密文,同时给出了N和e。RSA公司还悬赏10
10、0美元,奖给第一个破译这密码的人。96869 61375 46220 61477 14092 22543 55882 90575 99911 24574 31987 46951 20930 81629 82251 45708 35693 14766 22883 98962 80133 91990 55182 99451 57815 154,一批松散组成的因子分解迷,大约有六百多人,分布在二十几个国家。他们经过八个月的努力最后于1994年4月为RSA-129找到了64位数和65位数两个素数因子。11438 16257 57888 86766 92357 79976 14661 20102 182
11、96 72124 23625 62561 84293 57069 35245 73389 78305 97123 56395 87050 58989 07514 75992 90026 87954 3541=34905 29510 84765 09491 47849 61990 38981 33417 76463 84933 87843 99082 0577*32769 13299 32667 09549 96198 81908 34461 41317 76429 67992 94253 97982 88533“The magic words are squeamish ossifrage”,
12、来自两个方面的威胁,人类计算能力的不断提高分解算法的进一步改进。分解算法过去都采用二次筛法,如对RSA-129的分解。而对RSA-130的分解则采用了一个新算法,称为推广的数域筛法,该算法在分解RSA130时所做的计算仅比分解RSA-129多10%。将来也可能还有更好的分解算法,因此在使用RSA算法时对其密钥的选取要特别注意其大小。估计在未来一段比较长的时期,密钥长度介于1024比特至2048比特之间的RSA是安全的。,几个建议,为了防止可以很容易地分解n,RSA算法的发明者建议p和q还应满足下列限制条件:P和q的长度应仅相差几位。对于1024位的密钥而言,p和q都应在1075到10100之间
13、。(p-1)和(q-1)都应有一个大的素因子。Gcd(p-1,q-1)应该较小。,其它公钥密码算法,ElGamal密码 ElGamal密码是由ElGamal于1985年提出。该密码系统可应用于加/解密、数字签名等,其安全性是建立于离散对数(discrete logarithm)问题之上的,即给定g,p与y=gx mod p,求x在计算上不可行。椭圆曲线密码体制(ECC)椭圆曲线在密码学中的使用是在1985年由Neal Koblitz和Victor Miller分别独立提出的。其依据就是定义在椭圆曲线点群上的离散对数问题的难解性。椭圆曲线在代数学和几何学上已经广泛研究了150多年之久,有丰富而深厚的理论积累。,
copyright@ 2008-2023 冰点文库 网站版权所有
经营许可证编号:鄂ICP备19020893号-2