2008年9月24日 星期三

非對稱密鑰(四)

上文說到,在互聯網上,我們遇到一個和郵遞問題類似的難題。互聯網基於設計的特點,在其上的通訊是不安全的。你可假設你在互聯網傳送些甚麼,都會給別人看得見。

好,那麼郵遞問題的解答,不是就可以用於互聯網呢?答案是不可以,問題就出在編碼和解碼的次序上。郵遞問題是假設箱子上有兩個可上鎖的位置,可以以任何的次序解鎖。但現實上的加密和解密,是有一個後來先走(last in first out LIFO)的限制。這個限制一點也不難理解,你想想,你是如何穿衣和脫衣的,除非你在做特技表演,你是不是會先脫掉最後穿上的衣服呢?用郵遞問題的例子,若箱子祗有一個鎖位,有人便會說,沒問題,我拿一個足夠大的箱子,把整個原來的箱子整個放進去,然後上鎖便行了。若是這樣,你便要先解除後來加上的鎖,而不是你本來上的鎖,這樣當然不行。

這問題終由三位麻省理工學院的研究員Ron Rivest, Adi Shamir, and Leonard Adleman解決了。他們於1977年發表的一篇論文講述一個算法,後來更申請了專利,這算法就以他們的姓氏的簡寫命名,這便是著名的RSA算法。

事實上,英國的研究員Clifford Cocks早在1974年便研究出相同的算法,但由於他工作於軍部,這成果一直被列為機密,直至1997年解密後才發表,所以,RSA是獨立發展出來的。

由於這算法用了數論(number theory),若我在此討論,大家可能會覺枯燥。我又嘗試用比諭說一說它是甚麼,但這又會是‘手指非月’,不講數學,就不是真正的理解。

我們想像一下,若雍正有一種非常特別的鎖,這種鎖有一個特點,就是可以大量複制,每把鎖都是一樣的,鎖本身沒有甚麼秘密,每個密探都可以買一把回來。

但這鎖神奇就神奇在鎖匙,它可以接受無限多的鎖匙,但每種鎖匙都是成對的。你可以隨便用任何一條鎖匙把它鎖上,但鎖上後,就連這條用來鎖上的鎖匙都不可以再打開它。唯一可以再打開這把鎖的,便是與它成對的鎖匙。

於是,雍正便可制作為他專用的一對鎖匙,其中一條就嚴格保密地保存,而另一條就公告天下,任何人都可以從一些可信任的渠道取得這條鎖匙的副本,於是當有任何事情要向雍正告密時,便用這鎖匙把訊息上鎖,一上鎖後,就連他自己也無法打開,然後,把箱子送交雍正,在途中由於沒有雍正的另一條鎖匙,箱子便打不開,唯一打開的方法便是到達雍正,他便用他的私人鎖匙打箱子打開。

這樣,送件人可以很有信心,他的訊息不會被第三者讀到。但雍正並不可以確定送件人的身份。其實,是有辦法確認送件人身份的,大家可先想想,下次我再討論。

但你可能懷疑那裏有這把神奇鎖呢?RSA便正正是這把神奇鎖。RSA可以生成一對對的電子鎖匙,若你拿一匙去加密,便要用另一匙解密,反之亦然。非對稱密鑰的‘非對稱’就是說加密和解密要用不同的匙。

還有一點是非常重要的,我們會有一個相對簡單的方法去生成一對的匙。但若祗得一匙,要計算出另一匙,就會萬分困難。這亦是RSA保護所在。RSA面世後,便經常提出挑戰,這就是請全世界的‘駭客’由一特定的匙,計算破解另一匙出來。

以目前電腦的計算能力來考慮,我們還可以合理地相信RSA是穩妥可靠的。但RSA會不會在下一秒被破解,便祗有天才知道了。

沒有留言:

網誌存檔