如何用信鴿來理解HTTPS

2021-08-26 02:18:12 字數 2356 閱讀 1163

密碼學是一門很難理解的學科。裡面充滿了數學證明。但是,除非你真的在開發密碼系統相關的工作,否則在很大程度上就沒有必要去理解高層次的密碼系統機制。如果您開啟這篇文章希望學習如何建立乙個https協議,我很遺憾地說,鴿子是不夠的。否則,就煮點咖啡,享受這篇文章吧。

這可能有點抽象,所以讓我們想象一下,這些訊息是由信鴿。我知道這看起來很武斷,但相信我,https的工作方式是一樣的,不過速度要快很多。

此外,我們在這裡不談論伺服器、客戶端和黑客,而是討論alice、bob和mallory(鴿子)。如果這不是您第一次嘗試理解密碼概念,您將識別這些名稱,因為它們在技術文獻中被廣泛使用。

如果愛麗絲想給鮑勃發個口信,她就把這條資訊貼在信鴿的腿上,然後寄給鮑勃。鮑勃收到這條訊息,閱讀它,這一切都是好的。

但是,如果有乙個叫馬洛裡的人在鴿子飛行過程中攔截了愛麗絲的鴿子並改變了訊息,該怎麼辦?鮑勃不可能知道愛麗絲傳送的資訊在傳輸過程中被修改了。

這就是為什麼http起作用了。挺嚇人的對吧?我不會通過http傳送我的銀行憑證,你也不應該。

如果愛麗絲和鮑勃非常狡猾。他們決定用乙個秘密**來寫他們的訊息。他們將每個字母在字母表中移動3個位置。例如,d→a,e→b,f→c.純文字訊息「機密訊息」將是「pbzobqjbppxdb」。

現在,如果mallory(馬洛裡)攔截鴿子,她將無法將訊息轉換為有意義的內容,也無法理解其中的意思,因為她不知道**。但是bob可以簡單地將**反向應用並解密a→d、b→e、c→f的訊息。密碼文字「pbzobqjbppxdb」將被解密回「機密訊息」。

成功!這叫做對稱金鑰密碼學,因為如果您知道如何加密訊息,您也知道如何解密它。

我上面描述的**通常稱為凱撒密碼。在現實生活中,我們使用更華麗和更複雜的**,但其主要思想是相同的。

如果除了傳送方和接收方之外,沒有人知道使用了什麼金鑰,則對稱金鑰加密是非常安全的。在凱撒密碼中,鍵是偏移量。我們把每封信換了多少個字母。在我們的示例中,我們使用了3的偏移量,但也可以使用4或12。

問題是,如果alice和bob在開始與鴿子傳送訊息之前從來沒有見過面,他們將無法安全地建立金鑰。如果他們在訊息本身中傳送金鑰,mallory(馬洛裡)將攔截該訊息並發現該金鑰。這將允許mallory在alice和bob開始加密訊息之前和之後讀取或更改訊息。

這是典型的中間人現象,避免的唯一方法是將加密系統全部改變。

愛麗絲和鮑勃想出了乙個更好的系統。當bob想向alice傳送資訊時,她將遵循以下步驟:

愛麗絲把鴿子送回來,鴿子帶著乙個開著鎖的盒子,但卻保留著鑰匙。

bob將訊息放入框中,關閉鎖並將該框傳送給alice。

alice接收到該框,用鍵開啟它並讀取訊息。

這樣,mallory不能通過攔截鴿子來改變訊息,因為她沒有金鑰。當alice想向bob傳送訊息時,也會遵循相同的過程。

艾麗斯和鮑勃剛剛用了俗稱的非對稱金鑰密碼學.它被稱為不對稱,因為即使您可以加密訊息(鎖定框),也無法解密它(開啟關閉的框)。

在技術演講中,這個框被稱為公用鑰匙開啟它的鍵稱為私鑰.

如果你注意的話,你可能已經注意到我們仍然有乙個問題。當鮑勃收到那個開啟的盒子時,他怎麼能確定它來自愛麗絲,而馬洛裡沒有攔截鴿子,用她有鑰匙的那個盒子換了個盒子?

愛麗絲決定她將在盒子上簽名,這樣當鮑勃收到盒子時,他會檢查簽名,並知道是艾麗斯送這個盒子的。

你們中的一些人可能會想,鮑勃首先該如何識別愛麗絲的簽名呢?問得好。愛麗絲和鮑勃也有這個問題,所以他們決定,不要讓愛麗絲在盒子上簽名,泰德會在盒子上簽名。

泰德是誰?泰德是乙個非常有名,眾所周知,值得信賴的人。特德給了每個人他的簽名,每個人都相信他只會為合法的人簽名。

特德只有在他確定要簽名的那個人是愛麗絲時才會簽乙個愛麗絲的盒子。因此,馬洛裡無法得到由泰德代表她簽名的愛麗絲盒子,因為鮑勃會知道這個盒子是個**,因為泰德只有在核實了人們的身份後才會為他們簽名。

所以當你第一次連線到乙個**時,你信任它的盒子,因為你信任泰德,泰德告訴你這個盒子是合法的。

愛麗絲和鮑勃現在有了乙個可靠的通訊系統,但他們意識到乙個問題,鴿子攜帶盒子的速度比只攜帶資訊的鴿子要慢。

他們決定使用box方法(非對稱密碼),只選擇乙個金鑰來使用對稱密碼加密訊息(還記得凱撒密碼嗎?)。

這樣他們就能同時兼具優勢。非對稱密碼的可靠性和對稱密碼的有效性。

在現實世界中,沒有慢鴿子,但是使用非對稱密碼加密訊息比使用對稱加密要慢,所以我們只使用它來交換加密金鑰。

現在你知道了https 是如何工作了吧,你的咖啡也應該準備好。去喝吧,這是你應得的。

用信鴿來解釋HTTPS

密碼學是一門難以理解的學科,因為它充滿了數學定力。但是除非你要實際開發出一套加密演算法系統,否則你是沒必要強制理解哪些深奧的數學定理的。愛麗絲 鮑伯和.信鴿?這個說起來可能有點抽象,不然讓我們假設這些訊息都是由信鴿來傳遞的。我知道這個假設有些太過隨意,但相信我https就是這樣工作的,儘管它的速度快...

如何用ResourceBundle來讀取配置檔案

對於ja va基礎很好的人來說,這個應該是簡單的不能再簡單的了。不過估計一些ja va新手不一定會知道 比如我,上次為別人寫乙個東西,需要從外存讀檔案來設定物件的值,因為不知道有resourcebundle這種東西,就自己用filereader在那搞,折騰了半天,最後還不能把配置檔案和jar包打在一...

如何用ResourceBundle來讀取配置檔案

對於ja va基礎很好的人來說,這個應該是簡單的不能再簡單的了。不過估計一些ja va新手不一定會知道 比如我,上次為別人寫乙個東西,需要從外存讀檔案來設定物件的值,因為不知道有resourcebundle這種東西,就自己用filereader在那搞,折騰了半天,最後還不能把配置檔案和jar包打在一...