RSA密码方案有时也称为Rivest-Shamir-Adleman 算法,它是目前使用最广泛的一种非对称密码方案。RSA在USA(但其他国家除外)的专利期限持续到2000年。
RSA应用广泛,但在实际中却常用于:
注意 :RSA加密的本意并不是为了取代对称密码,而且它比诸如 AES的密码要慢很多。这主要是因为RSA(或其他公钥算法)执行中涉及到很多计算。因此,加密特征的主要用途就是安全地交换对称密码的密钥(即密钥传输)。实际上,RSA通常与类似AES的对称密码一起使用,其中真正用来加密大量数据的是对称密码。
RSA底层的单向函数就是整数因式分解问题: 两个大素数相乘在计算上是非常简单的(人们使用笔和纸就能完成),但是对其乘积结果进行因式分解却是非常困难的。
RSA加密和解密都是在整数环 Z n Z_n Zn内完成的,模计算在其中发挥了核心作用。
假设使用RSA 加密明文 x x x,而表示 x x x的位字符串则是 Z n = 0 , 1 , . . , n − 1 Z_n = {0,1,..,n-1} Zn=0,1,..,n−1内的元素。所以明文 x x x表示的二进制值必然小于 n n n。对密文而言,这个原理也成立。使用公钥进行加密和使用密钥进行解密可以表示为:
RSA加密:给定公钥 ( n , e ) = k p u b (n, e) = k_{pub} (n,e)=kpub和明文 x x x,则加密函数为: y = e k p u b ( x ) ≡ x e m o d n (1) y = e_{k_{pub}}(x) \equiv x^e mod n \tag 1 y=ekpub(x)≡xemodn(1)其中 x , y ∈ Z n x,y \in Z_n x,y∈Zn
RSA解密:给定私钥 d = k p r d = k_{pr} d=kpr和密文 y y y, 则解密函数为: x = d k p r ( y ) ≡ y d m o d n (2) x = d_{k_{pr}}(y) \equiv y^d mod n \tag 2 x=dkpr(y)≡ydmodn(2)其中 x , y ∈ Z n x,y \in Z_n x,y∈Zn
实际中 x , y , n x, y, n x,y,n和 d d d都是非常长的数字,通常为1024位或更长。值e有时称为加密指数或公开指数
; 私钥d有时称为解密指数或保密指数
。如果 Alice想将一个加密后的消息传输给Bob,她需要拥有 Bob 的公钥(n,e),而 Bob将用他自己的私钥d进行解密。下一小结将讨论如何生成这三个重要参数d,e和n。下面我们可以探讨一下 RSA密码体制的一些需求;
所有非对称方案的一个显著特征就是,它们都有一个计算公钥和私钥的握手阶段。密钥生成依赖于公钥方案,因此十分复杂。以下是RSA密码体制中计算公钥和私钥所涉及的步骤。
RSA密钥生成:
输出:公钥: k p u b k_{pub} kpub = (n, e)和私钥: k p r = ( d ) k_{pr} = (d) kpr=(d)
步骤4中要求 g c d ( e , Φ ( n ) ) = 1 gcd(e, \Phi(n)) = 1 gcd(e,Φ(n))=1是为了保证 e e e的逆元存在模 Φ ( n ) \Phi(n) Φ(n),所以私钥 d d d始终存在。
密钥生成中有两个部分至关重要:选择两个大素数的步骤1和计算公钥和私钥的步骤4和5。步骤1中的素数生成非常复杂。使用扩展的欧几里得算法(EEA)立刻就可以计算出密钥 d d d和 e e e。实际中,人们通常首先在 0 < e < Φ ( n ) 0 < e < \Phi(n) 0<e<Φ(n)范围内选择一个公开参数,且 e e e的值必须满足条件 g c d ( e , Φ ( n ) ) = 1 gcd(e, \Phi(n))=1 gcd(e,Φ(n))=1。将输入参数 n n n 和 e e e 用于欧几里得算法(EEA)中即可得到以下关系: g c d ( Φ ( n ) , e ) = s ⋅ Φ ( n ) + t ⋅ e gcd(\Phi(n), e) = s\cdot\Phi(n) + t\cdot e gcd(Φ(n),e)=s⋅Φ(n)+t⋅e
如果 g c d ( Φ ( n ) , e ) = 1 gcd(\Phi(n), e) = 1 gcd(Φ(n),e)=1,则 e e e是一个有效的公钥。使用扩展欧几里得算法得到的参数 t t t即为 e e e的逆元,因此有: d = t m o d Φ ( n ) 。 d = t mod \Phi(n)。 d=tmodΦ(n)。
示例:Alice想要发送一个加密后的消息给Bob。首先,Bob 执行步骤1~5计算RSA参数,并将他的公钥发送给Alice。 Alice然后将消息(x=4)加密,并将得到的密文y发送给Bob。最后,Bob使用他自己的私钥解密y。
注意: 私钥指数和公钥指数都满足条件 e ∗ d = 3 ∗ 7 ≡ 1 m o d Φ ( n ) e*d = 3*7 \equiv 1 mod\Phi(n) e∗d=3∗7≡1modΦ(n)
实际中的RSA参数会非常非常大RSA模数n应该至少为1024位长,这使得p和q的位长度都至少为512。下面是位长度为1024的RSA参数的示例。
p = E O D F D 2 C 2. A 288 A C E B C 705 E F A B 30 E 4447541 A 8 C 5447 A 37185 C S A 9 C B 98389 C E 4 D E 19199 A A 3069 B 404 F D 98 C 801568 C B 9170 E B 712 B F 10 B 4955 C E 9 C 9 D C 8 C E 6855 C 612 3 h p=EODFD2C2.A288ACEBC705EFAB30E4447541A8C5447A37185CSA9CB98389CE4DE19199AA3069B404FD98C801568CB9170EB712BF10B4955CE9C9DC8CE6855C6123_h p=EODFD2C2.A288ACEBC705EFAB30E4447541A8C5447A37185CSA9CB98389CE4DE19199AA3069B404FD98C801568CB9170EB712BF10B4955CE9C9DC8CE6855C6123h
q = E B E O F C F 21866 F D 9 A 9 F O D 72 F 7994875 A 8 D 92 E 67 A E E 4 B 515136 B 2 A 778 A 8048 B 149828 A E A 30 B D O B A 34 B 977982 A 3 D 42168 F 594 C A 99 F 3981 D D A B F A B 2369 F 22964011 5 h q=EBEOFCF21866FD9A9FOD72F7994875A8D92E67AEE4B515136B2A778A8048B149828AEA30BDOBA34B977982A3D42168F594CA99F3981DDABFAB2369F229640115_h q=EBEOFCF21866FD9A9FOD72F7994875A8D92E67AEE4B515136B2A778A8048B149828AEA30BDOBA34B977982A3D42168F594CA99F3981DDABFAB2369F229640115h
n = C F 33188211 F D F 6052 B D B B 1 A 37235 E O A B B 5978 A 45 C 71 F D 381491 A D 12 F C 76 D A 0544 C 47568 A C 83 D 855 D 47 C A 8 D 8 A 779579 A B 72 E 635 D O B 0 A A A C 22 D 28341 E 998 E 90 F 82122 A 2 C 06090 F 43 A 37 E 0203 C 2 B 72 E 401 F D 06890 E C 8 E A D 4 F 07 E 686 E 906 F O 1 B 2468 A E 7 B 30 C B D 670255 C 1 F E D E 1 A 2762 C F 4392 C 0759499 C C O A B E C F F 008728 D 9 A 11 A D F h n=CF33188211FDF6052BDBB1A37235EOABB5978A45C71FD381491AD12FC76DA0544C47568AC83D855D47CA8D8A779579AB72E635DOB0AAAC22D28341E998E90F82122A2C06090F43A37E0203C2B72E401FD06890EC8EAD4F07E686E906FO1B2468AE7B30CBD670255C1FEDE1A2762CF4392C0759499CCOABECFF008728D9A11ADF_h n=CF33188211FDF6052BDBB1A37235EOABB5978A45C71FD381491AD12FC76DA0544C47568AC83D855D47CA8D8A779579AB72E635DOB0AAAC22D28341E998E90F82122A2C06090F43A37E0203C2B72E401FD06890EC8EAD4F07E686E906FO1B2468AE7B30CBD670255C1FEDE1A2762CF4392C0759499CCOABECFF008728D9A11ADFh
e = 40 B 028 E 1 E 4 C C F 07537643101 F F 72444 A O B E 1 D 7682 F 1 E D B 553 E 3 A B 4 F 6 D D 8293 C A 1945 D B 12 D 796 A E 9244 D 60565 C 2 E B 692 A 89 B 8881 D 58 D 278562 E D 60066 D D 8211 E 67315 C F 89857167206120405 B O 8 B 54 D 10 D 4 E C 4 E D 4253 C 75 F A 74098 F E 3 F 7 F B 751 F F 5121353 C 554391 E 114 C 85 B 5649725 E 9 B D 5685 D 6 C 9 C T E E D 8 E E 442366353 D C 39 , d = C 21 A 93 E E 75148 D 4 F B F D 77285 D 79 D 6768 C 58 E B F 283743 D 2889 A 395 F 266 C 78 F 4 A 28 E 86 F 545960 C 2 C E O 1 E B 8 A D 5246905163 B 28 D O B 8 B A A B B 959 C C 03 F 4 E C 499186168 A E 9 E D 6 D 88058898907 E 61 C T c C C C 584 D 65 D 801 C F E 32 D F C 983707 F 87 F 5 A A 6 A E 4 B 9 E 77 B 9 C E 630 E 2 C O D F 05841 B 5 E 4984 D 059435 D 7270 D 500514891 F 7 B 77 B 804 B E D 8 1 h e=40B028E1E4CCF07537643101FF72444AOBE1D7682F1EDB553E3AB4F6DD8293CA1945DB12D796AE9244D60565C2EB692A89B8881D58D278562ED60066DD8211E67315CF89857167206120405BO8B54D10D4EC4ED4253C75FA74098FE3F7FB751FF5121353C554391E114C85B5649725E9BD5685D6C9CTEED8EE442366353DC39,d=C21A93EE75148D4FBFD77285D79D6768C58EBF283743D2889A395F266C78F4A28E86F545960C2CEO1EB8AD5246905163B28DOB8BAABB959CC03F4EC499186168AE9ED6D88058898907E61CTcCCC584D65D801CFE32DFC983707F87F5AA6AE4B9E77B9CE630E2CODF05841B5E4984D059435D7270D500514891F7B77B804BED81_h e=40B028E1E4CCF07537643101FF72444AOBE1D7682F1EDB553E3AB4F6DD8293CA1945DB12D796AE9244D60565C2EB692A89B8881D58D278562ED60066DD8211E67315CF89857167206120405BO8B54D10D4EC4ED4253C75FA74098FE3F7FB751FF5121353C554391E114C85B5649725E9BD5685D6C9CTEED8EE442366353DC39,d=C21A93EE75148D4FBFD77285D79D6768C58EBF283743D2889A395F266C78F4A28E86F545960C2CEO1EB8AD5246905163B28DOB8BAABB959CC03F4EC499186168AE9ED6D88058898907E61CTcCCC584D65D801CFE32DFC983707F87F5AA6AE4B9E77B9CE630E2CODF05841B5E4984D059435D7270D500514891F7B77B804BED81h
正确性验证:
RSA核心: d k p r ( y ) = d k p r ( e k p u b ( x ) ) ≡ x e d ≡ x d e ≡ x m o d n (3) d_{k_{pr}}(y) = d_{k_{pr}}(e_{k_{pub}}(x)) \equiv {x^e}^d \equiv x^{de} \equiv x mod n \tag 3 dkpr(y)=dkpr(ekpub(x))≡xed≡xde≡xmodn(3) 下面来证明RSA方案可行的原因。
证明: 需要证明解密是加密的逆函数,即 d k p r ( e k p u b ( x ) ) = x d_{k_{pr}}(e_{k_{pub}}(x)) = x dkpr(ekpub(x))=x。首先来说明公钥和私钥的构建规则: d ∗ e ≡ 1 m o d Φ ( n ) d*e \equiv 1 mod\Phi(n) d∗e≡1modΦ(n)。利用模操作符的定义,此表达式等价于: d ∗ e ≡ 1 + t ∗ Φ ( n ) d*e \equiv 1 + t*\Phi(n) d∗e≡1+t∗Φ(n)
其中t是整数。将此表达式带入等式 ( 3 ) (3) (3)中可得: d k p r ( y ) ≡ x d e ≡ x 1 + t ∗ Φ ( n ) ≡ x t ∗ Φ ( n ) ∗ x 1 ≡ ( x Φ ( n ) ) t ∗ x m o d n (4) d_{k_{pr}}(y) \equiv x^{de} \equiv x^{1+t*\Phi(n)} \equiv x^{t*\Phi(n)} * x^1 \equiv (x^{\Phi(n)})^t *x mod n \tag 4 dkpr(y)≡xde≡x1+t∗Φ(n)≡xt∗Φ(n)∗x1≡(xΦ(n))t∗xmodn(4)
这意味着我们需要证明 x ≡ ( x Φ ( n ) ) t ∗ x m o d n x \equiv (x^{\Phi(n)})^t *x mod n x≡(xΦ(n))t∗xmodn。根据欧拉定理,即若 g c d ( x , n ) = 1 gcd( x, n )= 1 gcd(x,n)=1,则有 1 ≡ x Φ ( n ) m o d n 1 \equiv x^{\Phi(n)} mod n 1≡xΦ(n)modn,立即得到一个小型推广: 1 ≡ 1 t ≡ ( x Φ ( n ) ) t m o d n (5) 1\equiv 1^t \equiv (x^{\Phi(n)})^t mod n \tag 5 1≡1t≡(xΦ(n))tmodn(5)
其中,t为任意整数。此证明过程要分两种情况进行讨论:
第一种情况: g c d ( x , n ) = 1 gcd(x,n)=1 gcd(x,n)=1
由于这种情况下欧拉定理成立,可将等式 5 5 5插入 4 4 4,得到: d k p r ≡ ( x Φ ( n ) ) t ∗ x ≡ 1 ∗ x ≡ x m o d n . 证 毕 d_{k_{pr}} \equiv (x^{\Phi(n)})^t *x \equiv 1*x \equiv x mod n. 证毕 dkpr≡(xΦ(n))t∗x≡1∗x≡xmodn.证毕
这部分证明说明,对与RSA模数 n n n互素的明文值 x x x而言,解密函数的确是加密函数的逆。
第二种情况: g c d ( x , n ) = g c d ( x , p ⋅ q ) ≠ 1 gcd(x,n)= gcd(x, p·q)≠ 1 gcd(x,n)=gcd(x,p⋅q)=1
由于 p p p和 q q q均为素数,必须拥有下面因子的任何一个: x = r ∗ p 或 者 x = s ∗ q x = r*p 或者 x = s*q x=r∗p或者x=s∗q
其中 r , s r,s r,s均为整数,且满足 r < q 和 s < p rr<q和s<p
。为了不失通用性,假设 x = r ⋅ p x=r·p x=r⋅p,进而可以得到 g c d ( x , q ) = 1 gcd(x, q)=1 gcd(x,q)=1。以下形式的欧拉定理依然成立: 1 ≡ 1 t ≡ ( x Φ ( q ) ) t m o d q 1\equiv 1^t \equiv (x^{\Phi(q)})^t mod q 1≡1t≡(xΦ(q))tmodq
其中t为任意正整数。下面再来看看 ( x Φ ( n ) ) t (x^{\Phi(n)})^t (xΦ(n))t: ( x Φ ( n ) ) t ≡ ( x ( p − 1 ) ( q − 1 ) ) t ≡ ( ( x Φ ( q ) ) t ) p − 1 ≡ 1 p − 1 = 1 m o d q 。 (x^{\Phi(n)})^t \equiv (x^{(p-1)(q-1)})^t \equiv ((x^{\Phi(q)})^t)^{p-1} \equiv 1^{p-1} = 1 mod q。 (xΦ(n))t≡(x(p−1)(q−1))t≡((xΦ(q))t)p−1≡1p−1=1modq。
使用模操作符的定义,此表达式等价于: ( x Φ ( n ) ) t = 1 + u ∗ q , (x^{\Phi(n)})^t = 1 + u*q, (xΦ(n))t=1+u∗q,
其中, u u u为任何整数。将此等式乘以 x x x可得: x ∗ ( x Φ ( n ) ) t = x + x ∗ u ∗ q = x + ( r ∗ p ) ∗ u ∗ q = x + r ∗ u ∗ ( p ∗ q ) = x + r ∗ u ∗ n x*(x^{\Phi(n)})^t = x + x*u*q= x + (r*p)*u*q= x + r * u * (p*q)=x + r * u * n x∗(xΦ(n))t=x+x∗u∗q=x+(r∗p)∗u∗q=x+r∗u∗(p∗q)=x+r∗u∗n
即 x ∗ ( x Φ ( n ) ) t = x m o d n (6) 即x*(x^{\Phi(n)})^t = x mod n \tag 6 即x∗(xΦ(n))t=xmodn(6)
将等式 6 6 6代入等式 4 4 4便可得到期望的结果: d k p r = ( x Φ ( n ) ) t ∗ x ≡ x m o d n 。 证 毕 d_{k_{pr}} = (x^{\Phi(n)})^t*x\equiv x mod n。证毕 dkpr=(xΦ(n))t∗x≡xmodn。证毕
参考资料:《深入浅出密码学》–Christof Paar,Jan Pelzl著