想跟行外人士講清楚非對稱加密,似乎不是個容易的事情。
大概用快遞(或郵寄)來打比方是比較合適的方法。
場景:北京的張小發,要給紐約的李小收發個快遞,假設是一塊形狀不確定的金塊,2公斤。
張小發把這塊金塊用密碼箱裝好鎖好,設定密碼為396173(隨機的,沒有含義),然後把箱子交給快遞員,快遞員通過公司的系統把箱子發出去。張小發通過電話把密碼告訴李小收。李小收在收到箱子之後,用這個密碼把箱子開啟,拿到完整的金塊。完畢。
這是一個正常的完整的順利的快遞流程。
那麼,接下來,開始出現可能的問題。
從北京到紐約的快遞,中間可能倒過無數次的手,任何人都無法保證“沒有人想開啟這個箱子看看裡面是什麼東西這麼重”,黑暗森林中任何人都不可相信。
實際上,採用電話告知這種方式,在不破壞箱子的情況下,是安全的,別人解不開這個密碼鎖(我們不說暴力嘗試破解的情況,即使是暴力破解,也是10^6,100,0000次,用手工的方式,基本不可能)(我們不說用挖掘機那種純暴力破解)。
在網際網路上,前面提到的金塊,就是資訊。密碼箱,就是加密演算法。裝了金塊的密碼箱,就是經過加密演算法包裝了的資訊。
那麼,鑑於雙方都是機器,要從北京發往紐約的一段資訊,是沒有辦法通過打電話的方式告知對方密碼的,一切都只能靠網路傳輸。
就相當於在人類的世界中,在電話發明之前,如果你想讓對方能夠解開密碼鎖,就只能讓快遞員轉達,或者單獨寄一封信,而這封信,也只能通過這個快遞員發出去(別提火封),那麼就等於這個密碼箱對快遞員是公開的,可以想象,這是很危險的事情。
所以,人們發明了一種方法。既要送金塊,又不讓別人看裡面的東西。可以想像,歷史長河中,人們一定想了很多很多的辦法,其中的一些逐漸被淘汰了。最近留下的就是我們的主角,非對稱加密演算法。
這裡可以稍微停一下,如果現在請你來想一個妥善的辦法,你會怎樣設計這個流程呢?
現假設,我們們世界上的每個人可以製造一種箱子,這種箱子的鑰匙,只有箱子的主人本人有,就像你家門鑰匙一樣,這個就是私鑰。
現在,張小發要給李小收發快遞,先給李小收寄了一封信,讓他發一個箱子過來(也可以是預存在張小發家裡的,就像順豐的快遞單;也可以想像成李小收能量巨大,地球上任何地方都可以買到李小收的快遞箱,總之任何人都可以獲得未上鎖的李小收的箱子),這個箱子,只有李小收本人用私鑰可以開啟。那麼,李小收的這種箱子,就是公鑰,拿到時必須是未上鎖的,一旦東西放進去,蓋子合上(公鑰加密),就只有李小收能開啟了。
一言以蔽之,要給李小收發東西,必須用李小收特製的箱子(公鑰),如果你沒有他的箱子,就申請一個。他特製的箱子,就只有他能開啟,用鑰匙(私鑰)。
這就是非對稱加密演算法的形像化過程。