作為信息安全領域的基石,數據加密算法你或多或少應該用過。可你知道數據加密分成 對稱加密 ( symmetric encryption ) 和 非對稱加密 ( asymmetric encryption ) 兩種嗎?對稱加密與非對稱加密有什么區別?各自適用於什么場景?
對稱加密
在對稱加密中,我們需要維護一個 密鑰 ( secret key )。數據加密者根據加密算法用 密鑰 對 明文 進行加密,得到不可讀懂的 密文 。數據解密者根據加密算法,用同樣的 密鑰 對密文進行解密,得到原來的明文。
如上圖,在加密和解密的過程中,我們用到了同一個的 密鑰 ,這樣就是 對稱加密算法 中對稱一詞的由來。那么,對稱加密算法都有哪些呢?各自有什么特點呢?
- AES ,高級加密標准,新一代加密算法標准,速度快,安全級別高;
- DES ,數據加密標准,速度較快,適用於加密大量數據,但安全性較弱;
- Blowfish ,使用變長密鑰,運行速度很快,非專利算法,沒有使用限制;
- etc
安全級別 ( Security Level ) | 工作因素 ( Work Factor ) | 算法 ( Algorithm ) |
---|---|---|
薄弱 ( Weak ) | $ O(2^{40}) $ | DES |
傳統 ( Legacy ) | $ O(2^{64}) $ | RC4 |
基准 ( Baseline ) | $ O(2^{80}) $ | 3DES |
標准 ( Standard ) | $ O(2^{128}) $ | AES-128 |
較高 ( High ) | $ O(2^{192}) $ | AES-192 |
超高 ( Ultra ) | $ O(2^{256}) $ | AES-256 |
根據安全性,對稱加密算法應該優先選擇 AES ,位數盡可能大,例如 AES-256 。
由於所有參與者共享密鑰,只要一人造成泄露便萬劫不復,這是對稱加密最大的弱點。因此,對稱加密密鑰分發、保管必須嚴格控制,以免泄露。
非對稱加密
為解決對稱加密共享密鑰引發的問題,計算機科學家發明了一種更神奇的加密方式。這種加密方式需要兩個密鑰,一個是 公鑰 ( public key )、一個是 私鑰 ( private key )。私鑰由自己保管,不能泄露;公鑰分發給任何需要與自己通訊的參與者,無須保密。
數據加密者根據加密算法,用公鑰對明文進行加密,得到不可讀懂的密文。數據解密者根據加密算法,用私鑰對密文進行解密,得到原來的明文。
由於加密環節和解密環節所用的密鑰不同,因此這種加密方式也稱為 非對稱加密 ( asymmetric encryption )。由於公鑰可以對外公開,也就不用刻意保護了。
此外,如果數據用私鑰進行加密,那么只有用公鑰才能解密。由於公鑰是公開的,這種機制一般不用於加密數據,而用於對數據進行 簽名 。
那么,非對稱加密有哪些典型的應用場景呢?接下來,我們以一個虛構故事展開討論:
Alice 是一位幫會大佬,手下有許多小弟, Bob 是其中一位。小弟們在外行動,定期匯報成果,接受指令。為保證通訊安全, Alice 通過非對稱加密算法,打造了一對密鑰:
Alice 小心翼翼地保管着私鑰,並把公鑰分發給 Bob 等小弟們。
數據加密
小弟 Bob 需要向 Alice 匯報工作, Alice 不希望匯報內容被第三方獲悉,包括其他小弟。這時, Bob 用 Alice 給的公鑰對匯報數據進行加密,再差人送給 Alice 。Alice 收到 Bob 送來的數據后,用自己手中的私鑰一解,就知道 Bob 說啥了。
由於用公鑰加密的數據只有私鑰能解,而私鑰只有 Alice 有,因此匯報內容不可能被第三方知曉。換句話講,只要私鑰不泄露,加密數據便不會被其他人獲悉。
數據簽名
Alice 給 Bob 下達行動指令,內容雖然可以公開,但 Alice 必須防止不法之徒偽造指令。
為此, Alice 先借助類似 MD5 或 SHA 的哈希算法,為指令文本計算 摘要 。同樣的文本生成的摘要一定相同;不同的文本,哪怕只差一個字母,生成的摘要一定不同。
接着,Alice 用私鑰對摘要進行加密,並將加密結果作為 簽名 與指令一起發給 Bob 。
Bob 接到指令后,用公鑰對簽名進行解密,得到 Alice 生成的摘要。然后,他用同樣的算法,重新為指令文本計算摘要。如果兩個摘要吻合,便可確定指令是 Alice 下達的。
其他別有用心的第三方,或許已經掌握了摘要計算方法,但苦於缺少私鑰,也就沒有辦法偽裝成 Alice ,向 Bob 下達指令了。
這就是非對稱加密的另一個典型使用場景—— 數據簽名 ,可歸納為兩步:
- 用私鑰對數據進行簽名;
- 用公鑰對數據進行驗證;