用信鴿來解釋HTTPS

2021-09-02 14:26:13 字數 2442 閱讀 6955

密碼學是一門難以理解的學科,因為它充滿了數學定力。但是除非你要實際開發出一套加密演算法系統,否則你是沒必要強制理解哪些深奧的數學定理的。

愛麗絲、鮑伯和......信鴿?

這個說起來可能有點抽象,不然讓我們假設這些訊息都是由信鴿來傳遞的。我知道這個假設有些太過隨意,但相信我https就是這樣工作的,儘管它的速度快的多。

我們先不談伺服器、客戶端或者黑客攻擊,先來聊一下愛麗絲、鮑伯和馬洛裡。如果這已不是你第一次接觸密碼學理論,你應該會認識這些名字,因為他們經常在各種密碼學文獻中被提及。

乙個簡單的通訊方式

如果愛麗絲想給鮑伯發個訊息,她會把訊息綁在信鴿的腿上寄給鮑伯。然後鮑伯收到了訊息,並閱讀了它。這一切都是美好的。

但如果馬洛裡攔截了愛麗絲飛翔中的信鴿並且修改訊息內容呢?鮑伯將無法知道愛麗絲發來的訊息已經在傳輸過程中被修改了。

這就是http的工作方式,很可怕吧?我們在日常的購物支付中絕不會願意通過http傳送我的銀行憑證。

隱蔽密碼

那麼如果愛麗絲和鮑伯都非常的機智。他們一致認同使用一種隱蔽的密碼來書寫他們的資訊。他們會將資訊中的每個字母按照字母表中的順序前移三位。比如,d->a,b-->e,c-->f之類的規則破譯資訊的內容。加密後的資訊「pbzobq jbppxdb」會被破解還原為「secret message」。

搞定!這就是對稱金鑰加密,因為如果你知道如何加密一段資訊那麼你同樣可以解密這段資訊。

上述的密碼通常被稱為凱撒碼。在現實生活中,我們會使用更為奇特和複雜的密碼,但原理相同。

我們如何決定金鑰?

如果除了發信者和收信者之外沒有人知道使用的是什麼金鑰,對稱金鑰加密是非常安全的。在凱撒加密中,金鑰就是每個字母變到加密字母需要移動多少位的偏移量。我之前的距離中,使用的偏移量是3,但是也可以用4或者8。

問題是如果愛麗絲和鮑伯在開始用信鴿傳信之前沒有碰過頭,他們沒有乙個安全的方式來確立金鑰。如果他們自己來在心中傳遞金鑰,馬洛裡就會結果資訊並發現金鑰。這就使得馬洛裡可以在愛麗絲和鮑伯開始加密他們的資訊之前或之後,閱讀到他們資訊的內容並按照她的意願來篡改資訊。

這是乙個中間人攻擊的典型例子,避免這個問題的唯一方法就是收發信的兩方一起修改他們的編碼系統。

通過信鴿傳遞盒子

所以愛麗絲和鮑伯就相處了乙個更好的系統。當保暖哦想要給愛麗絲傳送資訊時,他會按照如下的步驟來進行:

這樣馬洛裡就不能通過截獲鴿子來篡改資訊了,因為她沒有開啟盒子的鑰匙。當愛麗絲要給鮑伯傳送訊息的時候同樣按照上述的流程。

愛麗絲和鮑伯所使用的流程通常被稱為非對稱金鑰加密。之所以稱之為非對稱,是因為即使是你把資訊編碼(鎖上盒子)也不能破譯資訊(開啟鎖住的盒子)。

在術語中,盒子被稱為公鑰,而用來開啟盒子鑰匙被稱為私鑰

如何信任盒子

如果你稍加注意你就會發現還是存在問題。當鮑伯收到盒子時,他如何能確認這個盒子來時愛麗絲而不是馬洛裡截獲了鴿子,然後換了乙個她有鑰匙能開啟的盒子呢?

愛麗絲決定簽名標記一下盒子,這樣鮑伯收到盒子的時候就可以檢查簽名來確定是愛麗絲送出的盒子了。

那麼你們之中的一些可能就會想了,鮑伯如何打一開始就能識別出愛麗絲的簽名呢?這是個好問題。愛麗絲和鮑伯也確實有這個問題,所以他們決定讓泰德代替愛麗絲來標記這個盒子。

那麼誰是泰德呢?泰德很有名,是乙個值得信任的傢伙。他會給任何人簽名並且所有人都信任他知會給合法的人簽名標記盒子。

如果泰德可以確認索要簽名的人是愛麗絲,他就會在愛麗絲的盒子上簽名。因此馬洛裡就不可能搞到乙個有著泰德代表愛麗絲籤了名的盒子,因為鮑伯知道泰德知會給他確認過的人簽名,從而識破馬洛裡的軌跡。

泰德的角色在術語中成為認證機構(ca)。而你月度此文時所用的瀏覽器打包存有許多認證機構的簽名。

所以當你首次接入乙個**的時候,你可以信任來自這個站點的盒子,因為你信任泰德,而泰德會告你盒子是合法的。

沉重的盒子

現在愛麗絲和鮑伯有了乙個可靠的系統來進行交流,然他們也意識到讓鴿子攜帶盒子比原本只攜帶信件要慢一些。

因此他們決定只有在傳遞用對稱加密來給資訊編碼(凱撒加密法)的金鑰時,使用傳遞盒子的方法(非對稱加密)。

這樣就可以二者的有點兼具了,非對稱加密的可靠性和對稱加密的高效性。

現實世界中我們不會用信鴿這樣慢的送信手段,但用非對稱加密來編碼資訊仍要鰻魚使用對稱加密技術,所以我們只有在交換編碼金鑰的時候會使用非對稱加密技術。

現在你已經了解了https是如何工作的了,你的咖啡也應該準備熬了,好好享用吧,你受之無愧。

如何用信鴿來理解HTTPS

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

用牛郎織女來解釋Https

本文嘗試使用牛郎織女來解釋https。資訊交換傳遞從古至今都有,只是傳遞導體和交換方式不斷在發生變化。現代資訊傳遞都是通過網路進行。資訊傳遞步驟簡化 打包 傳輸 解包,而像http這類協議就是指定資訊傳遞的標準,而資訊傳遞一般主要考慮以下兩方面問題。本文主要討論傳遞的安全性。眾所周知 https就是...

用Logger來解釋攔截

hz動態 學了 不知道在工作中雜用哦 he現在一般不會直接用吧,一般都是用aspectj這種完整aop的實現 stst 攔截方法呼叫 hz我見過把所有accessor方法放到切面的 還有transaction肯定都是在切面的 stst 比如乙個方法,記錄要儲存起來 用來驗證使用者名稱密碼,如果不攔截...