当前位置:首页 > 知识

《改變世界的九大演算法》:公鑰加密——用明信片寄祕密,用共同祕密來加密

文:約翰・麥考米克(John MacCormick)

第4章 公鑰加密:用明信片寄送祕密

人喜歡八卦,喜歡祕密。改變加密的世界目的是為了傳遞祕密,因此每個人都是演算鑰加用共天生的加密高手──人能夠比電腦更輕易地祕密溝通,如果你想告訴朋友一個祕密,密用明信祕密密來只要在對方的片寄耳朵旁講悄悄話就行了,電腦可就沒那麼容易辦到,同祕電腦沒辦法把信用卡卡號「輕聲」說給另一台電腦聽,加密如果電腦和網際網路連線,就更加無從控制信用卡卡號會被傳到哪裏、改變被哪幾台電腦窺知。世界

本章將探索電腦如何利用公鑰加密(public key cryptography)來克服這個問題,演算鑰加用共而這也是密用明信祕密密來電腦科學至今最聰明且最具影響力的概念。

現在你或許想問,片寄本章的同祕副標題為何是「用明信片寄送祕密」,答案就在圖4-1。我們把公鑰加密比喻成用明信片溝通,現實生活中如果你想寄機密文件給某人,你當然會把文件妥善密封在信封裏寄出,雖無法保證天衣無縫,但畢竟不失為穩妥的做法。把機密訊息寫在明信片上寄出顯然無法保密,因為凡是接觸得到明信片的人(例如郵務員)都會看到明信片上的訊息。

4-1Photo Credit: 經濟新潮社出版

以上正是電腦在網際網路上進行祕密溝通時遇到的問題。由於網路上的任何訊息通常都會經過許多「路由器」(routers),凡是能進入路由器的人(包括惡意竊聽者)都能一窺訊息內容,因此從你的電腦出去的每一筆資料進入網路後,就如同寫在明信片上一樣!

或許你已經替明信片問題想到快速的解決之道。何不用密碼在訊息上加密後,再寫在明信片上?如果你認識收件人,這麼做是可行的,因為你們過去可能已經針對密碼達成共識,但真正的問題在於你寄明信片給不認識的人時,如果你在這張明信片上使用密碼,那麼郵務員將無從知道你的訊息,但收件人也看不懂!公鑰加密真正厲害的地方是,你使用只有收件人能破解的密碼,儘管你們根本沒機會針對使用的密碼暗中達成共識。

電腦在面對不認識的收件人時也面臨同樣的溝通問題。例如你第一次用信用卡在亞馬遜網站買東西,於是電腦必須將你的信用卡卡號傳給亞馬遜的伺服器,但是你的電腦從沒和亞馬遜的伺服器傳輸過訊息,因此這兩台電腦過去沒有機會針對密碼達成共識,而它們試圖達成的任何共識,都可以被網路上它們之間所有的路由器觀察到。

現在回到明信片的比喻。我承認這狀況聽起來有點矛盾,收件者看到的資訊與郵務員看到的資訊一模一樣,但收件者能夠將訊息解密,郵務員卻不能。公鑰加密將為這個矛盾的情況提供解答,接下來進一步說明。

用共同的祕密來加密

首先是個簡單的例子,也就是在一間房間裏進行口語溝通。你跟你的朋友阿諾和你的死對頭伊芙在同一個房間裏,你想偷偷傳訊息給阿諾,又不希望讓伊芙知道訊息的內容,或許這訊息是信用卡卡號,但為了簡化起見,就假設是1到9之間的一個數字吧。此外你只可以用大聲說出來的方式跟阿諾溝通,而這麼一來又會被伊芙聽到,輕聲細語或遞紙條等小聰明的舉動一律不准。

假設你想傳的信用卡卡號是7,其中一種傳遞方式,就是先試著想一個阿諾知道但伊芙不知道的數字,例如你和阿諾小時候住在同一條街上,你們經常在你家的前院玩耍,地址是快樂街322號。又假設伊芙小時候並不認識你,特別是她不知道你和阿諾以前玩耍的這個地方的地址,於是你可以跟阿諾說:「嘿阿諾,我們小時候在我快樂街的家玩,你還記得那裏的門牌號碼嗎?如果你把門牌號碼加上信用卡卡號,結果是329。」

只要阿諾記得正確的門牌號碼,就可以將你告訴他的329減去門牌號碼,得出信用卡卡號。他將329減去322得出7,也就是你想傳給他的信用卡卡號。另一方面,儘管伊芙聽見你和阿諾說的每一個字,但還是無法知道信用卡卡號。圖4-2說明整個過程。

4-2Photo Credit: 經濟新潮社出版

這個方法有用,是因為你和阿諾之間存在著電腦科學家所說的「共同祕密」(shared secret),也就是322。因為你們知道這個數字但伊芙不知道,於是就可以利用這個共同祕密來傳遞任何想傳遞的數字,只要加上這個數字再把總數說出來,讓對方減去共同的祕密即可。伊芙聽到總數卻不能怎麼樣,因為她不知道該減去什麼數字。

信不信由你,只要懂得簡單的「加法技法」,將共同的祕密數字加在像信用卡卡號這種私人訊息上,你就知道網際網路上絕大多數的加密是怎麼運作的!電腦一直在使用這種技法,但是為了確保萬無一失,還有幾個細節要注意。

首先,電腦使用的共同祕密必須比門牌號碼322長很多,否則偷聽到對話的人就可以試遍所有可能性。例如,假設我們用加法技法將三位數的門牌號碼與16碼的信用卡卡號相加,由於三位數的門牌號碼共有999種可能性,因此偷聽到我們對話的伊芙就可以列出相對的999個信用卡卡號,而其中一個必定是你的信用卡卡號。至於電腦幾乎在瞬間就可以試遍999個信用卡卡號,所以共同祕密必須要比三位數再多很多位數才有用。

事實上,當你聽到某個位元數的加密法,如128位元加密(128-bit encryption),其實指的就是共同祕密的長度。共同祕密通常被稱為「公鑰」,因為它可以被用來解鎖或解密訊息。如果你算出公鑰中30%的位元數,就會知道公鑰大約有幾位數字。由於128的30%約為38,所以128位元加密的公鑰是一個38位數的數字。


分享到:

京ICP备19007577号-5