什麼是AEAD加密
Authenticated Encryption with Associated Data (AEAD) 是一種同時具備保密性,完整性和可認證性的加密形式。
AEAD 產生的原因很簡單,單純的對稱加密演算法,其解密步驟是無法確認密鑰是否正確的。也就是說,加密後的數據可以用任何密鑰執行解密運算,得到一組疑似原始數據,而不知道密鑰是否是正確的,也不知道解密出來的原始數據是否正確。
因此,需要在單純的加密演算法之上,加上一層驗證手段,來確認解密步驟是否正確。
簡單地把加密演算法和認證演算法組合,可以實現上述目的,並由此產生了幾個方案:
第一種方案,EtM (Encryption then MAC)
圖片來自 https://en.wikipedia.org/wiki/Authenticated_encryption
先加密,然後對密文進行 MAC 運算(一般用各種 HMAC),把二者拼接起來,發給接收方。
接收方先驗證 MAC,如果驗證通過,則證明密鑰是正確的,然後執行解密運算。
第二種方案,E&M (Encryption and MAC)
圖片來自 https://en.wikipedia.org/wiki/Authenticated_encryption
同時對原始數據執行加密和 MAC 運算,把二者拼接起來,發給接收方。
接收方先進行解密,然後對解密結果執行 MAC 運算,比對發來的 MAC,驗證正確性。
第三種方案,MtE (MAC then Encryption)
圖片來自 https://en.wikipedia.org/wiki/Authenticated_encryption
與 EtM 相反,先對原始數據執行 MAC 運算,與原始數據拼接後,執行加密演算法,將密文發送給接收方。
接受方先進行解密,然後執行 MAC 運算,驗證解密結果是否正確。
然而,業內逐漸意識到以上通過組合加密和認證演算法來實現 AEAD 的方案都是有安全問題的。
具體安全問題細節略去不表。
從 2008 年起,業內開始提出,需要在一個演算法在內部同時實現加密和認證
基於這個思想,一些新的演算法被提出,這些演算法被稱為真正的 AEAD 演算法。
常見的 AEAD 演算法如下:
- AES-128-GCM
- AES-192-GCM
- AES-256-GCM
- ChaCha20-IETF-Poly1305
- XChaCha20-IETF-Poly1305
在具備 AES 加速的 CPU(桌面,伺服器)上,建議使用 AES-XXX-GCM 系列,移動設備建議使用 ChaCha20-IETF-Poly1305 系列。
在設計加密系統的時候,請務必選用 AEAD 演算法,拋棄舊的 MtE,EtM,E&M 方案。
推薦閱讀:
※族庫加密淺析
※【VBA技巧】- 如何儘可能的保護VBA代碼?
※WinRAR 的加密效果怎麼樣,其中加密文件名是什麼意思?
※ajax post請求如何加密?