當前位置:
首頁 > 知識 > 據說這是程序員被黑得最慘的一次-SSL/TLS協議原理解析

據說這是程序員被黑得最慘的一次-SSL/TLS協議原理解析

本文系作者學習後鞏固知識點,錯誤之處煩請點出,本文從敘述一個小故事的視角來介紹 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計算,與收到的指紋進行對比看是否匹配,如果匹配就說明信息在傳輸過程中沒有被修改過。如果不匹配說明中途有人故意對加密數據進行了修改,立刻中斷通話過程後做其它處理。小紅髮送信息

結語

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

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

作者: xietao3

鏈接:https://juejin.im/post/598c7974f265da3e3d125663


點擊展開全文

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 程序源 的精彩文章:

刪僱主網站源代碼,一軟體工程師獲刑 5 年
為什麼我們選擇使用 React 而不是 Angular 構建新 UI
狼人殺 相親專場活動正在報名中,約起來
狼人殺 程序員專場相親活動,周末與你不見不散
Hibernate 三種狀態的轉換

TAG:程序源 |

您可能感興趣

Siemens MPI協議解析
蘋果也玩起了「AI拍照」 iPhone XS系列攝像頭解析
PHP 解析 XML
iPhone XS/XS Max/XR屏幕解析:選一個最適合你的!
Kafka 「不丟消息」 ISR 機制解析
Google和LG DIsplay 做出了目前解析度最高的 VR 屏幕
解析樓控協議BACnet/IP
ES6之類class的原理解析
每一處都是暗藏的小驚喜 OPPO Reno靈感版解析
深度解析LoRa和LoRaWAN的區別
解析PS中的PNG格式!
Science解析出皰疹病毒HSV-1HSV-2衣殼三維結構
視頻|KIMISS CELEBRITY楊文昊穿搭LOOK解析——時髦給誰看
HDFS BlockToken機制解析
視頻 KIMISS CELEBRITY楊文昊穿搭LOOK解析——時髦給誰看
PHP HTTP客戶端-Guzzle原理解析
Net Core SDK全球使用數據解析
NVIDIA Turing架構解析:追光逐影,成敗未定
教你用Python解析HTML
導演 Sing J. Lee 解析 Migos 新歌《Stir Fry》 MV 拍攝靈感