溫故而知新之HTTPS

前言:

對於HTTPS其實很早以前就有過學習,但對其一直是隻知其一;不知其二,知道的並不深刻全面,所以用了些時間,好好地閱讀了極客時間關於HTTPS的一些專欄,在這裏總結一下,用本身的話來描述一下加深理解。html

1、沒有安全的 HTTP 和它的巡禮之年

HTTP最初的目的:傳輸超文本文件,所以一直是明文傳輸文件,並且不安全。因爲是明文傳輸,因此就很容易被中間人所截取,一切通訊的內容也被這個中間人所掌握。這也就是常說的中間人攻擊。算法

1.1 什麼是安全

那如何定義通訊過程是安全的呢:機密性,完整性,身份驗證以及不能否認:瀏覽器

機密性:簡單來講就是數據是加密過的,除了參與通訊以外的人都是都是看不了的。安全

完整性:數據在通訊的過程當中是完整的,沒加通過篡改的。服務器

身份認證:通訊雙方能夠驗證對方的真實身份性能

不能否認:不可否認已經發生過的行爲學習

由於是明文傳輸,因此在一些對安全要求高的場景就不能很好的知足需求,所以在原有的基礎上引入了加密方案,在TCP和HTTP之間加入了一個安全層SSL/TLS加密

HTTP -> TCP設計

HTTP -> 安全層(SSL/TLS) -> TCPhtm

1.2 什麼是SSL/TLS?

SSL全名叫Secure Sockets Layer中文名叫 安全套接層,在 OSI 模型中儲運第五層會話層的位置。這玩意兒是由網景公司所發明,並在其發展到 V3 的時候被 IETF 更名爲 TLC(Transport Layer Security),並對其進行標準化。而 TLS 發展到如今也經歷了三個版本,最新的版本是2018年所制定的,緊緊的將密碼學的發展與當今互聯網的現狀相結合,持續提升安全與性能,所以也成爲信息安全領域的權威標準。

而它的職責也很簡單:

  • 對發起 HTTP 請求的數據進行加密操做
  • 對接收到 HTTP 的內容進行解密操做

