啥叫非對稱加密呀?

 

在很久很久以前,天和地還沒有分開,有個......

 

等下!串臺了!

 

咳咳,我們的主人公是兩個人,一位叫塞維爾拉維奇馮部羅丹奧尼爾丁吉利特羅夫斯基,還有一位叫艾亞索菲斯泰洛括沃藍齊斯米莉倪芭浩漢斯汀。

 

爲了方便記憶,簡化下,兩位好盆友,一個叫小紅,一個叫小藍。

 

世界上最遠的距離,不是你離我十萬八千里,我卻得不到你。而是你就在我隔壁,我家卻沒網。

 

二人經常通過網絡聯繫,互稱知己。談天論地,雖然二人初中都沒有畢業;談山河日月,即使二人都是標準肥宅;談女朋友,縱使兩個人都是單身貴族。

 

             

 

一天,二人談到些有趣的隱私問題,哈哈大笑。鍵盤都笑出了帕金森,屏幕晃出了飛蚊症。

 

突然,小藍的腦子裏猛地出現了一個詭異的笑聲。就像有人咬着牙,用力把氣從肚子裏面頂出來似的。小藍渾身一抖,不再笑了。

 

二人聊天記錄:

藍:兄弟!

紅:What's the matter, man?

藍:你覺得這真的是我們兩個人的對話嗎?

紅:啥意思?兄弟,我膽小,你表嚇我~

藍:不是,我是說,我們的聊天信息都是通過網絡發送的,你說會不會有人在中間截獲了我們的消息,一邊看一邊樂呢?

紅:啥!!!你是說除了你我之外,還有人知道我一個七尺男兒喜歡粉紅獨角獸!!!

藍:........好吧,雖然例子有點怪,但就是這個意思。

紅:........那咋辦,我沒隱私了都。

 

              

藍:我有個解決辦法。

紅:啥?

藍:我們給信息加密,加密解密的密碼只有我們兩個知道。每次發送數據前,數據先加密,接收方收到後,再用密碼解密。這樣就可以得到原來的消息了,而且傳輸過程中,信息是加密的,即使被人截取,他也看不懂,拿我們沒法子。

紅:好辦法,就這麼辦!

藍:嗯嗯,我現在就去寫加密解密算法,等會密碼發你。

 

(他們口中說的密碼,也就是我們熟知的“密鑰”。額......請注意,這裏念yue,四聲,而不是念yao。千萬別在別人讀成mi yue時笑對面是文盲,等你百度完後就笑不出了。如果你認爲百度也是文盲除外。)

                

 

風吹了柳絮,雨浸了嫩芽。總之長敘短說,一週過去了,小紅還沒有收到小藍的加密算法,更不用說密鑰了。

 

紅:兄弟,咋回事!還沒寫完?

藍:那倒不是,當天就寫完了,只是......

紅:只是啥?褲子都脫了,你不說了?

藍:汗......,有些問題,你別急,聽我慢慢說。一開始,我們想要達到的目標是這種:

              

 

紅:沒錯,每次發送消息前,先用只有我們兩個人知道的密鑰對數據進行加密。發送過去後,在用同樣的密鑰進行解密,從而拿到數據。因爲密鑰只有我們兩個知道,所以能夠達到信息的安全傳輸。有什麼問題?

藍:......怎樣確保,密鑰只要我們兩個知道?

紅:......

 

這的確是個問題,既然消息在傳輸過程中有可能被人劫持,那告訴對方的密鑰又爲什麼不可以呢。如果密鑰被劫持了,別人也可以解密消息,完全達不到開始的目的了。

 

紅:我去找你?我們面對面的說密鑰,這樣就能確保只有我們兩個知道了。

藍:是可以解決問題。但還有新的問題,我還有美國,新加坡,馬來西亞,泰國......各國的朋友。我想和他們聯繫,還得先環遊世界面對面和他們約定密鑰。如果麻煩到這種程度,那信息就讓別人劫持去算了。

紅:......

 

小紅再一次陷入沉默。

 

