• 沒有找到結果。

近代密碼學序曲

N/A
N/A
Protected

Academic year: 2022

Share "近代密碼學序曲"

Copied!
7
0
0

加載中.... (立即查看全文)

全文

(1)

近 代密碼學序曲

沈淵源

一、 憶兒時

當我們小的時候, 或多或少會玩過一些密語的遊戲; 就是以一種很頑皮的方式傳達信息給 對方, 懂的人就知道你在講什麼, 不懂的人就鴨子聽雷似的根本不曉得你在胡說些什麼。 比如我 們要說: 「寄錢來」, 但講的時候將每個字注音的最後一個音不發出來, 如果只有一個音就還是發 那個音。 所以講出來就變成

,

請問你抓得到是什麼意思嗎? 這個例子當然還不夠格稱之為密碼, 僅僅是一個有趣的開場白 而已。 現在讓我們看看真正密碼的例子, 由這些例子中我們也能體會到數論在密碼術中的份量。

難怪 Bruce Schneier1 說: 「These days almost all cryptologists are also theoretical mathematicians-they have to be」。

二、 一個例子

現在我們用英文的二十六個字母來傳達這個信息

「SEND MONEY」。

首先我們用 NUMBER THEORY 當成所謂的 (加密) 鑰匙, 將重複的字母去掉剩下 NUM- BERTHOY, 然後把這些字母放在依序排列的二十六個字母下面, 再將其餘字母依序排列如下 : A B C D E F G H I J K L M N O P Q R S T U V W X Y Z

N U M B E R T H O Y A C D F G I J K L P Q S V W X Z.

很顯然的這是個一一對應, 我們把上一行的字母用下一行相對應的字母頂替, 那麼所要傳達的 信息就變成為

「LEFB DGFEX」。

換句話說 LEFB DGFEX 是 SEND MONEY 的密文。

1 Bruce Schneier (布魯斯·施奈爾) 是國際聞名的一位資訊安全專家及作家,他是 Counterpane Internet Security, Inc.(專精於密碼術與電腦安全的一個顧問公司) 的創始者同時也是這個公司的 CTO (Chief Technical Officer)。 他所寫 的應用密碼術(Applied Cryptography)一書被譽為密碼術的聖經,是最好的入門介紹書之一。 其著作翻譯成中文者有 「秘 密與謊言」,由商周出版社於2001916日初版發行。

68

(2)

三 、 安全性可慮?

代換法雖然對長一點的信息來說並不是一個妥當保持信息安全的好方法, 但誰能識破其真 相呢? 值得懷疑! 因為從觀察 LEFB DGFEX 中, 重複的字母提供了唯一的線索。 由此線索 推論出來與原信息同一形式的信息可能是

LIST MUSIC, MINE TUNIS, 或 DRAW CHART

當然你如果知道那加密的鑰匙以及整個方法, 你就能如法製作上表並將整個過程逆推回去 得到原先的信息。 這意味著解密的鑰匙很容易就可以從加密的鑰匙得到, 此乃傳統密碼術的特 性, 通常稱之為對稱式密碼系統。 所以這整個信息的安全性, 完全掌控在那 (加密的) 鑰匙, 只 要能保住此鑰匙的秘密性則安全性大抵上沒問題。 此處尚有多重的困難需要考慮:

1. 此鑰匙是傳遞信息的雙方都要知道的, 只要有一方沒保住, 安全性就被破壞了。

2. 何況有時候傳遞信息的對象是多方的, 而人多嘴雜, 安全性更是可慮。

3. 從另一個角度來看, 如果鑰匙很複雜, 複雜到必須 「寫下來」; 那麼被發現的機會更是有增無 減。

4. 而且利用此法互通信息時, 也必須事先安排好如何讓要秘密通信息的雙方或多方同意或知 道此鑰匙。 這整個的 「事先安排」 也要妥善極機密的進行才可以。

由於這種種的原因, 刺激人們去探討 「更高桿的」 或 「更深入的」 密碼術。 所以我們希望

「信息的安全性」 不會受制於 「鑰匙的秘密性」, 亦即我們希望 「信息的安全性」 能獨立於 「鑰匙 的秘密性」。 換句話說, 我們希望即使鑰匙是公開的, 信息仍然能維持其安全性。 更具體的說, 我 們想要達到的目標是:

「給你鑰匙 , 你只能將原信息變成密碼文, 卻無法將密碼文破解回歸其廬山真面目。」