當瀏覽器客戶端和服務端在使用 TLS 進行通訊時,須要選擇一組合理的加密算法來實現安全通訊,而這些算法的組合一般被稱爲:加密套件。它的命名是很規範的,基本形式就是:密鑰交換算法 + 簽名算法 + 對稱加密算法 + 摘要算法。其中,簽名算法能夠進行身份驗證,摘要算法能夠保證數據的完整性,而對稱加密算法則能夠保證數據的機密性。(值得注意的是,在2019年不安全的 TLS 1.0 和 1.1 默認被禁用(Safari TP 9一、Google Chrome 72+、Firefox Nightly)

2、安全的 HTTPS 和它的故事

2.1 對稱加密

前面咱們提到,HTTP協議在進行傳輸的時候是經過明文進行傳輸的,所以不安全。那麼若是須要保證傳輸信息的機密性,最簡單的方法不外於將其進行加密,這樣第三方的人在拿到這些信息的時候,也就不能獲取信息裏面的內容了。所以這就引入了加密的第一個概念:對稱加密。

對稱加密其實很簡單:加密和解密都使用的是相同的密鑰,是對稱的,這裏的密鑰就是用於解開加密信息的鑰匙。

簡單來講就是客戶端會給服務端發送它支持的加密的方法的列表,以及一個隨機數,而後服務器端在接受到這些東西后,會從客戶端所支持的加密方法列表中選取一種,而後同時生成一個隨機數給客戶端,這樣兩端就都肯定了加密方法和隨機數,也就能夠經過這些信息來生成對應的密鑰了。這樣作的話即便黑客在獲取到瀏覽器與服務器所傳輸的信息,獲得的也只是一串亂碼,而他也沒有相應的密鑰,也就保證了信息傳輸的機密性。

TLS中所提供的對稱加密算法有不少,其中最經常使用的當屬 AES(Advanced Encryption Standard)既高級加密標準,密鑰的長度能夠是128,192,256,是當今用的最爲普遍的對稱加密算法。固然除了上面這個AES以外,咱們國家也存在這本身的一套對稱加密算法:SM1 和 SM4。其中SM1算法不公開,屬於國家機密,而 SM4 則是公開的,能夠自行使用,這兩個算法的最大的優點就在於:國家支持!

對稱加密還有一個分組的概念,他可讓算法用固定的長度的密鑰加密任意長度的明文,從而將密鑰轉化爲密文。最新的分組模式叫作AEAD,在加密的同時還增長了認證的功能。

對稱加密就是經過上面的這些東西,來完成一個簡單卻安全的加密方式的。

2.2 非對稱加密

對稱加密看起來的確是解決了咱們所說的安全要素中的機密性的要求,但它仍然存在一個致命的漏洞就是:密鑰交互的方式仍然是明文的。也正是爲了解決密鑰安全的問題,咱們就須要使用非堆成加密的方法,那什麼是非堆成加密呢?非對稱加密簡單來講就是有兩把私鑰,一把是公鑰,能夠公開給任何人使用,一把是私鑰,須要嚴格保密。這就造成了一個非對稱性。具體舉個栗子來說就是:有 A、B 兩把密鑰,若是你用 A 密鑰來加密,那麼只能使用 B 密鑰來解密;反過來,若是你要 B 密鑰來加密,那麼只能用 A 密鑰來解密。

非對稱加密除了能夠對信息進行加密外,不少非對稱加密算法還有簽名的功能,這樣就能夠提供身份認證,保證通訊雙方能夠肯定對面的身份。

而從實現上來說,全部的非對稱加密算法,都是基於各類數學難題來設計實現的,這些難題的特色在於:正向計算很簡單,反向推卻是無解的。其中比較經典的非對稱加密算法包括:RSA,ECC以及SM2。

RSA

RSA 是所使用的數學難題是:兩個大的質數相乘的結果很容易計算,但根據這個結果去作質因分解獲得原先的兩個質數,則須要很大的計算量。就好比這個:

lists.gforge.inria.fr/pipermail/c…

前段時間美國一羣大佬宣佈,240哥十進制的整數分解成功,找到了它的兩個大質數因子,不過這個成本也是很大的。

ECC && SM2

ECC和 SM2 都是是基於橢圓曲線的數學難題設計的。廣泛的觀點認爲,橢圓曲線的難度高於大質數難題,160 位密鑰的 ECC 加密強度,至關於 1088 位密鑰的 RSA。由於密鑰短,因此相應的計算量、消耗的內存和帶寬也就少,加密解密的性能就上去了,所以對於互聯網行業來說吸引力也是至關大的。而SM2除了加密強度和國際標準和ECC差很少之外,還屬於國家所支持的非對稱加密算法。

須要注意的是,非對稱加密的安全性上雖然能夠知足咱們的需求,但它卻存在這一個比較大的問題就是L:性能。因爲非對稱加密在所須要的算法運算很是複雜,所以在性能上得不到很好的保證。也正是因爲這個緣由,如今的TLS主要採用的是一種叫混合加密的方式來進行加密。

混合加密

混合加密其實很簡單,就是使用非對稱加密的方式,解決密鑰交換的問題,而後用隨機數產生對稱算法使用的會話密鑰,在對其使用公鑰加密,並傳送給通訊對象。通訊對象拿到密文後用私鑰解開並取出會話密鑰。這樣就是實現了堆成密鑰的安全交換了,後續就可使用這個對稱密鑰來進行對稱加密。

2.3 摘要算法(Digest Algorithm)

在前面咱們有提到過安全的幾大要素,其中機密性咱們能夠經過上面的對稱加密 + 非對稱加密來解決。而在完整性方面,咱們則須要使用摘要算法來解決。

簡單理解,咱們能夠將摘要算法理解爲一種特殊的壓縮算法,他能夠將任意長度的數據壓縮成固定長度且獨一無二的摘要字符串,且這個加密的過程也是單向的,加密後的數據沒法解密,不能從摘要中反向推出原文。

學習資料:

time.geekbang.org/column/arti…

time.geekbang.org/column/intr…——安全篇

相關文章
相關標籤/搜索