藍:不僅如此,還有個問題。我們兩個人聯繫,需要一個只有我們兩個人知道的密鑰,當我和小綠聯繫的時候,我就會又有一個只有我和小綠知道的密鑰。你和小綠聯繫時也是這樣,我們三個人每個人保留着兩把密鑰。當我們的朋友圈變大後,每個人手裏都要有和其他人數相同的密鑰個數。如果朋友圈裏有N個人,那整個朋友圈需要保存N * (N - 1)個密鑰,對於密鑰的分配和管理還是個不小的問題呢。   

                 

 

加密密鑰同時也被用作解密密鑰,這種加密技術在密碼學中叫做對稱加密技術(或者傳統加密技術)。通過二人的對話,我們可發現了對稱加密技術的缺點:

1.首次通信協商共同密鑰時不安全。

2.總密鑰數量較大時難以管理。

 

說了對稱加密,非對稱加密的概念也就呼之欲出了吧,就是加密密鑰和解密密鑰不同的加密技術。請繼續收看二位青年的故事。

 

從那之後,紅藍二人再也沒有在網絡上聯繫過。大約過了兩週後,藍主動聯繫紅。

藍:hey, 哥們,我知道怎麼辦了!

紅:啥?啥怎麼辦?

藍:你喝假酒了嗎!當然是怎樣安全傳輸消息啦!

紅:真的!啥辦法?

藍:加密!

紅:......不還是一樣嗎,我們已經否定這種方案了呀。

藍:這次不一樣,你聽我說......

bla,bla,bla............

小紅聽後兩眼放光:六啊,這你都能想出來!

 

小藍的解釋大概是這樣的:

每個人手中拿着兩個密鑰,其中一個是對外公開的,任何人都知道,稱之爲公鑰。還有一個是隻有自己知道的密鑰,稱之爲私鑰。用公鑰加密的信息,只能通過私鑰解密出來。反過來,用私鑰加密的消息,只能用對應的公鑰解密出來。當小紅需要向小藍髮消息時,先從小藍那拿到“公鑰”,用小藍的“公鑰”對數據進行加密,然後發送給小藍。小藍拿到數據後,用自己的“私鑰”對數據進行解密,得到消息。這種辦法從始至終都未向他人公開過自己的私鑰,包括髮數據的人,而能夠解密公鑰的,也只有自己的私鑰,完美的想法。

 

反過來相同,小藍先拿到小紅的公鑰,對數據進行加密後返回,小紅拿自己私鑰解密得到數據。(因爲例子中公鑰的功能是對數據加密,所以用一把小鎖來指代,形象些~)

 

但是不久後,紅藍二人又有了新的問題——非對稱加密對數據操作過於複雜,處理時間太長,這大大降低了傳輸的效率。不過很好解決,既然我們可以保證安全傳輸了,那也就是我們開頭說的對稱加密的密鑰也就可以通過非對稱加密來傳輸,密鑰安全到達後,之後的消息發送就可以回頭使用對稱加密的技術啦。

 

也就是說,我們首次通信用非對稱加密傳送密鑰,之後通過密鑰使用對稱加密技術進行聯繫,完美的優化。

 

有人說,公鑰加密的數據,只能靠自己的私鑰解密,這種技術實現起來真的容易嗎?其實,如果大家對“歐拉定理”有些許的瞭解,就知道,這不是想象中那麼不可能的事情。正推沒問題,如果想要反推私鑰的話,難度是不能想象的了。

 

對稱加密技術的弊端得到了解決,首先,私鑰不會公開,也不需要傳輸,保證了他的安全性。其次,無論朋友圈怎樣變大,每個人只需要兩個密鑰——公鑰和私鑰。

 

其實到這裏,非對稱加密的基本原理也就說完了。如果意猶未盡,那可以繼續往下看紅藍二人的不服人生,來看下目前效果無可挑剔的非對稱加密有何不妥之處。

 

 

總之生活就是這樣好吧,每當你覺得你戰勝了它,沾沾自喜的時候。它就會跳出來對你說:“剛纔是逗你玩的,現在來真的嘍~”。

 

