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ì)稱加密來(lái)解決肌厨。
非對(duì)稱加密是有一把公鑰和一把私鑰,公鑰可以公開(kāi)豁陆,而私鑰不能柑爸。
用公鑰加密成密文,再將密文用私鑰解密就能實(shí)現(xiàn)加解密過(guò)程盒音。
而用私鑰加密表鳍,公鑰解密就是簽名認(rèn)證過(guò)程。
常見(jiàn)的非對(duì)稱加密方式分為兩大類
RSA(大數(shù)的因數(shù)分解)
ECC (橢圓曲線)
RSA 沒(méi)有向前安全性祥诽,也就是需要每次的對(duì)稱加密密鑰的傳遞都是基于 公鑰加密譬圣,服務(wù)端私鑰解密。如果服務(wù)端的私鑰丟失了雄坪,那幾年前的通信數(shù)據(jù)都有可能被解密厘熟。所以這是極度不安全的,私鑰的地位太重了诸衔,如果每次的加解密都是臨時(shí)生成的密碼來(lái)解決安全性盯漂,才不會(huì)對(duì)私鑰的安全性有如此強(qiáng)的依賴。在2013年的棱鏡門事件中笨农,某個(gè)CA機(jī)構(gòu)迫于美國(guó)政府壓力向其提交了CA的私鑰就缆,這就是十分危險(xiǎn)的。如果向前不安全谒亦,那么之前利用該CA私鑰都會(huì)全部遭殃竭宰。所以這里說(shuō)的是更安全的 DH類非對(duì)稱加密。
下圖就是DH密鑰交換的TLS握手過(guò)程
DH 密鑰交換協(xié)議
DH 密鑰交換協(xié)議份招,Diffile-Hellman key Exchange切揭,簡(jiǎn)稱 DH 或 DHE 。它可以讓雙方在完全沒(méi)有對(duì)方任何預(yù)先信息的條件下通過(guò)一個(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ù)來(lái)保證,這樣就涉及大量的乘法運(yùn)算饱溢。性能比較低下妖爷。
ECC 橢圓曲線
為了解決上述DH的問(wèn)題,引入了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)在的超算越來(lái)越厲害。量子計(jì)算下秀爾算法可8h內(nèi)輕松破解2048位的RSA浅萧。RSA只能再增大密鑰位數(shù),但是再增大位數(shù)洼畅,移動(dòng)端設(shè)備就慘了吩案,你增大的密鑰是運(yùn)營(yíng)商要收取流量費(fèi)用的帝簇,而且加解密太費(fèi)電徘郭。
ECC 的數(shù)學(xué)原理是橢圓曲線和離散對(duì)數(shù)丧肴。橢圓曲線很復(fù)雜残揉。為了提升性能,還需要選擇一個(gè)橢圓曲線芋浮,但是它不是真正的橢圓形抱环,下面有圖可以看到,只是運(yùn)算上用到了橢圓算法。
但是ECC也有很多問(wèn)題镇草,1、ECC 可能有后門陶夜,如NSA(美國(guó)國(guó)家安全局發(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 的算法原理過(guò)于復(fù)雜氛赐,這里表示我也看不懂魂爪。點(diǎn)到為止吧艰管。(以后看懂了再來(lái)補(bǔ)充)
這里的抓包結(jié)果就是用的EC DH E 算法來(lái)進(jìn)行密鑰交換的滓侍。這里選擇的曲線是 secp256r1, 在這個(gè)曲線中牲芋,基點(diǎn)和參數(shù)已經(jīng)給出了撩笆,PubKey 也給出了缸浦。
在 TLS1.3 中夕冲,一般使用的 X25519 曲線 (蒙哥馬利曲線)