$ ]1 |. r7 A! U! Y* QRSA的安全性依賴于大數(shù)分解。公鑰和私鑰都是兩個(gè)大素?cái)?shù)( 大于 100個(gè)十進(jìn)制位)的函數(shù)。據(jù)猜測(cè),從一個(gè)密鑰和密文推斷出明文的難度等同于分解兩個(gè)大素?cái)?shù)的積。 7 q2 ~, k5 ^6 p0 J. m. ]' r# i* b. m7 ~, H/ f/ Z K
密鑰對(duì)的產(chǎn)生。選擇兩個(gè)大素?cái)?shù),p 和q 。計(jì)算: 4 w5 S' A8 [0 w. l" M1 L
* t9 K) w/ C) wn = p * q + y9 v I3 b" s3 O$ p! l( b6 S( k- R5 P
然后隨機(jī)選擇加密密鑰e,要求 e 和 ( p - 1 ) * ( q - 1 ) 互質(zhì)。最后,利用Euclid 算法計(jì)算解密密鑰d, 滿足 9 Q0 s$ i1 p% j" E, ^: X 6 i! M5 C% o1 |0 O ge * d = 1 ( mod ( p - 1 ) * ( q - 1 ) ): a. Y6 z Y7 G, S
5 L) ?! A8 U6 e8 S0 V3 k& }
其中n和d也要互質(zhì)。數(shù)e和n是公鑰,d是私鑰。兩個(gè)素?cái)?shù)p和q不再需要,應(yīng)該丟棄,不要讓任何人知道。 ) ~+ k) U& P( V8 y2 X1 T" K2 `; A7 v* k3 P+ N8 l5 [* O( S
加密信息 m(二進(jìn)制表示)時(shí),首先把m分成等長(zhǎng)數(shù)據(jù)塊 m1 ,m2,..., mi ,塊長(zhǎng)s,其中 2^s <= n, s 盡可能的大。對(duì)應(yīng)的密文是:; K9 K; q; F r+ U: w* c
$ p0 B- ?0 o7 P0 x9 qci = mi^e ( mod n ) ( a ) 7 u6 m O7 Z0 E2 P& E& C* R( g) E" I; m+ r4 M4 @
解密時(shí)作如下計(jì)算: * C+ B. J6 p/ q- d2 ?6 A ) C( ?. ~. h% |1 |2 e9 |mi = ci^d ( mod n ) ( b ); t) A: f1 l$ {4 d% P
, r3 ^8 Q- ~) P6 c1 hRSA 可用于數(shù)字簽名,方案是用 ( a ) 式簽名, ( b )式驗(yàn)證。具體操作時(shí)考慮到安全性和 m信息量較大等因素,一般是先作 HASH 運(yùn)算。7 _& k" ^, z5 q& }5 E
s" w" E$ V2 O4 k4 `9 [RSA 的安全性。 ( d$ M) H. d2 X1 ]4 C/ MRSA的安全性依賴于大數(shù)分解,但是否等同于大數(shù)分解一直未能得到理論上的證明,因?yàn)闆]有證明破解RSA就一定需要作大數(shù)分解。假設(shè)存在一種無須分解大數(shù)的算法,那它肯定可以修改成為大數(shù)分解算法。目前, RSA的一些變種算法已被證明等價(jià)于大數(shù)分解。不管怎樣,分解n是最顯然的攻擊方法?,F(xiàn)在,人們已能分解140多個(gè)十進(jìn)制位的大素?cái)?shù)。因此,模數(shù)n必須選大一些,因具體適用情況而定。 4 Q+ X5 x* L. D: k& [
0 d3 R5 T: T0 {/ P" q5 tRSA的速度。 4 y, Z. [5 _; |: f) X( o由于進(jìn)行的都是大數(shù)計(jì)算,使得RSA最快的情況也比DES慢上100倍,無論是軟件還是硬件實(shí)現(xiàn)。速度一直是RSA的缺陷。一般來說只用于少量數(shù)據(jù)加密。 ! w/ I2 K5 `3 b! s4 e
0 @# w" K v. t
RSA的選擇密文攻擊。 6 t0 H* }' p; L1 [! _+ RRSA在選擇密文攻擊面前很脆弱。一般攻擊者是將某一信息作一下偽裝(Blind),讓擁有私鑰的實(shí)體簽署。然后,經(jīng)過計(jì)算就可得到它所想要的信息。實(shí)際上,攻擊利用的都是同一個(gè)弱點(diǎn),即存在這樣一個(gè)事實(shí):乘冪保留了輸入的乘法結(jié)構(gòu): 3 [# M* F+ A2 V% i. F8 [0 u2 J0 ~7 W+ o \ q: O
( XM )^d = X^d *M^d mod n: F, P% Z0 s$ ^/ G
' g$ V* D" |8 P前面已經(jīng)提到,這個(gè)固有的問題來自于公鑰密碼系統(tǒng)的最有用的特征--每個(gè)人都能使用公鑰。但從算法上無法解決這一問題,主要措施有兩條:一條是采用好的公鑰協(xié)議,保證工作過程中實(shí)體不對(duì)其他實(shí)體任意產(chǎn)生的信息解密,不對(duì)自己一無所知的信息簽名;另一條是決不對(duì)陌生人送來的隨機(jī)文檔簽名,簽名時(shí)首先使用One-Way HashFunction' h. F* B7 b/ f0 X
對(duì)文檔作HASH處理,或同時(shí)使用不同的簽名算法。在中提到了幾種不同類型的攻擊方法。 * R- a; c3 I. g# t& i E: L/ V3 z; \6 Z p% @- w o
RSA的公共模數(shù)攻擊。 Y2 l: f. j" S3 Q$ m( \' W
若系統(tǒng)中共有一個(gè)模數(shù),只是不同的人擁有不同的e和d,系統(tǒng)將是危險(xiǎn)的。最普遍的情況是同一信息用不同的公鑰加密,這些公鑰共模而且互質(zhì),那末該信息無需私鑰就可得到恢復(fù)。' X* a" j5 ^0 {; g: S1 ~