用信鴿解釋 HTTPS:愛麗絲的故事
21CTO社群導讀:
密碼與加密技術,在一般人的眼裡是一個比較難理解的話題。它有不少數學公式,證明。除非我們是去開發密碼學系統,其實大部分的複雜性沒有必要去證明和理解。
如果你想建立下一代HTTPS協議,希望在本文中獲得靈感,那我很抱歉的說,鴿子的故事還遠遠不夠。看來您已做好心理準備了,來衝一杯咖啡,一起享用文章吧~
愛麗絲,鮑勃與信鴿
您在網際網路上做任何的行為,包括閱讀本篇文章,在Amazon上買東西,上傳寵物貓圖片等,歸根結底都是傳送與接送來自伺服器的訊息。
這似乎有些抽象,我們把這些資訊想象是由信鴿來傳遞的。HTTPS的工作方式也和這一樣,雖然速度要快很多。
我們不談伺服器,客戶端和黑客,我們一起來討論三個人:愛麗絲、鮑勃和馬洛裡的故事。如果你不是第一次理解密碼學概念,那麼我們將會一起認識和了解這些名字,因為它們在技術文獻中被廣泛使用。
第一次通訊
如果愛麗絲希望發訊息給鮑勃先生,她將寫好的信綁在信鴿的腿上,讓它帶給鮑勃。鮑勃收到信,開啟信很開心,這一切是多麼美好!
但是馬洛裡是個好奇分子,在鴿子飛行過程攔截了它,拆開了信,看完還篡改了內容。鮑勃收到的信,也許五味雜陳,他不知道愛麗絲的信已經在中途被人為修改。
這個故事映射了HTTP 協議的工作原理,是不是有點可怕的許可權? 我肯定不會通過HTTP傳送我的銀行帳號,也不應該如此。
加密演算法
如今,愛麗絲與鮑勃聰明瞭很多。
他們之間彼此同意使用密碼來寫資訊。他們將每個英文字元在字母表後移3位。例如 D→A,E→B,F→C,例如“secret message”按此規則寫就的內容就是:“pbzobq jbppxdb”。
現在,馬洛裡這個傢伙再次攔截信鴿,他看不懂文中的內容,也就沒辦法來篡改成其他文字。
鮑勃同學知道加密規則,可以非常容易的將程式碼反向解密,A→D,B→E,C→F,密文被解密為“secret message”。
成功了!
這就是我們常說的“對稱金鑰”加密,即我們知道如何加密一個資訊,也知道如何解密它。
我在上面描述的程式碼,通常被稱為凱撒密碼(Caesar cipher)。在現實生活中,我們使用更復雜的程式碼,但思想是一致的。
我們如何確定金鑰
如果除了傳送者和接收者之外,沒有其它人知道使用了什麼金鑰,那麼,對稱金鑰和密碼是非常安全的。在凱撒密碼中, 關鍵是我們將每個字母移動了多少個字母。 在我們的例子中,我們使用了3個字元的偏移量,當然也可以使用4或12位。
如果愛麗絲和鮑勃同學在用信使之前並沒有見過面,彼此並不認識,他們之間就無法安全建立金鑰。 如果把金鑰放在訊息信體中,馬洛裡攔截後會發現這個金鑰,他就可以順利解密,閱讀完資訊,按照自己的意願篡改訊息中的內容。
這種情況被稱為中間人攻擊的典型例子,避免被攻擊的唯一方法就是把加密系統全部重寫。
信鴿攜帶 一隻盒子
愛麗絲和鮑勃同學一起重構了新的通訊系統。 當愛立絲想要給鮑勃發訊息時,她們按照下列步驟操作:
第一. 愛麗絲不發任何訊息,只向鮑勃放飛信鴿;
第二. 鮑勃見到鴿子,再把一個已經開啟的盒子交給鴿子帶回給愛麗絲,但是盒子的鑰匙在自己的手裡;
第三. 愛麗絲收到開鎖的箱子,把資訊放在盒子裡,鎖上箱子,叫信鴿帶給鮑勃;
第四. 鮑勃收到盒子,用鑰匙開鎖後閱讀愛麗絲的信件。
這樣,馬洛裡這個傢伙再攔截鴿子,第一次毫無所獲,第二次是個加鎖的盒子,他也沒辦法開啟,因為他沒有鑰匙。
當鮑勃想給愛麗絲髮信的時候,也遵循同樣的過程。
愛麗絲和鮑勃就是使用了密碼學中所說的“不對稱金鑰”加密技術。
為什麼叫不對稱? 就是即使你加密了一個訊息(給盒子加鎖),你也不能解密它(打不開一個已經上鎖的盒子)。
在技術術語中,這個箱子被稱為“公鑰”,開啟它的鑰匙被稱為“私鑰”。
我如何信任這個盒子
可能你也注意到,這套系統仍然存在安全問題。
當鮑勃收到那個開放的盒子時,他怎麼確定它一定來自愛麗絲。馬洛裡在攔截時,可以把盒子替換成自己的,返給鮑勃的信也可以被馬洛裡所篡改。
於是,愛麗絲決定在盒子上加上自己的簽名,這樣鮑勃在收到盒子時,先檢查簽名,確定是愛麗絲髮送了盒子。
各位看官中一些人可能會想到,鮑勃如何識別愛麗絲的簽名? 這是個好問題。
愛麗絲和鮑勃也意識到這個情況,於是他們決定,不再使用愛麗絲簽名的盒子,而轉而使用泰德簽名的盒子。
泰德是何方神聖? 這是一位非常有名,值得依賴的長者。 泰德先生為每個人提供簽名服務,人們都相信他只會給正直合法的人簽名。
泰德確定愛麗絲要求籤名,他只簽署一個愛麗絲的盒子。 馬洛裡這廝如果替換由泰德簽名的艾麗絲盒子,鮑勃會知道這是一個欺詐的盒子。泰德先生會驗證兩個人的身份才會給他們提供簽名。
泰德長者在技術上通常被稱為“證書頒發機構”,各位正在閱讀本文的瀏覽器就附帶著很多證書頒發機構的簽名。
盒子有點重
現在,愛麗絲和鮑勃正在用一個可靠的系統進行通訊。但是,他們發現攜帶盒子的信鴿比只攜帶資訊的信鴿慢了不少。
於是他們決定將使用盒子的方法(非對稱加密)換成選擇一個金鑰來使用對稱加密訊息(凱撒密碼)。
這樣,他們得到了兩全齊美的收穫:非對稱加密的可靠性與對稱加密的效率。
小結
在現實世界中,鴿子的速度並不會特別慢,使用非對稱加密訊息比用對稱加密要慢,因此我們只有它來交換加密金鑰。
現在,各位應該已經清晰HTTPS是如何工作的了。您的咖啡也應該準備好了,去喝吧,享受我們的美好生活 。
作者:Andrea Zanin。一名自學成長的程式員和數學愛好者。
編譯:21CTO
來源: ofollow,noindex" target="_blank">https://medium.freecodecamp.or ... 93351