密碼學可能是一個難以理解的主題。它充滿了數學證明。除非你真的需要開發密碼系統,否則,如果你只想從宏觀的角度了解密碼學,你并不需要理解這些復雜的內容。
如果你抱著能夠創建下一個 HTTPS 協議的期望打開這篇文章,我不得不遺憾地表示只有信鴿是不夠的。否則,煮一些咖啡,享受這篇文章吧。
Alice,Bob 和信鴿?
你在互聯網上的任何活動(閱讀這篇文章,在亞馬遜上買東西,上傳貓咪的圖片)都歸結為向服務器發送消息和從服務器接收消息。
這么講聽起來可能有點抽象,因此,我們不妨假設這些信息是通過信鴿傳遞的。我明白這么假設顯得很隨意,但請相信我:HTTPS 的工作原理就是這樣的,只是快得多。
本文中我們并不會使用,服務器,客戶端和黑客這樣的術語,取而代之的是,我們會依次使用人名 Alice、 Bob 和 Mallory來代替它們。如果你不是第一次嘗試理解密碼概念,你可以認出這些名字,因為它們被廣泛用于技術文獻中。
一次簡單的通訊
如果 Alice 想要給 Bob 傳遞一條信息,她將信息綁在信鴿的腿上,然后讓信鴿傳給 Bob。Bob 收到信息,讀取信息。一切都正常。
但要是 Mallory 途中攔截了 Alice 的信鴿,并且改變了信息的內容?Bob 無法知道 Alice 發送的信息在傳遞途中被修改了。
這就是HTTP的工作原理。挺可怕的,對吧?我不會通過 HTTP 協議來發送我的銀行憑證,你也不應該這么做。
一個密令
那如果 Alice 和 Bob 都很機靈呢。他們同意將使用密令來寫信息。他們將字母表中的每個字母偏移 3 個位置。比如:D -> A, E -> B, F -> C。明文“secret message”將轉換成“pbzobq jbppxdb”。
現在,如果 Mallory 攔截了信鴿,她既不能把信息改變成一些有意義的信息,也不能明白信息里說的內容,因為她不知道密令。但是Bob可以簡單地反向應用密令(A -> D, B -> E, C -> F)將信息解密。密文“pbzobq jbppxdb”將被解密回“secret message”。
大功告成!
這被稱為對稱密鑰密碼術,因為當你知道如何加密一條信息,你也知道如何給信息解密。
我在上面介紹的密令通常被稱為凱撒密碼。在現實生活中,我們使用更高級和復雜的密令,但是主要思路是相同的。
我們如何決定密鑰是什么?
如果只有發送方和接收方知道密鑰,對稱密鑰密碼術是很安全的。在凱撒密碼中,密鑰是一個偏移值,這個偏移值決定每個字母應該偏移多少。在我們的例子中,我們使用的偏移值是 3,但是也能是 4 或者 12。
不過這么設計會有個問題:在用信鴿傳遞信息之前,如果 Alice 和 Bob 之前從沒見過,他們沒有安全的方式創建一個密鑰。如果他們將密鑰包含在信息之中,Mallory 將攔截信息并且發現密鑰。后果就是:無論 Alice 和 Bob 發送的信息是否加密,Mallory 都能讀取或者改變攔截到的信息。
這是一個典型的中間人攻擊例子。避免它的唯一方法是改變之前的密碼系統。
攜帶盒子的信鴿
所以 Alice 和 Bob 想出了一個更好的系統。當 Bob 想要發送信息給 Alice 時,Alice 將遵照下面的流程:
Bob 向 Alice 傳送一只信鴿,信鴿不攜帶任何信息。
Alice 將這只信鴿傳回給 Bob,信鴿攜帶一只開著鎖的盒子以及密鑰。
Bob 把信息放到盒子里,將鎖鎖上,將盒子傳送給 Alice。
Alice 收到盒子,使用密鑰打開盒子,讀取信息。
通過這種方式傳遞信息,Mallory 不可能通過攔截信鴿的方式來改變信息,因為她沒有密鑰。當 Alice 想要向 Bob 發送信息時,遵循相同的流程。
Alice 和 Bob 剛剛使用了通常所說的非對稱密鑰密碼術。之所以稱它為非對稱,是因為即使你可以加密一條信息(鎖上盒子)但你也不能將它解密(打開鎖住的盒子)。
我怎么信任這個盒子?
如果你夠仔細的話,你可能已經意識到我們仍然有一個問題。當 Bob 收到那個開著的盒子時,他如何確信這是來自 Alice 的盒子,而不是 Mallory 攔截信鴿后,將來自于 Alice 的盒子替換成 Mallory 自己設置了密鑰后的盒子。
Alice 決定對盒子進行數字簽名,通過這種方式,當 Bob 收到盒子,他通過核對簽名的一致性來確定盒子是否來自 Alice。
有些人可能就會想 Bob 如何識別 Alice 的簽名?不錯的問題。Alice 和 Bob 也有同樣的疑問。因此他們決定讓 Ted 對盒子進行數字簽名,而不是 Alice。
Ted 是誰?Ted 是一個著名且值得信賴的人。每個人都可以從Ted 那里獲得簽名,每個人都相信Ted 只會為合法的人提供盒子的數字簽名服務。
只有當Ted 確信正在請求簽名的人是 Alice,Ted 才會為 Alice 提供盒子數字簽名的服務。因此 Mallory 不能再像之前那樣攔截 Alice 的盒子、替換盒子后傳送給 Bob 了,因為 Bob 會發現這個盒子在 Ted 那進行數字簽名的是 Mallory,而不是 Alice。
Ted 在技術術語中通常被稱為證書頒發機構,你閱讀這篇文章所使用的瀏覽器安裝著各種證書頒發機構的簽名。
因此當你第一次連接到一個網站,你信任它的盒子,因為你信任 Ted,而 Ted 告訴你這個盒子是合法的。
盒子太重了
Alice 和 Bob 現在有了一個可靠的通信系統,但是他們意識到和僅僅攜帶信息的信鴿相比,攜帶盒子的信鴿太慢了。
他們決定只在傳遞密鑰的時候使用盒子的方法(非對稱密碼術),加密信息使用對稱密碼術(記得之前提到的凱撒密碼?)。
這樣的話可謂兩全其美:非對稱密碼術的可靠性和對稱密碼術的效率都有了。
在現實世界中,“信鴿”的傳送速度都很快,但盡管這么講,使用非對稱密碼技術加密消息比使用對稱密碼技術慢,所以我們只使用它來交換加密密鑰。
現在你知道了HTTPS的工作原理,你的咖啡也該煮好了。去喝吧,這是你應得的。
-
互聯網
+關注
關注
54文章
11148瀏覽量
103243 -
通信系統
+關注
關注
6文章
1187瀏覽量
53328 -
HTTP
+關注
關注
0文章
504瀏覽量
31197
原文標題:通過信鴿來解釋 HTTPS
文章出處:【微信號:LinuxHub,微信公眾號:Linux愛好者】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論