使用鴿子理解HTTPS的原理

前言

在網絡上的任何活動均可以歸結爲服務器以前的收發消息。咱們能夠將這些消息的收發,想象成由鴿子實現的。這很荒謬,但確實如此。安全

Http

有一天愛麗絲經過鴿子發送一條「我愛你」的消息給鮑勃。可是愛麗絲的情敵馬洛裏,半路攔截了鴿子,並將消息修改成了「我不愛你」。可是鮑勃沒法知道,消息被篡改了。這就是Http的工做方式,很是的不可靠。服務器

一個密碼

愛麗絲和鮑勃,準備對消息進行加密。好比將字母偏移3位,好比「A」使用「D」表示,「B」使用「E」表示。馬洛裏即便攔截了鴿子,也沒法進行修改,由於他不清楚加密的方式,沒法理解消息的內容。可是鮑勃卻能夠輕鬆將消息進行解密。網絡

這被稱爲symmetric key cryptography(對稱密鑰加密),你知道如何加密也知道如何解密。現實的生產中,會使用更復雜的加密方式,可是主體思路是相同的。加密

如何肯定密鑰

若是愛麗絲和鮑勃在發送消息前不見面,他們沒法創建安全的密鑰。若是在消息自己之中,攜帶密鑰。馬洛裏就會知道消息的內容,對其解密後進行篡改。設計

這就是典型的MITM(中間人攻擊),避免中間人攻擊咱們必須更改加密系統。code

一個盒子

愛麗絲和鮑勃設計出了一個更好的加密系統,下面是操做步驟ip

  1. 鮑勃向愛麗絲,發送了一隻沒有任何消息的鴿子
  2. 愛麗絲在鴿子腿上綁了一個帶鎖的盒子,盒子是開着的,可是盒子的鑰匙愛麗絲留下了。鴿子又飛回到鮑勃哪裏。
  3. 鮑勃寫好消息,將消息放進盒子,並鎖了起來。而後鴿子將消息帶回給愛麗絲。
  4. 愛麗絲收到鴿子,使用鑰匙打開了盒子,並讀取了消息

愛麗絲和鮑勃之間的通信使用了asymmetric key cryptography(非對稱密鑰加密)。你能夠加密消息(把消息放進盒子),可是你沒辦法解密(你沒有鑰匙)get

盒子也能夠稱爲「公鑰」,盒子的鑰匙被稱爲「私鑰」。it

是不是可靠的盒子?

目前還有一個問題。若是馬洛裏攔截了鴿子,將盒子換成了本身的盒子,怎麼辦?io

愛麗絲能夠在盒子上,添加上本身的簽名,鮑勃就會知道這個盒子是否來自愛麗絲。那麼鮑勃一開始該如何識別簽名呢?

愛麗絲和鮑勃決定讓泰德代替愛麗絲在盒子上簽名。泰德是一個很是有名的,而且值得信賴的人。泰德只有肯定是愛麗絲的盒子的狀況下,纔會在盒子上簽名。而馬洛裏不會獲得泰德的簽名。

而泰德就是Certification Authority(證書頒發機構)

盒子比較重

帶有盒子的鴿子,飛的比不帶盒子的鴿子飛的慢,這該怎麼辦?

使用非對稱加密比使用對稱加密要慢。愛麗絲鮑勃決定,只使用盒子(非對稱加密)交換加密的密鑰。而後使用密鑰對消息進行對稱加密。

  1. 鮑勃向愛麗絲髮送一隻什麼都沒有的鴿子
  2. 愛麗絲返回了一個帶有盒子的鴿子
  3. 鮑勃本地生成了一個密鑰(用於對稱加密),而後把這個密鑰放到盒子裏,發送給愛麗絲
  4. 愛麗絲經過私鑰對盒子解密,獲取了鮑勃生成的密鑰
  5. 以後發送消息,鮑勃只須要使用密鑰進行對稱加密便可(這樣速度就很快了)

這就是Https的原理。

原文

參考

相關文章
相關標籤/搜索