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