RSA 演算法是如何誕生的
最近為了研究某個極其無聊的問題,讀了一些公鑰加密的歷史,意外地發現這段歷史竟然非常有趣。尤其是 RSA 演算法的誕生過程,被很多書寫得非常勵志,看得人熱血澎湃。果然比起演算法本身,這些背後的故事更能吸引我的興趣。
RSA 演算法具體是怎麼回事,我就不在這瞎說了。簡介可以看 Wikipedia,如果想形象一點理解演算法本身,這兒有個不錯的視訊,可以通過它瞭解 RSA 的基本思想。我就直接從 RSA 這三個人說起了。參考的書籍資料列在文末。
RSA 背後的三個小夥
RSA 是由三個提出者 Ron Rivest、Adi Shamir 和 Leonard Adleman 的姓氏首字母組成的。這三個人風格迥異,組成了一個技能互補的完美團隊。
Ron Rivest,RSA 中的 R。他在耶魯讀數學系,隨後跑到史丹佛讀電腦科學系研究人工智慧。他所研究的課題——讓機器人在沒有人干預的情況下在停車場散步,在那個電腦科學系僅成立四年的年代明顯太過樂觀,但他依然樂此不疲。畢業後他接受 MIT 任教的工作機會。也許是因為多年積累的科研氛圍,他對新技術非常興奮,大量閱讀前沿文獻。與此同時,他認為迷人的理論應該與現實世界相結合,才能散發魅力,對世界有所改變,這也是他的理想。
Adi Shamir,RSA 中的 S。他是以色列人,和 Rivest 一樣,學數學後轉電腦科學進一步深造,畢業後以訪問學者的身份來到 MIT。他很聰明,學習能力超強。雖然他在數學上的造詣頗深,但起初他在演算法方面的知識十分匱乏,當他接到 Rivest 關於演算法高階課程講授的邀請信時連連叫苦,教演算法已經夠嗆了,還什麼高階課程?給博士生講的麼?雖然如此,他還是硬著頭皮前往 MIT,之後很快投入到學習中,整天泡在圖書館,讀了一書架關於演算法的書籍,最終僅用兩週便掌握了所需的知識。
Leonard Adleman,RSA 中的 A。自幼胸無大志,從未想過做什麼數學家。讀大學時受各方面影響,甚至包括電視節目的影響,在專業選擇上猶豫不決,最終因為學數學會有大量時間做別的而選擇就讀數學系。畢業後在美國銀行做程式設計師,之後想去學醫,被錄取了卻又改變主意想研究物理,上了幾堂課又覺得沒意思。最後他怕掛科對找工作有影響,跑去圖書館借了本電腦科學的書,一直沒還,學校就會因此扣留成績單。輾轉幾次後,他最終選擇讀電腦科學 PhD。畢業後同樣在 MIT 任教。
這三人當時都非常年輕,二十多、三十出頭的樣子。他們的辦公室距離很近,可以經常串門。於是故事就從一次 Adleman 的串門開始了。
自左至右:Adi Shamir, Ron Rivest, Leonard Adleman (via)
42次的失敗
1976 年底的某天,Adleman 無意推開 Rivest 的房門。熱愛新技術的 Rivest 果不其然正拿著份樓上的 Whitfield Diffie 與 Martin Hellman 合作發表的新論文研究。自認為對前沿理念無所不曉的 Rivest,沒料到這篇文章提出了一個前所未有的思路,這讓他興奮不已。正琢磨著,Adleman 推門進來了,Rivest 便忘我地向 Adleman 講解了這篇論文中所述的思想,在 Adleman 聽起來大約是這樣的:
公鑰密碼 blah blah blah…不對稱密碼 blah blah blah…單向函式 blah blah blah…但是符合條件的單向函式目前沒找到。我有信心找到這樣的單向函式,你看你要不要和我一起試試?
這些顯然不足以讓早已下決心走純理論路線的 Adleman 動心,對此他只是報以一個“禮貌的哈欠”。想當初選擇讀電腦科學,除了方便找工作,Adleman 還深受馬丁加德納專欄的影響。專欄中寫到的哥德爾定理讓他感到驚豔,深深體會到數學之美,如今只有高斯之流方能入他的眼,眼下 Rivest 滔滔不絕的什麼加密解密,在他看來既不高階也不好玩。
好在 Rivest 拉到了另一個同盟,也就是隔壁的 Shamir。Shamir 一聽說這篇文章就立刻意識到它的價值,二人一拍即合,開始了他們晝夜不休的單向函式尋找之旅。因為兩人都頭腦靈活,很快就想到了一些方案。儘管 Adleman 不情願參與其中,他們還是會把結果拿給 Adleman,Adleman 的角色就是逐個擊破這些方案,找出各種漏洞,給那兩個頭腦發熱的人潑點冷水,免得他們走彎路。
三人走火入魔一般,吃飯聊、喝酒聊,甚至去滑雪度假也不忘討論這件事。Shamir 就在滑雪的時候想到了一個絕妙的點子,以至於把滑雪板都落在了身後。當他意識到這一點回頭去取時,卻又不幸忘記了那個一閃而過的點子。相對來說給他們啟發的 Diffie 要幸運一些,他在下樓買可樂的時候同樣讓靈感溜走,好在上樓的過程中他又想起來了,這個差點溜走的靈感正是 Rivest 那天手中所拿論文的核心思想,為 RSA 演算法奠定了基礎。
起初 Rivest 和 Shamir 構造出來的演算法很快就能被 Adleman 破解,二人受到強烈的打擊,以至於有一階段他們走向了另一個極端,試圖證明 Diffie 他們的想法根本就是不靠譜的。但慢慢的,破解變得沒那麼容易,特別是他們的第 32 號方案,Adleman 用了一晚上才找出漏洞,這讓他們感覺勝利就在眼前。
就這樣,Rivest 和 Shamir 先後丟擲了 42 個方案,雖然這 42 個全部被 Adleman 擊破,不過他們的努力並不算白費,至少指出了 42 條錯誤的路線。
演算法的誕生與命名
1977 年 4 月,Rivest 和其餘兩人蔘加了猶太逾越節的 Party,喝了些酒。到家後 Rivest 睡不著,隨手翻了翻數學書,隨後一個靈感逐漸清晰起來。他大氣不敢出一口,冷靜下來連夜整理自己的思路,一氣呵成寫就了一篇論文。次日,Rivest 把論文拿給 Adleman,做好再一次徒勞的心理準備,但這一次 Adleman 認輸了,認為這個方案應該是可行的。
按照慣例,Rivest 按姓氏字母序將三人的名字署在論文上,也就是 Adleman、Rivest、Shamir,但 Adleman 總覺得自己貢獻微乎其微,不過是潑潑冷水,不至於還要署個名,便要求 Rivest 拿掉自己的名字。在 Rivest 的堅持下,他最終要求至少把自己的名字放到最後。也正因為如此,RSA 叫做 RSA沒有被叫做 ARS。雖然 Adleman 一開始認為這注定是他諸多論文中最不起眼的一篇,RSA 走紅後他還是調侃說,越來越覺得 ARS 更順口了。
之後
之後的歷史我們就非常熟悉了,他們的論文受到各方讚賞。Rivest 還把論文發給馬丁加德納一份,加德納非常感興趣,把 Rivest 請到家裡面談,進一步瞭解 RSA 演算法。當然此前,加德納還不忘先表演一個撲克魔術。這次會面也促成後來馬丁加德納在他著名的專欄刊登 RSA 演算法及破解獎金的故事。至於 R、S、A 這三人,依然保持著友誼,還成立了 RSA 公司,賺了一大筆錢。
最後,既然 RSA 是根據提出者命名的,必然也逃不出 Stigler’s law 的魔爪。的確從時間上來說,RSA 這三人並非最早提出這個演算法的人。事實上早於這三人四年時間,RSA 演算法的思想就被英國學者構造出來了。早在 1969 年,英國密碼學家 James Ellis 就想到了公鑰密碼的概念,但同樣卡在尋找單向函式這個問題上。1973 年 9 月,年僅 26 歲的數學家 Clifford Cocks 聽說這個思想後,在完全不瞭解狀況的心理狀態下花不到半小時就找到了 Rivest 他們苦思冥想的方案。但是,他們效力於政府,這個絕妙的想法立刻被相關機構封鎖,變為機密,誰也不能對外公開自己的發現,於是他們眼睜睜地看著 Diffie 及 RSA 等人重現了他們當時的研究並享有盛譽。直到 1997 年底,時隔二十餘年,這件事情才被公之於眾。遺憾的是那時候 Ellis 已經過世一個月,直至逝世都是一個無名英雄。
參考資料
- Crypto: How the Code Rebels Beat the Government–Saving Privacy in the Digital Age:Steven Levy 所著,大部分內容都是從這本書瞭解到的。書裡從 Whitfield Diffie 的八卦(是真的八卦,和他老婆的相遇之類)說起,一直說到非常現實的 NSA 涉入等情節,寫得很詳細很有趣。中譯本譯作《隱私的終結》,但翻譯水平非常有限,比如把愛倫坡譯成艾倫坡和阿蘭坡兩種不同譯法,把 cutting-edge 翻譯成邊緣,或者乾脆把演算法水平有待提高翻譯成精通演算法什麼的…
- The Code Book: The Science of Secrecy from Ancient Egypt to Quantum Cryptography:中譯本《密碼故事》,除了密碼從古至今的演變,書裡還單獨對 Ellis 和 Cocks 等人的工作做了詳細的講述。我還沒看完這本書,但感覺會很有意思。
- 關於 Adleman 的更多八卦可以看這篇採訪,總覺得他的氣場和其餘兩人很不搭,各種變卦和無所謂。啊對了,Adleman 也是將計算機病毒命名為 Computer virus 的人。
相關文章
- 爆款小程式是如何誕生的?
- Web3的DeSci是如何誕生的?Web
- 網際網路是如何誕生的?——資訊圖
- JavaScript是怎麼誕生的JavaScript
- 一個遊戲角色是如何誕生的——原畫篇遊戲
- Lisp的誕生Lisp
- 從傳統書法到遊戲英雄:“上官婉兒”是如何誕生的?遊戲
- iDaily的誕生AI
- 探索React Hooks:原來它們是這樣誕生的!ReactHook
- Node Stream pipe的誕生
- 比特幣的誕生比特幣
- 最偉大的計算機程式設計師是如何誕生的?—解讀高德納計算機程式設計師
- PathToGo 誕生記Go
- Javascript誕生記JavaScript
- RSA演算法演算法
- 論一個遊戲角色是怎麼誕生的——原畫篇遊戲
- 一款Galgame是如何誕生的?商業化Galgame的製作流程和注意事項GAM
- 一款由全球玩家共同開發十年的同人遊戲是如何誕生的?遊戲
- 程式的誕生到滅亡
- flutter 入門 - flutter的誕生Flutter
- Git 系列之「Git 的誕生」Git
- RSA演算法,自己的理解!演算法
- 《淺談利用RSA演算法防止非法序號產生器的製作》演算法
- RSA加密演算法加密演算法
- RSA演算法原理演算法
- RSA演算法(一)演算法
- 誕生至今,大資料的真正含義到底是什麼?大資料
- 網紅女神是怎麼誕生的-深度學習影象分割技術深度學習
- RSA演算法中,為什麼需要的是兩個素數?演算法
- 安卓第五夜 維納斯的誕生安卓
- 4人開發、首周銷量50萬,這個Steam好評94%的黑馬是如何誕生的
- 天價域名是如何誕生的?GoDaddy告訴你,域名交易的學問沒那麼簡單Go
- Unity誕生與發展Unity
- RSA演算法簡介演算法
- RSA演算法詳解演算法
- RSA演算法原理(二)演算法
- RSA演算法原理(一)演算法
- [轉載]RSA演算法演算法