TLS 的目的便是解決數(shù)據(jù)的
一、Record 記錄協(xié)議 (對(duì)稱加解密)
二、HandShake 握手,揮手
驗(yàn)證通訊雙方身份
交換加解密的安全套件
協(xié)商加密解密參數(shù)

非對(duì)稱加密
當(dāng)一個(gè)TLS會(huì)話建立好之后,會(huì)使用對(duì)稱加密的密鑰去通信,那么如何實(shí)現(xiàn)事先將對(duì)稱加密的密鑰傳遞給TLS會(huì)話的另一方呢。利用的就是非對(duì)稱加密。分對(duì)稱加密比對(duì)稱加密慢數(shù)千倍,所以只是使用對(duì)稱加密傳遞之后加密使用的對(duì)稱加密的密鑰。之后的加密安全性靠的是對(duì)稱加密來解決。
非對(duì)稱加密是有一把公鑰和一把私鑰,公鑰可以公開,而私鑰不能。
用公鑰加密成密文,再將密文用私鑰解密就能實(shí)現(xiàn)加解密過程。
而用私鑰加密,公鑰解密就是簽名認(rèn)證過程。
常見的非對(duì)稱加密方式分為兩大類
RSA(大數(shù)的因數(shù)分解)ECC (橢圓曲線)
RSA 沒有向前安全性,也就是需要每次的對(duì)稱加密密鑰的傳遞都是基于 公鑰加密,服務(wù)端私鑰解密。如果服務(wù)端的私鑰丟失了,那幾年前的通信數(shù)據(jù)都有可能被解密。所以這是極度不安全的,私鑰的地位太重了,如果每次的加解密都是臨時(shí)生成的密碼來解決安全性,才不會(huì)對(duì)私鑰的安全性有如此強(qiáng)的依賴。在2013年的棱鏡門事件中,某個(gè)CA機(jī)構(gòu)迫于美國政府壓力向其提交了CA的私鑰,這就是十分危險(xiǎn)的。如果向前不安全,那么之前利用該CA私鑰都會(huì)全部遭殃。所以這里說的是更安全的 DH類非對(duì)稱加密。
下圖就是DH密鑰交換的TLS握手過程

DH 密鑰交換協(xié)議
DH 密鑰交換協(xié)議,Diffile-Hellman key Exchange,簡(jiǎn)稱 DH 或 DHE 。它可以讓雙方在完全沒有對(duì)方任何預(yù)先信息的條件下通過一個(gè)不安全的信道創(chuàng)建一個(gè)密鑰。

1、客戶端瀏覽器隨機(jī)生成一個(gè)值Ra,計(jì)算Pa(x,y) = Ra*Q(x,y), Q(x,y)為全世界公認(rèn)的某個(gè)橢圓曲線算法的基點(diǎn)。將Pa(x,y)發(fā)送至服務(wù)器。
假設(shè) p = 97 g = 3
2、服務(wù)器隨機(jī)生成一個(gè)值Rb,計(jì)算 Pb(x,y) = Rb * Q(x,y)。將Pb(x,y)發(fā)送到客戶端瀏覽器。
a = 6 (Alice 的私鑰)
b =21 (Bob的私鑰)
3、客戶端計(jì)算Sa(x,y) = Ra * Pb(x,y),服務(wù)器計(jì)算Sb(x,y)=Rb*Pa(x,y)
A = (g**a)%p (Alice計(jì)算得到的公鑰 傳遞給Bob)
B = (g**b)%p (Bob計(jì)算得到公鑰 傳遞給Alice)
4、算法保證了Sa=Sb=S, 提取其中的S的x向量作為密鑰。
(B ** a) % p = 47
(A ** b) % p = 47
其安全性是和RSA是一樣的,其安全性依賴于大數(shù)因數(shù)分解,所以提高安全性只能靠增加位數(shù)來保證,這樣就涉及大量的乘法運(yùn)算。性能比較低下。
ECC 橢圓曲線
為了解決上述DH的問題,引入了ECC橢圓曲線,進(jìn)而進(jìn)化為 ECDHE 算法,稱為 Elliptic Curve Diffie-Hellman Key Exchange。ECC和RSA 在288字節(jié)的長(zhǎng)度下,破解RSA需要煮沸一勺水的能量,而破解相同位數(shù)的ECC 就需要煮沸整個(gè)地球水的能量。RSA 為了提高安全性,只能靠增大密鑰位數(shù)。尷尬的是現(xiàn)在的超算越來越厲害。量子計(jì)算下秀爾算法可8h內(nèi)輕松破解2048位的RSA。RSA只能再增大密鑰位數(shù),但是再增大位數(shù),移動(dòng)端設(shè)備就慘了,你增大的密鑰是運(yùn)營商要收取流量費(fèi)用的,而且加解密太費(fèi)電。
ECC 的數(shù)學(xué)原理是橢圓曲線和離散對(duì)數(shù)。橢圓曲線很復(fù)雜。為了提升性能,還需要選擇一個(gè)橢圓曲線,但是它不是真正的橢圓形,下面有圖可以看到,只是運(yùn)算上用到了橢圓算法。
但是ECC也有很多問題,1、ECC 可能有后門,如NSA(美國國家安全局發(fā)布的一套算法),這個(gè)算法就是被懷疑被植入后門了。2、而且ECC很多的算法都被注冊(cè)專利了,一不小心就要吃官司,其專利大部分都被黑莓注冊(cè)。
ECC 橢圓曲線的定義
-
橢圓曲線表達(dá)式:
- 如下四種不同的橢圓曲線。始終是關(guān)于x軸對(duì)稱的(y平方)
ECC 曲線的特性 : +運(yùn)算
A + B = E
E 為 A ,B 連續(xù)與曲線相交在X軸上的鏡像
當(dāng) A 和 B 重合后 就可以得到 2A = E

ECC 的算法原理過于復(fù)雜,這里表示我也看不懂。點(diǎn)到為止吧。(以后看懂了再來補(bǔ)充)

這里的抓包結(jié)果就是用的EC DH E 算法來進(jìn)行密鑰交換的。這里選擇的曲線是 secp256r1, 在這個(gè)曲線中,基點(diǎn)和參數(shù)已經(jīng)給出了,PubKey 也給出了。
在 TLS1.3 中,一般使用的 X25519 曲線 (蒙哥馬利曲線)

