什麼是AEAD加密

Authenticated Encryption with Associated Data (AEAD) 是一種同時具備保密性,完整性和可認證性的加密形式。

AEAD 產生的原因很簡單,單純的對稱加密演算法,其解密步驟是無法確認密鑰是否正確的。也就是說,加密後的數據可以用任何密鑰執行解密運算,得到一組疑似原始數據,而不知道密鑰是否是正確的,也不知道解密出來的原始數據是否正確。

因此,需要在單純的加密演算法之上,加上一層驗證手段,來確認解密步驟是否正確。

簡單地把加密演算法和認證演算法組合,可以實現上述目的,並由此產生了幾個方案:

第一種方案,EtM (Encryption then MAC)

圖片來自 en.wikipedia.org/wiki/A

先加密,然後對密文進行 MAC 運算(一般用各種 HMAC),把二者拼接起來,發給接收方。

接收方先驗證 MAC,如果驗證通過,則證明密鑰是正確的,然後執行解密運算。

第二種方案,E&M (Encryption and MAC)

圖片來自 en.wikipedia.org/wiki/A

同時對原始數據執行加密和 MAC 運算,把二者拼接起來,發給接收方。

接收方先進行解密,然後對解密結果執行 MAC 運算,比對發來的 MAC,驗證正確性。

第三種方案,MtE (MAC then Encryption)

圖片來自 en.wikipedia.org/wiki/A

與 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請求如何加密?

TAG:加密解密 | 加密 | 网络安全 |