這對傳統的密碼系統來說是不可能的, 因為解密鑰匙與加密鑰匙是對稱的, 公開加密鑰匙 就等於是公開解密鑰匙。 所以我們必須將加密鑰匙與解密鑰匙之間的對稱性打破, 唯有如此才 能突破僵局。 很自然的, 說到鑰匙就會聯想到門。 有許多公共建築物的大門, 當你從門內到門外 只要將門一推即可, 毫無困難; 但反過來則否, 必須有鑰匙才能從門外回到建築物內。 從門內將 門一推, 表面上好像是不需鑰匙; 實際上那推的動作因為每個人都知道, 可以看成是公開的鑰 匙。 門裡門外是全然不同的兩個世界。

四、 來自數論的靈感

如何能達到上面的目標呢? 乍看之下似乎不可能, 但門的比喻給我們一些啟發或暗示。 在 數論中有類似的例子。 譬如, 找出兩個很大的質數 p 與 q (說是一百位數好了) , 然後將這兩個

(3)

質數相乘得到其乘積為 n = pq 。 這整個過程比起其逆過程 (給你 n, 找出這兩個質數) 來得簡 單, 而且簡單得許多。

下面的例子中為了方便說明起見, 我們取較小的兩個質數 p 與 q; 如 p 至少 25, 那你就查 驗 26,27,28 都不是, 29 是也; q 至少 40, 下一個數 41 就是了。 這個步驟很快, 然後將其相乘得 到 n = pq = 1189, 這個步驟也很快。 反之, 給你 1189, 那你就得試 2,3,5,7,11,13,17,19,23 等共九個除法之後的 29才得到整除:

1189 = 29 × 41。

這裡因為 1189 很小, 感覺不出找 29 會有困難, 但當 n 為一 200 位數的整數時, 其困難度 可想而知! 我們還會用到整數 e, 此數與 φ(n) = (p − 1)(q − 1) 互質。 在我們的例子中可取 e = 3, 此處

n = 1189, e = 3

是公開的鑰匙, 而 p 與 q 則保持秘密。 這次我們將 26個英文字母及空白用整數來表示如下:

空白 A B C D E F G H I J K L M N O P Q R S T U V W X Y Z

00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26

再一次的我們要傳遞 SEND MONEY 這一信息。 先將其化為對應的數字, 如下:

19 05 14 04 00 13 15 14 05 25 因為 1189是四位數, 所以我們將信息分為三位數一組, 如下:

190 514 040 013 151 405 250

(在尾巴加了一個 0, 因為最後一組數 25 不是三位數)。 我們用 P1, P2, P3, . . . 來表示這些三位 數, 然後按照下面的法則轉換成密碼:

Ci ≡ Pie (mod n), i = 1, 2, 3, . . . , 此處 Ci 為介於 0與 n − 1 之間的整數, 亦即被 n 除的餘數。

C1≡ 1903 = 6859000 ≡ 848 (mod 1189), C2≡ 5143 = 135796744 ≡ 1054 (mod 1189), C3≡ 0403 = 64000 ≡ 983 (mod 1189),

(4)

C4≡ 0133 = 2197 ≡ 1008 (mod 1189), C5≡ 1513 = 3442951 ≡ 796 (mod 1189), C6≡ 4053 = 66430125 ≡ 695 (mod 1189), C7≡ 2503 = 15625000 ≡ 351 (mod 1189)。

所以收到的密文為:

848 1054 983 1008 796 695 351。

如何將這些密文 {Ci} 破解回歸其廬山真面目 {Pi} 呢? 令 b = [p−1, q −1] 為 p−1 與 q −1 的最小公倍數 (注意: 若不知 p, q 則 b 就無從知道), 且令 d 為同餘方程式 ex ≡ 1 (mod b) 中的最小正整數解。 解出得 b = 280, d = 187, 然後計算 Cid (mod 1189), i = 1, 2, 3, . . . 即可得 Pi, i = 1, 2, 3, . . .。

為何如此呢? 且將此問題暫時擺在一旁, 我們先來算 Cid。 第一個碰到的是 848187, 即將 848 自乘 187 次, 這是一個很大的數。 表面上你得執行 186 次的乘法, 這相當花時間。 如果只是 平方, 速度就非常快。 重複此一運算, 我們就得到 4 次方、8 次方、16 次方、32 次方、64 次方、128 次方 . . ., 這提供了一個解決 848187 的計算問題。 先將 187 寫成 (即 187 之二進位表示法為 10111011)

27+ 25+ 24+ 23+ 21+ 20 = 128 + 32 + 16 + 8 + 2 + 1,

