據說這是程式設計師被黑得最慘的一次 - SSL/TLS協議原理解析

xietao3發表於2017-08-10

本文系作者學習後鞏固知識點,錯誤之處煩請點出,本文從敘述一個小故事的視角來介紹 SSL/TLS 的原理,希望對讀者有所啟發。

背景

程式設計師小明想給隔壁小紅寫信表白,但是又不想讓信件內容被其他人看見,希望只有小紅才能看見信件內容,迫不及待的小明的大腦飛快運轉起來。

小明
小明

預備基礎知識

  • 對稱金鑰加密(Symmetric Key Cryptography):加密與解密使用相同金鑰。對稱加密演算法的特點是演算法公開、計算量小、加密速度快、加密效率高。缺點是交易雙方都使用同樣鑰匙,安全性得不到保證。

  • 非對稱金鑰加密(Asymmetric Key Cryptography):加密與解密使用不同金鑰。非對稱加密使用一對祕鑰,一個用來加密,一個用來解密,而且公鑰是公開的,祕鑰是自己儲存的,其安全性更好。缺點是加密和解密花費時間長、速度慢,只適合對少量資料進行加密。

  • 雜湊演算法(Hash Algorithm):又稱雜湊演算法,雜湊演算法,是一種從任意檔案中創造小的數字「指紋」的方法。與指紋一樣,雜湊演算法就是一種以較短的資訊來保證檔案唯一性的標誌,這種標誌與檔案的每一個位元組都相關,而且難以找到逆向規律。因此,當原有檔案發生改變時,其標誌值也會發生改變,從而告訴檔案使用者當前的檔案已經不是你所需求的檔案。

信件加密(對稱加密)

小明想到對信件內容進行加密,而加密演算法一般分為 對稱加密非對稱加密 兩種。非對稱加密對加密效能較差,對加密內容有長度限制,所以加密信件內容我們只能選擇對稱加密方式。使用對稱加密演算法和一個 會話祕鑰 對信件內容加密,當小明把加密好的信件送給小紅,小紅收到密信後需要使用同一個會話祕鑰進行解密,小明該如何才能安全地把會話祕鑰送到小紅手上呢?

信件加密
信件加密

會話祕鑰加密(非對稱加密)

直接將會話祕鑰和信件打包一起發出去,如果遇上了和小明一樣懂得加密演算法的程式設計師,那信件內容相當於不設防,所以我們也要想辦法對祕鑰進行加密,因為祕鑰的長度一般都不會太長,所以我們可以使用非對稱加密演算法加密祕鑰

非對稱加密祕鑰有兩份,可以任選一把作為 私鑰 ,供自己使用,另外一把作為 公鑰 ,分發出去供收信方使用。小明用自己的私鑰對會話祕鑰進行加密,這樣會話金鑰就可以確保安全了。但是小明仍然無法保證公鑰能安全送到小紅手中,如果公鑰被壞人得到了,甚至可以假冒成小紅與小明互相通訊,細思恐極之下,小明陷入了深思中。

一對祕鑰
一對祕鑰

權威機構

N多年過去了,小明通過不懈努力,終於找到了安全傳輸公鑰的辦法。小明建立了一個權威機構,該權威機構專門頒佈一種數字證書,由於該權威機構馳名海內網並且公認信用可靠,它頒佈數字證書基本可以確定證書內容可靠,在其之下還有很多各級證書頒佈機構,受大眾信任程度各不相同。我們的電腦在安裝作業系統時,系統順帶安裝了一些受信任的證書頒佈機構的證書,證書包含有這些機構祕鑰對應的公鑰。

權威機構
權威機構

數字證書

小明只要去證書頒佈機構申請一個數字證書,數字證書中包含了不少於以下幾項內容:

  • 證書的釋出機構
  • 證書的有效期
  • 公鑰
  • 證書的所有者
  • 簽名所使用的演算法
  • 指紋以及指紋演算法

數字證書
數字證書

然後將數字證書發給小紅,小紅得到數字證書後,通過證書釋出機構的公鑰(預設安裝在系統中)可以對證書內容解密,如果成功解密,說明該證書來源真實可靠,以該證書頒佈機構的名譽保證。數字證書中的 證書所有者 保證了公鑰來自於小明,而不是來自於隔壁老王的兒子小王。來源可靠,但是不能保證證書內容沒有被別人篡改,這個時候就涉及到了指紋和數字簽名。

指紋

1. 指紋加密

證書頒佈機構在給小明發證書時,把證書的釋出機構證書的有效期公鑰證書的所有者等資訊以明文的形式寫到證書裡面,然後用一個指紋演算法計算出這些數字證書內容的一個指紋,並把指紋和指紋演算法用自己的私鑰進行加密得到數字簽名,然後這些內容一起打包發給小明,還會將一個專屬於小明私鑰給到小明,這個私鑰和證書中的公鑰為一對。

指紋
指紋

2. 指紋驗證

而這個證書由小明又轉送至小紅手中,首先小紅讀取證書中的證書頒發機構為SecureTrust CA ,然後會在作業系統中受信任的釋出機構的證書中去找SecureTrust CA的證書,如果找不到,那說明證書的釋出機構是個水貨釋出機構,小明的證書和內容可能有問題。 如果在系統中找到了SecureTrust CA的證書,那麼從證書中取出SecureTrust CA的公鑰,然後對小明的證書裡面的數字簽名用這個公鑰進行解密,得到指紋和指紋演算法,然後使用這個指紋演算法計算小明的證書的指紋,將這個計算出來指紋與放在證書中的指紋對比,如果一致,說明小明的證書肯定沒有被修改過並且證書是SecureTrust CA釋出的。

指紋驗證
指紋驗證

握手流程

最終小紅可以安全地拿到小明的公鑰,每次寫信的時候隨機生成一個會話祕鑰,再使用公鑰對會話祕鑰加密後發給小明,小明用自己的私鑰解密得到會話祕鑰,然後對會話祕鑰hash後,將hash值加密發回給小紅,小紅使用公鑰解密得到hash值,然後自己也對會話祕鑰進行hash計算,對比自己算出的hash值和對方發過來的hash值,如果一直就可以確認對方是持有私鑰的小明瞭。然後雙方就可以使用這個會話祕鑰進行通訊了。

握手過程
握手過程

雖然現在信件如果被第三方持有了也無法得知信件內容,但是遇上無聊的人他仍然可以對信件內容進行破壞。在每次傳送資訊時,先對資訊的內容進行一個hash計算得出一個指紋,將資訊的內容和這個指紋一起加密後傳送。接收方在收到後進行解密得到明文的內容和指紋,然後接收方再自己對收到資訊內容做一次hash計算,與收到的指紋進行對比看是否匹配,如果匹配就說明資訊在傳輸過程中沒有被修改過。如果不匹配說明中途有人故意對加密資料進行了修改,立刻中斷通話過程後做其它處理。

小紅髮送資訊
小紅髮送資訊

服務端.png
服務端.png

結語

到這裡,小明終於可以給小紅寫信了,然而小紅已經和隔壁老王的兒子小王在一起了。小明氣急,磨刀霍霍向小王...

欲知後事如何,趕緊點贊。有錯誤之處煩請指出

參考

相關文章