最近在知乎上讀了一篇講非對稱加密的帖子?如何用通俗易懂的話來解釋非對稱加密??正好借此機(jī)會來總結(jié)下對稱加密和非對稱加密的知識。
對稱加密
在加密和解密時使用相同的密鑰,或是使用兩個可以簡單地相互推算的密鑰。對稱加密的優(yōu)點是效率更高;缺點是加解密雙方使用相同的密鑰,對密鑰保存和傳輸?shù)陌踩砸筝^高。
非對稱加密
加密和解密使用的是兩個不同的密鑰,這兩個不同的密鑰一個叫作公開密鑰,另一個叫私有密鑰,公開密鑰對外公開,任何人均可獲取,而私有密鑰則由自己保存。公鑰和私鑰都是成對出現(xiàn)的,用公鑰加密的內(nèi)容只能用私鑰解密,而用私鑰加密的內(nèi)容也只能用公鑰解密。
例如 A 有公鑰和私鑰兩把鑰匙,他把公鑰給了他的朋友 B,如果 B 想給 A 發(fā)送信息,只要用公鑰加密發(fā)送信息,只要 A 的私鑰不泄露,信息就是安全的,即使落在別人手里,也無法解密。
數(shù)字簽名
數(shù)字簽名就是對非對稱加密和摘要算法的一種應(yīng)用。
摘要算法
摘要算法是將任意長度的一塊數(shù)據(jù)轉(zhuǎn)換為一個定長的、不可逆轉(zhuǎn)的數(shù)字,其長度通常在 128~256 位之間。摘要算法有如下特點:
只要源文本不同,計算得到的結(jié)果,必然不同(或者說機(jī)會很少)。
無法從結(jié)果反推出源數(shù)據(jù)。
摘要算法用于對比信息源是否一致,因為只要源數(shù)據(jù)發(fā)生變化,得到的摘要必然不同。
簽名
為了防止發(fā)布內(nèi)容中途被篡改,發(fā)布者可以通過摘要算法提取發(fā)布內(nèi)容的摘要,用私鑰加密之得到密文即簽名,這時候?qū)⒓用軆?nèi)容、簽名以及公鑰一起發(fā)布出去。
接收者收到數(shù)據(jù)時,首先驗證公鑰是否是發(fā)布者的公鑰,然后用公鑰對密文進(jìn)行解密,得到摘要,使用發(fā)布者對文本同樣的摘要算法得到摘要文本,比對摘要是否一致即可確認(rèn)信息是否被篡改或者是指定發(fā)布者發(fā)布的。
還有個問題是怎么確認(rèn)公鑰沒有被中途替換,是合法的?
數(shù)字證書
數(shù)字證書就是網(wǎng)絡(luò)通訊中標(biāo)志通訊各方身份信息的一系列數(shù)據(jù),其作用類似于現(xiàn)實生活中的身份證。它是由一個權(quán)威機(jī)構(gòu)發(fā)行的,人們可以在交往中用它來識別對方的身份。
HTTPS
HTTPS 其實是有兩部分組成:HTTP + SSL/ TLS,也就是在 HTTP 上又加了一層處理加密信息的模塊。服務(wù)端和客戶端的信息傳輸都會通過 TLS 進(jìn)行加密,所以傳輸?shù)臄?shù)據(jù)都是加密后的數(shù)據(jù)。
RSA 性能是非常低的,原因在于尋找大素數(shù)、大數(shù)計算、數(shù)據(jù)分割需要耗費很多的 CPU 周期,所以一般的 HTTPS 連接只在第一次握手時使用非對稱加密,通過握手交換對稱加密密鑰,在之后的通信走對稱加密。