再依次計算 848的 2n次方如下:(這兒我們引進負數, 為的是將每個數的大小調成比 n/2 小; 如 此可稍稍減少所要執行的計算量, 特別是當你用手算時這是一大幫助。)

8481 ≡ −341 (mod 1189),

8482 ≡ (−341)2 ≡ 948 ≡ −241 (mod 1189), 8484 ≡ (−241)2 ≡ −180 (mod 1189), 8488 ≡ (−180)2 ≡ 297 (mod 1189), 84816 ≡ 2972 ≡ 223 (mod 1189), 84832 ≡ (223)2 ≡ −209 (mod 1189), 84864 ≡ (−209)2 ≡ −312 (mod 1189), 848128 ≡ (−312)2 ≡ −154 (mod 1189)。

所以我們得到

848187≡ (−154)(−209)(223)(297)(−241)(−341) ≡ 190 (mod 1189)。

(5)

值得注意的是, 原來需執行186 次乘法的計算, 用上面的演算法只需 12 次。 同法可算出其 他的如下:

1054187 ≡ (−135)(390)(141)(−332)(−353)(−187) ≡ 514 (mod 1189), 983187 ≡ (−206)(−368)(−573)(165)(−122)(165) ≡ 40 (mod 1189), 1008187 ≡ (−181)(−531)(−312)(−154)(−64)(426) ≡ 13 (mod 1189), 796187 ≡ (−393)(−121)(16)(256)(141)(−353) ≡ 151 (mod 1189), 695187 ≡ (−494)(291)(−318)(59)(−86)(−318) ≡ 405 (mod 1189), 351187 ≡ (351)(−455)(297)(223)(−209)(−154) ≡ 250 (mod 1189)。

所以我們就得到原來的 P1, P2, P3, . . . 。 為何這個方法行得通呢? 從 P 到 C 其運算為 C ≡ Pe (mod n), 而解密 C 則計算 P ≡ Cd (mod n), 我們要證明 P = P 。 實際上 我們假設 P, P 都是小於 n 的正整數, 所以只要證明 P ≡ P (mod n) 即可! 由定義可知

P ≡ Cd≡ (Pe)d≡ Pde (mod n),

而 d 為同餘方程式 ex ≡ 1 (mod b) 中的最小正整數解, 此處 b = [p − 1, q − 1] 為 p − 1 與 q − 1 的最小公倍數 (因我們取 e 與 p − 1 及 q − 1 互質, 因此 e 與 b 互質, 所以此同餘 式有解)。 令 de = 1 + kb。 若 (P, p) = 1, 則費馬小定理告訴我們 Pp−1 ≡ 1 (mod p)。 因 p − 1 | b, 所以 Pkb ≡ 1 (mod p)。 因此

Pde ≡ Pkb+1 ≡ P (mod p)。

若 p | P , 則上面的同餘式顯然成立。 同理 Pde ≡ P (mod q)。因此 Pde ≡ P (mod n)。

五、 計算之複雜度的分析

經過上面的一番計算之後, 讓人深深的覺得這些計算最好是由電腦來代勞。 我們同時也注 意到分解 n = 1189 的困難度是整個方法的安全性之關鍵, 但在上例中有些計算卻比分解 1189 來得複雜得多。 當然如果你有辦法算出 848 自乘 187 次, 則分解 1189 應該是簡單之至。 這好像 有點似是而非, 如何解釋這種似是而非的現象呢? 這就牽涉到整個計算當中數字的大小以及計 算的複雜度的問題。 記得嗎? 在實際的應用當中, 質數 p與 q 都是100位數之大, 相乘之後就變 成 200 位數。 所以在加密或解密的計算很大次方的過程當中, 雖然我們不可嗤之以鼻的輕看其 計算量, 但比起要分解一個 200位數 (就目前已知的演算法) 的計算量是來的少, 而且少很多。

(6)

要分析這其中的奧秘, 我們就得將所涉及到的運算分解成一些最基本的運算, 如加法、 減 法、 乘法、 除法、 以及相互比較 (Comparison)。 當然, 數字的大小會影響到電腦去執行這些運 算的時間。 所以為了簡單起見, 我們假設所有這些運算所需的時間都是一樣的, 比如說一秒一百 萬次。

在解密的過程中, 最困難的地方似乎是將一個數自乘 d 次, 此處 d 為同餘方程式 ex ≡ 1 (mod b) 中的最小正整數解, 而

b = [p − 1, q − 1] = (p − 1)(q − 1)/(p − 1, q − 1) < pq/2 < pq/2 = n/2,

所以我們可假設 d < n/2。 首先我們把 d 連續除以 2, 將之化為二進位數。 這需要幾次的除法 呢? 很明顯的, 這個數目就是 d 的二進位表示法的位數, 說是 k 吧! 則

