2008年9月19日 星期五

非對稱密鑰(二)

在討論上次問題的答案前,我先和大家研究一下密碼學的一些基本概念。

所謂密碼,其實有點像鎖和鎖匙,理論上,每把鎖便對應一款(不是一條)鎖匙,若不是甚麼‘自動鎖’,我們便會用這鎖匙把鎖鎖上,要打開鎖時,便用同一款鎖匙。

就以最簡單的單替代移位碼為例,這方法就是把要加密的英文字母,移動一定的位置,例如,相方約好了移4位,這即是說凡a便寫成e,b便寫成f,如此類推,v就寫成z,而w便寫成a。

例如boy便會寫成fsc,這樣,一篇經過這樣編碼的明文,便會變成看似毫無意義的密文。這個方法便好像一把鎖,而4便是鎖匙(密鑰),這裏便用這個鎖和匙,把明文‘鎖’起來。

接收一方祗要知道方法和密鑰(在這裏便是4),便可由密文回復出明文來(解鎖)。

但請你千萬不要再用這種‘低能密碼’,祗要略加訓練,一個普通人都可用手動方法,迅速解密。其中最簡單的方法便是窮盡法(exhaustion),因為密鑰的可能性祗有25個(0和26都不可用),窮盡這25個可能亦祗是轉眼間的事而已!

這即是說,加密了的密文,其實是存在被破譯的可能性,這門學問便稱為密碼分析學(cryptanalysis)。長久以來,這都是語文學家(特別是精通多國語言的)的專利。直到第二次世界大戰前,機械加密開始流行,數學家在這門學問的地位便變得越來越重要。今天,加密的對像不再限於自然語言,而是任何的電腦數據,語言學家差不多全淡出,取而代之的便是數學家。

密碼和密碼破解就存在著辯證的關係,上述的低能方法實太容易被破解了,新的編碼方法便應運而生,接著便是新的破解方法。但不論方法如何複雜,從抽象層面看,都是一把鎖(編碼和解碼算法)和一條鎖匙(key一個共同的秘密,在上例便是4)。而加密的key,同時也是解密的key。

這種方法不錯,但要面對一個問題,這就是加密者與解密者必需有一個共同秘密。就以第二次世界大戰為例,潛艇一出海,便可能要一兩個月才回航,於是,它們便要帶著一本密鑰本,由於重用同一密鑰太多,被破解的機會便越高,所以,它們會每天都轉換密鑰。可是,若這密鑰本落在敵方,問題便大了!

還記得雍正要管理千多條鎖匙嗎?若你覺這已不簡單,就再想想二次大戰時,不要說是要破解敵軍密碼,就算是己方也要為每個通訊單位,每天檢出不同的密鑰,實在已非常不簡單!事實上,就以德軍為例,他們還會以密鑰本的當天密鑰作起點,傳送即時選取的密鑰,然後以該密鑰來作正式通訊之用。然後,又會另選密鑰,在通訊結束前傳送,作為下次通訊之用。情況實比想像中複雜得多了。

但無論密碼系統多嚴密,還是要解決密鑰分發(key distribution)的問題!

昨天的問題,其實就是密鑰分發問題的一些思考。你和朋友就是沒有預先約定的密鑰。相對於雍正的例子,他便要在北京接見密探,親授盒子和鎖匙。這即是說,未經雍正授匙的,便不可能以這種方法秘密上書了!

昨天問題的解決方法可以是這樣的,你先把物品上鎖寄到你的朋友處,你的朋友無開鎖的鎖匙,但他再在箱上加上自己的鎖,然後再把箱子寄回給你,你就解除你的鎖(因你有自己鎖匙),然後,把剩下你朋友的鎖的箱子再寄給你的朋友,這次,他便可以用他的鎖匙打開箱子了。

以上理念,給了我們一些啟示。但並不適合於直接用於密碼學上,原因下次再討論罷。

沒有留言:

網誌存檔