|
四、瑞未斯特、希米爾、愛得曼(Rivest, Shamir, Adleman)法 |
這個方法是上列三位科學家在1978所發表的,其步驟如下(又如圖2)
- 1.收報者取兩個相異的大質數p、q及另一與(p-1)(q-1)互質的數a,且a<w令
w=(p-1)(q-1),
m=pq
及p、q之較小者的位數(十進位)為k。
- 2.(公開)告訴發報者k,m與a。
- 3.發報者將他的信號分成許多段,每段含k-1位數(十進位)(若k=3(即p、q均為不小於二位的數),則信號
331414320001
則應分成
33,14,14,32,00,01
一個一個的考慮發出),設發報者的信號之一為x(k-1位數,即上例中之33,或14,或32,…),則他將它作成
發出。
- 4.收報者收到c之後,即可把原有的x求出來,因a與w互質,由定理2.2及系知,我們可找到二整數d、e;d>0使得
ad+we=1
令
則此y即發報者之x。我們先證明 y=x。
但因 w、a、d 均為大於 1 之整數,故 e 必為一負數,即 -e 為一正數,又因x小於質數 p、q,故 x 同 m 互質,由定理2.3之系得
但因y與x均取小於m之數,故y=x。故本程序之正確性得證。
圖2 (RSA製碼法)在此作業程序中,m,a,c1,…,cn 是公開的。
|
這種密碼之關鍵在於p、q為兩大質數時,分解m成為p、q為一件極費時的工作,若分解不開m,
則找不到w與d,因此就無法從c解得x,在不久以前,要分解一個數的因子仍停留在近乎硬試的階段,即要從2,3,5,7,…,一直試到附近才停止。若n是50位數而p、q均近25位數,則分解m要除約1025次,若以電子計算機以每秒106次的高速運算,這仍是一個1011年的工作,目前由於大家對這方面的重視,分解一個50位數的時間已可縮短至1010次運算。下面的表中列出了目前(1980年),分解一個大數大概所需的時間。
m的位數 |
分解m的最少運算次數 |
最快(1980年)電腦所費的時間 |
50 |
1.4
x 1010 |
3.9小時 |
70 |
9.0
x 1012 |
104天 |
80 |
1.3
x 1013 |
150天 |
100 |
2.3
x 1017 |
74年 |
200 |
1.2
x 1023 |
3.8 x 109年 |
若取pq各為40位數在目前已經十分安全了,即使是25位數,在商業上也十分安全,因為3.9小時最快電腦的計算費用也是一筆大的財富。
讀者也許要問這種大質數是否很多,而且容易找到?答案是:大質數既多而又容易找,前面已談到找一個大質數不宜用硬除的辦法,但因找它們所用的定理比我們已證明的幾個要難,我們將在下節中才介紹出來。我們只談一下質數之多,依據質數定理在1與n之間的質數約有
個,因此小於1040(即40位)的質數約有
這又是一個天文數字,因為一個一千頓電子計算機中所含的原子數不過1031左右,
可見這種密碼之難以捉摸了。現取兩個用來做密碼的十五位質數以饗讀者:
要分解
若不懂數學與計算機,則是談何容易。在本節結束之前,我們也舉一個例子,當然我們不會用上列的大質數,我們且取p、q均為兩位數,令
p=47,q=59
則
m=pq=47 x 59=2773
w=(p-1)(q-1)=2668
取a=157,由輾轉相除可得
故
d=17
故收方發出的密碼法是
m=2773,a=157,k=2
此時發方必須一位一位的發出信號,設第一個要發的信號是3,則他要發出的是
c之求法主要在將157分成2進位數並用定理2.1即
因
157=27+24+23+22+1,而
故
因此 c=441 即發方發出之信號,當收方收到 441 之後,用同樣的運算法可得 cd 為
解碼完成:由上面的運算可知若沒有電子計算機,則解與做這種密碼是何等的辛苦。
|
|
|