2k−1 ≤ d ⇒ k − 1 ≤ log2d ≤ log2(n/2) = log2n − 1,

所以我們得知 k 的一個上界為 log2n。 此數隨著 n 的增加而增加, 但成長的非常緩慢; 如 n是 200 位數, 而 log2n 比 700 還小。

我們在上面用了平方法來處理次冪的計算, 先做了 k 次的平方然後除以 n 得其餘數。 這 需要少於 700 次的乘法及少於 700 次的除法, 所以合起來不會超過 2100 次的基本運算。 若要我 們用手去算, 門都沒有! 但對電腦來說這可是輕而易舉的事情, 不吭半聲所有的計算就結束了。

接著將這些所得到的平方數兩兩相乘再除以 n 得其餘數, 這不超過 k 次的乘法也不超過 k 次 的除法, 所以所需要的基本運算合起來不會超過 3500次。

再來我們得估計一下解同餘方程式

ex ≡ 1 (mod b)

所需的基本運算的次數。 這需要將 b 與 e 輾轉相除, 不難證明其次數會少於 2 log2n, 即1400 次的除法。 逆推回去, 將 1 寫成 b 與 e 的線性組合, 所需要的基本運算跟前面的輾轉相除法合 起來不會超過 2800次。

所以加密與解密合起來所需要的基本運算最多不會超過 10000次, 而以一秒一百萬次的速 度來執行這些基本運算的電腦, 在一秒鐘裡面就可以完成十件這種計算的工作。 也許一秒作一 百萬次基本運算的電腦是快過現有的任何一部電腦, 但這樣的假設只不過是提供我們作為 「比 較」 的用途。 退一萬步來想, 我們假設那試圖破解密文的人有如此快速的電腦可使用也是應該 的, 因為做最壞的打算才是上上之策!

六 、 誰還管生生世世夜夜朝朝?

(7)

話說回來, 那試圖破解密文的人必先分解那巨大無比的 200位數 n 成為 p × q, 由此來解 出 b 然後再執行上述的計算來解密。 如果此人所用來分解 n 的方法是除以從 1 開始一直到√n 的所有整數的話, 那麼光這項工作就得執行 10100 次的除法。 如果我們用一秒一百萬次快速的 的電腦也需要 1094 秒鐘, 亦即 3 × 1086 年左右才能算完。 當然實際上只需除以其中的質數, 但 問題是要去判別在 100 位數之內何數為質數, 這是相當頭痛的事情。 即使用現今最快速的電腦 及最有效率的演算法要分解一個 200 位數, 也要 40 億年才能完成。 到那時候, 誰還管何人會來 看我們的信息呢?

—本文作者任教於東海大學數學系—

參考文獻

相關文件

當你動手在紙上, 把鄭一, 吳二, 張三, 李四, 王五, 陳六, 何七, 趙八, 梁九, 劉 十· · ·擺弄成三堆的時候, 你會覺得, 這個問 題不勝其繁。.. 讓

四、主管機構密發給個人的權責代碼及密碼,係用於操作電腦以存取重要機密

從外形看起來, Stirling 公式 並不漂亮, 但卻很多用途, 它是揭開許多深刻 奧秘的鑰匙。 在研 究二項分佈的性質時, De Moivre 最先得到這個公式 (1718 年); 後來 James Stirling 在

在第二次世界大戰時, 德國憑藉其優異的密碼通訊能力, 潛艦神出鬼沒, 盟軍膽顫心驚。 在 獵殺U-571(U-571) 裡, 便是演盟軍如何奪取北大西洋中, 德軍編號U-571 潛艦上密碼解碼機 的驚險過程。

但是 T, A, O, I 出現的次數幾乎不相上下。 要是把每一種組合都試一遍, 直到得出一個 意思 來, 那會是一項沒完沒了的工作。 所以, 只好等新材料來了再說。

使用者甲與使用者乙約定藉由非對稱加密(asymmetric encryption)進行溝通,假設使用者甲先以

宗密對無住禪法不是已有精確的掌握嗎?為何在《禪》序這裡,卻做出了這樣的判釋?是錯 誤記憶的結果? 61 或者,從宗密將「無住」、「南侁」、「神秀」、「宣什」並列──他們 全是五祖下的旁支

設一個二位數,十位數與個位數的數字的和為 4,若將十位數字 與個位數字對調後,所得新數比原數大 18。請問原二位數字應 為多少?.?. 設一個二位數,十位數與個位數的數字的和為