湯:我不明白為何現在的密碼用那麼多數學, 以前所用的密碼本已經很難破解了。

林:你所說的密碼本是什麼意思?

湯:你看過諜戰連續劇《潛伏》嗎?劇中的主角就用一本小說來當密碼本去和總部通信,通訊的每一個字都是小說裡面的字,由該字出現在第幾頁第幾個字那兩個數目來作暗碼。你猜不到他用那一本小說就沒法破解。

黃:你所說的密碼本就是 code book。其實諜報員用一本小說來當密碼本也不是那麼容易。要知道每一個字在那一頁出現你得準備一個索引,那個索引被發現就會暴露身份了。

湯:在劇中那只是用於總部通過廣播電台向該諜報員的單向通信,諜報員只需要那本可以隨時買到的小說,並不需要那個逆向索引。

林:其實問題還很多。同一個字會在書中出現多次,有的字可能在書中找不到。

黃:這都可以解決。同一個字在書中出現多次是好事,應該鼓勵通訊中相同的字用另一頁的暗碼,那會增加破解的難度。此外還可以玩花招,比如第一頁到十五頁可以不用作正常通訊,如果暗碼的第一個數字是一到十,那你就用下面的兩個數字去查《新華字典》。

林:我加一句:如果暗碼的第一個數字是十一到十五,你就不理它,那是誘碼(假碼)。 

湯:其實這種招數還有很多,但用得過多會自找麻煩。你說用這種辦法作單向通訊是否已經夠安全了?

黃:撇開效率不談,這種辦法在七十年前是可行的。但你不能用同一部小說去和所有諜報員通訊,一人失事就全體遭殃。 同樣道理那種用第一頁到十五頁來作特殊用途的辦法也得對不同諜報員變更。所以說這種個別化的辦法在人力成本上是很高的,要一大隊人去維持。人多了出現對方臥底的機會也會大了。

林:不過利用現在的電腦你所說的這些都不成問題。

黃:利用現在的電腦你根本就不必用什麼小說密碼本。按照你和總部的約定,你很容易在兩分鐘內再寫出一個將1 到36 重新新排列的電腦程序,那就相當於一部把 0 - 9 和 a - z 加密的密碼本。為了保證這個程序的個別化而又日日不同,這個程序可以按幾個參數而變,比如說你的生日,你母親的生日,和通信那天的日子。那樣你就可以在幾分鐘內編排出一個為總部所知的密碼本。你用完後就把密碼本連程序都徹底刪除就是了。這種辦法還可以用到雙向通信,因為逆向索引很容易找出來。不過話又說回來,這種方法的加密強度不算好,某些方面甚至比不上二戰時期德國的 enigma。

林:自從電腦出現後傳統的密碼本已經給加密鑰(key)所代替了。今天說的key起碼有128 bits。它裡面的0和1的排列就決定你如何去把電腦數據重新排列以達到加密的目的。

黃:你所說的是 Data Encryption Standard (DES)  或 Advanced Encryption Standard (AES) 那種加密法,也就是把電腦數據重新排列的方法,現在更先進的是數學加密法,裡面的key是一個整數,那已經和傳統的密碼本沒有太大關係了。

林:湯講的密碼本是用於一對一的加密通訊,所以你可以挑選你的“小說”和“電腦程序”,而且還可以玩特殊的花招玩假碼。但一間銀行對它在 ATM 面前的客戶就不能來這一套。它要用同一個“程序”來對付所有的客戶。所以它這個加密法要比那些將1 到36 重新排列的電腦程序高明很多才成。現今的數學加密法是用相當複雜的數學函數來把數據加密。這些函數的型式是公開的,所保密的是函數的幾個參數。而這些參數都是在通訊之初隨機產生的。

黃:參數是在通訊之初隨機產生這一點很重要。現今的數學加密法方案是公開的,打開門做生意,唯一保密的就是這些參數,正因為這些參數是通訊當時隨機搞出來的。在這之前大家都不知道,所以你在銀行裡安排臥底也沒有用。既然加密解密都用函數,這就沒有密碼本

林:現在的密碼戰是沒由密碼本的密碼戰,說得誇張點現在的數學加密法是影響了間諜和臥底的生計。就算你這個密碼間諜貌美如花也只無法像以前那樣大顯身手了。在某個意義上來講人家現在是不跟你玩間諜而改玩純技術。

湯:那麼你們這些讀數學的豈不是可以悶聲發大財?

林:我們生不逢時,如果遲幾十年出世又不同。

湯:你可以簡單地介紹一下現今的數學加密法嗎?

黃:大部分的數學加密法都涉及公鑰和私鑰,不是三言兩語能講得明白。我就以簡單一點的 Diffie Hellman key exchange 作例子吧。通訊前雙方會互相交換一些參數。兩方的電腦各自隨機搞出兩組參數。其中一組是留給自用而且要保密的,另一組參數卻不加保密的傳送到對方。收到對方的參數後每一方就連同留給自用那一組參數來算出一個最重要的參數,也就是林剛才說的 key。奇妙的是另一方經過同一步驟也會算出同一個 key。雙方有了同一個秘密的key後就可以用它在一個“公式”上加密解密了。

林:你講的 Diffie Hellman key exchange 嚴格講只是一種加密鑰交遞法。加密鑰交遞成功後你可以根據這加密鑰的內容去把要傳送的數據重新組合後才發出去,收件的一方就根據同一個加密鑰作逆運算來還原那數據。在你這個例子數學只用在鑰的交遞,並不一定在加密解密上。不過現今的數學加密法都需要你所講的雙方交換參數那個步驟。

湯:在我看來黃想簡單介紹一下,林卻去抓痛腳,那就苦了我這個聽眾了。再問你們一個問題:現今的數學加密法有缺點嗎?

林:最重要和最危險的時刻是在通訊前互相交換參數的那一瞬間。當時如果有個黑客把通訊兩方所傳送到對方的參數都收下,就算他沒有得到另外一組留給自用的參數,理論上他還可以通過冗長的計算來算出最後那個秘密參數。不過就是用最快的電腦也得化上幾個月的時間。如果量子計算機研製成功那又不同。

湯:如果那是海軍總部向戰艦發戰鬥命令,等你破解密碼後海戰早就打完了。

黃:不過還有另一個情形。你上網處理銀行事務,黑客把你電腦和銀行總機兩方所傳送到對方的參數都收下了,還收了加密後的數據,當然這些數據當時是沒法看懂的。但不要忘記你所輸入的 account password 也是加密後的數據之一。當黑客化了三個月算出那次通訊所用的那個秘密參數後,他就可以解讀當天你和銀行通訊加密後的數據, 包括你的 account password 。如果你還沒有更改 password 的話你就有麻煩了。

林:這就是銀行希望我們經常改變 password 的原因?

黃:不錯。

*************************************
注:這裡是講 encryption 和 cypher,中文是“密碼”或“編碼”。 但 password  也叫“密碼”,那就叫我為難了。其實 password 可以叫“口令”。
 

** To view more on the author's blog, please click this: 宁辉博客

Go to top
JSN Boot template designed by JoomlaShine.com