HTTPS的加密方式及優(yōu)缺點(diǎn)介紹
對(duì)稱加密
對(duì)稱加密是指加密和解密使用相同密鑰的加密算法。它要求發(fā)送方和接收方在安全通信之前,商定一個(gè)密鑰。對(duì)稱算法的安全性依賴于密鑰,泄漏密鑰就意味著任何人都可以對(duì)他們發(fā)送或接收的消息解密,所以密鑰的保密性對(duì)通信至關(guān)重要。
對(duì)稱加密算法的優(yōu)、缺點(diǎn):
優(yōu)點(diǎn):算法公開(kāi)、計(jì)算量小、加密速度快、加密效率高。
缺點(diǎn):
- 交易雙方都使用同樣鑰匙,安全性得不到保證;
- 每對(duì)用戶每次使用對(duì)稱加密算法時(shí),都需要使用其他人不知道的惟一鑰匙,這會(huì)使得發(fā)收信雙方所擁有的鑰匙數(shù)量呈幾何級(jí)數(shù)增長(zhǎng),密鑰管理成為用戶的負(fù)擔(dān)。
- 能提供機(jī)密性,但是不能提供驗(yàn)證和不可否認(rèn)性。
非對(duì)稱加密
這種加密或許理解起來(lái)比較困難,這種加密指的是可以生成公鑰和私鑰。凡是公鑰加密的數(shù)據(jù),公鑰自身不能解密,而需要私鑰才能解密;凡是私鑰加密的數(shù)據(jù),私鑰不能解密,需要公鑰才能解密。這種算法事實(shí)上有很多,常用的是RSA,其基于的數(shù)學(xué)原理是兩個(gè)大素?cái)?shù)的乘積很容易算,而拿到這個(gè)乘積去算出是哪兩個(gè)素?cái)?shù)相乘就很復(fù)雜了,具體原理有興趣可以自行研究。
非對(duì)稱加密相比對(duì)稱加密更加安全,但也存在兩個(gè)明顯缺點(diǎn):
- CPU計(jì)算資源消耗非常大。一次完全TLS握手,密鑰交換時(shí)的非對(duì)稱解密計(jì)算量占整個(gè)握手過(guò)程的90%以上。而對(duì)稱加密的計(jì)算量只相當(dāng)于非對(duì)稱加密的0.1%,如果應(yīng)用層數(shù)據(jù)也使用非對(duì)稱加解密,性能開(kāi)銷(xiāo)太大,無(wú)法承受。
- 非對(duì)稱加密算法對(duì)加密內(nèi)容的長(zhǎng)度有限制,不能超過(guò)公鑰長(zhǎng)度。比如現(xiàn)在常用的公鑰長(zhǎng)度是2048位,意味著待加密內(nèi)容不能超過(guò)256個(gè)字節(jié)。
所以公鑰加密目前只能用來(lái)作密鑰交換或者內(nèi)容簽名,不適合用來(lái)做應(yīng)用層傳輸內(nèi)容的加解密。
加密的詳細(xì)過(guò)程
首先服務(wù)器端用非對(duì)稱加密(RSA)產(chǎn)生公鑰和私鑰。然后把公鑰發(fā)給客 戶端,路徑或許有人會(huì)截取,但是沒(méi)有用,因?yàn)橛霉€加密的文件只有私鑰可以解密,而私鑰永遠(yuǎn)都不會(huì)離開(kāi)服務(wù)器的。當(dāng)公鑰到達(dá)客戶端之后,客戶端會(huì)用對(duì)稱加密產(chǎn)生一個(gè)秘鑰并且用公鑰來(lái)加密發(fā)送給服務(wù)器端,這個(gè)秘鑰就是以后用來(lái)通信的鑰匙。這樣服務(wù)器端收到公鑰加密的秘鑰時(shí)就可以用私鑰來(lái)解公鑰從而獲得秘鑰。這樣的話客戶端和服務(wù)器端都獲得了秘鑰,信息交流相對(duì)是安全的。
聽(tīng)起來(lái)確實(shí)是挺安全的,但實(shí)際上,還有一種更惡劣的攻擊是這種方法無(wú) 法防范的,這就是傳說(shuō)中的“中間人攻擊”。在身份認(rèn)證的過(guò)程中,出現(xiàn)了一個(gè)“中間人”攔截我們的信息,他有意想要知道你們的消息。我們將這個(gè)中間人稱為M。當(dāng)服務(wù)器第一次給客戶端發(fā)送公鑰的時(shí)候,途徑M。M知道你要進(jìn)行密鑰交換了,它把公鑰扣了下來(lái),假裝自己是客戶端,偽造了一個(gè)偽秘鑰(對(duì)稱加密產(chǎn)生的),然后用服務(wù)器發(fā)來(lái)的公鑰加密了偽秘鑰發(fā)還給服務(wù)器,這樣服務(wù)器以為和客戶端完成了密鑰交換,實(shí)際上服務(wù)器是和M完成了密鑰交換(獲得了偽秘鑰)。同時(shí)M假扮成服務(wù)器自行用非對(duì)稱加密產(chǎn)生偽公鑰和偽私鑰,與客戶端進(jìn)行秘鑰交換,拿到客戶端發(fā)送過(guò)來(lái)的秘鑰?,F(xiàn)在客戶端拿著秘鑰,M拿著秘鑰和為偽秘鑰,服務(wù)器拿著偽秘鑰。