雖然你很不爽它可以控制一切的能力,但它是因人而生的。再不堪它的調戲,我們也要擺好姿態,回首懟它:“我承認我玩不過你,但是,你過來啊!”

 

這次的玩法是這樣的:

我們上面的例子裏有個黑衣人,蒙着面,罩着頭,很流弊的樣子。就是一會兒哈哈大笑,一會兒黑人問號的那個傢伙。看他是怎樣玩的。

 

你不是弄了個非對稱加密嗎,好啊,看我怎麼用你的技術,反破你的技術。啥叫以牙還牙,啥叫聰明反被聰明誤。

 

所有人都有了自己的公鑰和私鑰,黑衣人也不例外。在一次紅給藍髮消息的過程中,黑哥秀了一把。

 

首先,紅從藍那裏拿藍的公鑰,中間被黑哥攔截了下來,然後黑哥將自己的公鑰發給了紅,藍的公鑰被留了下來。(不留也沒事,畢竟公鑰是公開的,黑哥只是爲了藍的公鑰到不了紅手中。)

 

這裏問題就來了,紅拿到的是黑的公鑰,並用黑的公鑰對數據進行了加密,之後傳了回去。

 

黑再次劫持數據,用自己的私鑰解了密。小藍那邊怎麼辦呢?數據反正我已經拿到了,我再用藍的公鑰對數據進行加密,發給藍。那這兩個小傻瓜就會被矇在鼓裏了,自己的數據泄露了,還一副什麼事情都沒有發生的樣子。

 

這套操作神吧!


              

魔高一尺,道高一丈。現在的問題變成了——我怎樣確定拿到的公鑰是我想拿的。

 

知道怎麼解決嗎?別急慢慢聽我給你說。

 

依舊是那個例子,小藍給小紅髮送自己的公鑰。

 

首先,小藍將自己的公鑰和自己的個人信息合併,通過Hash算法生成一段消息摘要。

 

Hash算法中,最被我們熟知的要數MD5吧,簡單介紹下,如果原文章被改動了一小部分,哪怕是一個標點符號,再用同樣的Hash算法推導出的結果也會發生翻天覆地地變化。通過結果的比較,我們就知道數據是否被改動過。

 

還沒完,這期間,我們需要引入個第三方——CA(Certificate Authority)證書頒發機構。它充當認證中心的作用,在我們之間做裁判。上面我生成的消息摘要,請CA幫忙用它的私鑰對數據進行加密,生成的東西我們叫“數字簽名”。

 

     

 

還有還有,我們再把最開始的公鑰及個人信息 和 剛剛生成的數字簽名合併,合併之後的東西我們叫做數字證書。                                                                                 

然後把數字證書發給紅,紅拿到數據後。執行兩步操作:

 

1.用CA的公鑰解密數字簽名,得到消息摘要。

2.用藍同樣的Hash算法處理公鑰及個人信息,生成消息摘要。

 

通過比較兩個消息摘要是否相同,來判斷數據有沒有被別人動過手腳。(妙嗎~)

 

                       

 

這裏可能還有個問題,要瘋了是不是,怎麼那麼多問題。

 

怎樣確定你拿到的CA的公鑰是CA的?

 

!!!!!!!!!!!!問題竟然回到了初始點。一個雞生蛋,蛋生雞的問題!!!

 

其實,CA也有自己的證書證明自己的身份,然後證明CA身份的上層CA也有自己的證書,證明證明CA身份的CA的CA也有自己證書......沒盡頭嗎!!!

 

有,食物鏈的終端是“操作系統/瀏覽器”預置的頂層CA證書,就默認你信任他們了。

 

(你如果連操作系統都不信的話,那......計算機拯救不了你了~)

 

(後記:關於數字簽名的那部分,也可以通過自己的私鑰對明文進行加密,接收方用發送方的公鑰解密。之後再進行對比,如果有差異,就認爲數據可能中途被修改了。)

 

打完收工,結束。

 

(撰寫不妥之處,歡迎點出。)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章