用信鴿來解釋 HTTPS
(給
ImportNew
加星標,提高Java技能)
轉自:OSChina,
https://www.oschina.net/translate/https-explained-with-carrier-pigeons
密碼學是一門難以理解的學科,因為它充滿了數學定理。但是除非你要實際開發出一套加密演算法系統,否則你是沒必要強制理解那些深奧的數學定理的。
如果你閱讀本文的目的是想設計下一套 HTTPS 協議,那我只能抱歉的說本文的知識還遠遠不夠;如果不是的話,那麼就煮杯咖啡,輕鬆愉悅的閱讀本文吧。
愛麗絲、鮑伯和 … 信鴿?
你在互聯網上從事的任何活動(閱讀這篇文章、在亞馬遜上購物、上傳圖片等)歸結到底都是從某台伺服器上發送和接收信息。
這個說起來可能有點抽象,不如讓我們假設這些消息都是由信鴿來傳遞的。我知道這個假設有些太過隨意,但相信我 HTTPS 就是這樣工作的,儘管它的速度快的多。
我們先不談伺服器、客戶端或者黑客攻擊,先來聊一下愛麗絲、鮑伯和馬洛里。如果這已不是你第一次接觸密碼學理論,你應該會認識這些名字,因為他們經常在各種密碼學文獻中被提及。
一個簡單的通信方式
如果愛麗絲想給鮑伯發個消息,她會把消息綁在信鴿的腿上寄給鮑伯。然後鮑伯收到了消息,並閱讀了它。這一切都是美好的。
但如果馬洛里攔截了愛麗絲飛翔中的信鴿並且修改消息內容呢?鮑伯將無法知道愛麗絲髮來的消息已經在傳輸過程中被修改了。
這就是 HTTP 的工作方式,很可怕吧?我絕不會通過 HTTP 發送我的銀行憑證,希望你也不會。
隱蔽的密碼
那麼如果愛麗絲和鮑勃都非常的機智。他們一致認同使用一種隱蔽的密碼來書寫他們的信息。他們會將信息中的每個字母按照字母表中的順序前移三位。比如,D→A,E→B,F→C。如此一來,原文為 「secret message」 的信息就變成了 「pbzobq jbppxdb」 。
那現在如果馬洛里再截獲了信鴿,她既不能做出有意義的修改同時也不會知道信息的內容,因為她不知道隱蔽的密碼到底是什麼。然而鮑勃卻可以很容易反轉密碼,依靠 A → D, B → E, C → F 之類的規則破譯信息的內容。加密後的信息 「pbzobq jbppxdb」 會被破解還原為 「secret message」 。
搞定!
這就是對稱密匙加密,因為如果你知道如何加密一段信息那麼你同樣可以解密這段信息。
上述的密碼通常被稱為凱撒碼。在現實生活中,我們會使用更為奇特和複雜的密碼,但原理相同。
我們如何決定密匙?
如果除了發信者和收信者之外沒有人知道使用的是什麼密匙,對稱密匙加密是非常安全的。在凱撒加密中,密匙就是每個字母變到加密字母需要移動多少位的偏移量。我之前的距離中,使用的偏移量是 3 ,但是也可以用 4 或者 12 。
問題是如果愛麗絲和鮑勃在開始用信鴿傳信之前沒有碰過頭,他們沒有一個安全的方式來確立密匙。如果他們自己來在信中傳遞密匙,馬洛里就會截獲信息並發現密匙。這就使得馬洛里可以在愛麗絲和鮑勃開始加密他們的信息之前或之後,閱讀到他們信息的內容並按照她的意願來篡改信息。
這是一個中間人攻擊的典型例子,避免這個問題的唯一方法就是收發信的兩方一起修改他們的編碼系統。
通過信鴿傳遞盒子
所以愛麗絲和鮑勃就想出了一個更好的系統。當鮑勃想要給愛麗絲髮送信息時,他會按照如下的步驟來進行:
鮑勃向愛麗絲送一隻沒有攜帶任何信息的鴿子。
愛麗絲給鮑勃送回鴿子,並且這隻鴿子帶有一個有開著的鎖的盒子,愛麗絲保管著鎖的鑰匙。
鮑勃把信放進盒子中,把鎖鎖上然後把盒子送給愛麗絲。
愛麗絲收到盒子,用鑰匙打開然後閱讀信息。
這樣馬洛里就不能通過截獲鴿子來篡改信息了,因為她沒有打開盒子的鑰匙。當愛麗絲要給鮑勃發送消息的時候同樣按照上述的流程。
愛麗絲和鮑勃所使用的流程通常被稱為非對稱密鑰加密。之所以稱之為非對稱,是因為即使是你把信息編碼(鎖上盒子)也不能破譯信息(打開鎖住的盒子)。
在術語中,盒子被稱為公匙而用來打開盒子的鑰匙被稱為私匙。
如何信任盒子
如果你稍加註意你就會發現還是存在問題。當鮑勃收到盒子時他如何能確定這個盒子來自愛麗絲而不是馬洛里截獲了鴿子然後換了一個她有鑰匙能打開的盒子呢?
愛麗絲決定簽名標記一下盒子,這樣鮑勃收到盒子的時候就可以檢查簽名來確定是愛麗絲送出的盒子了。
那麼你們之中的一些人可能就會想了,鮑勃如何打一開始就能識別出愛麗絲的簽名呢?這是個好問題。愛麗絲和鮑勃也確實有這個問題,所以他們決定讓泰德代替愛麗絲來標記這個盒子。
那麼誰是泰德呢?泰德很有名的,是一個值得信任的傢伙。他會給任何人簽名並且所有人都信任他只會給合法的人簽名標記盒子。
如果泰德可以確認索要簽名的人是愛麗絲,他就會在愛麗絲的盒子上簽名。因此馬洛里就不可能搞到一個有著泰德代表愛麗絲簽了名的盒子,因為鮑勃知道泰德只會給他確認過的人簽名,從而識破馬洛里的詭計。
泰德的角色在術語中被稱為認證機構。而你閱讀此文時所用的瀏覽器打包存有許多認證機構的簽名。
所以當你首次接入一個網站的時候你可以信任來自這個站點的盒子因為你信任泰德而泰德會告訴你盒子是合法的。
沉重的盒子
現在愛麗絲和鮑勃有了一個可靠的系統來進行交流,然他們也意識到讓鴿子攜帶盒子比原本只攜帶信件要慢一些。
因此他們決定只有在選擇用對稱加密來給信息編碼(還記得凱撒加密法吧?)的密匙時,使用傳遞盒子的方法(非對稱加密)。
這樣就可以二者的優點兼具了,非對稱加密的可靠性和對稱加密的高效性。
現實世界中我們不會用信鴿這樣慢的送信手段,但用非對稱加密來編碼信息仍要慢於使用對稱加密技術,所以我們只有在交換編碼密匙的時候會使用非對稱加密技術。
現在你已經了解了HTTPS是如何工作的了,你的咖啡也應該準備好了。好好享用吧你受之無愧。
看完本文有收穫?請轉發分享給更多人
關注「ImportNew」,提升Java技能
喜歡就點「好看」唄~
※Mockito 簡明教程
※ImportNew 一周資訊 : JDK 9 , 10 與 11 中的安全改進
TAG:ImportNew |