Encryption

為什麼我應該使用 Authenticated Encryption 而不僅僅是加密?

  • November 24, 2019

分組密碼的使用有多種不同的操作模式,其中一些提供“加密”,一些提供經過身份驗證的加密

為什麼我應該使用經過身份驗證的加密模式而不僅僅是加密模式?

這個問題的目的不是討論經過身份驗證的加密 vrs 加密模式的不同模式(儘管一個好的答案可能會選擇):它的目的是證明為什麼/何時 AE 比“普通”加密更好。

明文加密和經過身份驗證的加密 (AE) 之間的關鍵區別在於 AE 額外提供了真實性,而明文加密僅提供機密性。讓我們詳細研究這兩個概念。

在進一步的文本中,我們假設 $ K $ 是一個秘密密鑰,授權方知道,但攻擊者不知道。

目標

*機密性(privacy)*意味著攻擊者無法獲得任何關於明文的資訊 $ P $ 從密文 $ E_K(P) $ 除了可能的長度。換句話說,對於那些不知道的人來說,密文看起來就像一個隨機字元串 $ K $ ,即使他們對明文有一定的控制權。所有的民間傳說加密方法,從一次性密本到 Enigma,都提供機密性(在某些假設下)而且只有它。

數據真實性(完整性)是指擁有 $ K $ ,可以檢查是否接收到數據 $ D $ 是真實的,即它僅由知道的發送者建構 $ K $ . 數據可以是明文或密文,每種情況下的真實性存在細微差別:如果密文經過身份驗證,則我們知道密鑰所有者授權了密文,但不一定是明文。實現真實性的傳統方法是使用消息驗證碼 (MAC): $$ H_K(D) = T, $$ 在哪裡 $ T $ 稱為標籤。在公鑰密碼學的世界裡,同樣的目標也可以通過數字簽名來實現。

你需要什麼

使用者通常能夠決定他正在尋找這些屬性中的哪一個。例如,如果他知道攻擊者無法修改數據,他可能不需要對其進行身份驗證。但是,如果他需要兩者,則有安全和不安全的方式來組合兩種類型的方案。例如,使用相同密鑰的幼稚方法 $ K $ 在這兩種方案中,對於大多數實例化來說都是危險的不安全。因此建議採用組合方案。

認證加密

認證加密(AE) 同時提供機密性和數據真實性。AE 方案通常比僅機密性或僅真實性方案更複雜。然而,它更容易使用,因為它通常只需要一個鍵,並且更健壯,因為使用者做錯事的自由度更少(另見更詳盡的答案)。

作為一個單獨的功能,經過身份驗證的加密方案可以驗證但不加密其輸入的一部分,這稱為關聯數據。例如,我們可能希望加密 Internet 數據包的內容,但我們必須不加密其頭部,但仍與內部數據綁定。

安全

我們還沒有具體說明我們所說的安全方案是什麼意思。顯然,有幾個安全概念,使用者必鬚根據他對對手的期望能力在其中進行選擇。

對於僅保密的操作模式,最流行的安全概念處理選擇明文攻擊。讓 $ E $ 是一個加密方案。我們假設對手不僅知道一些明文 $ P $ ,但也可以選擇其中一些進行加密(這是一個相當實際的情況)。因此,我們允許攻擊者連續多次選擇任何明文進行加密。我們仍然需要一個安全方案是它在每種情況下輸出隨機的密文: $$ E_K(P_1),E_K(P_2),\ldots, E_K(P_n) \sim RandomString(|P_1|+|P_2|+\cdots+|P_n|) $$

即使對手重複他的明文,對手也無法區分他從相同長度的真隨機比特生成器的輸出中獲得的整個密文集。後一個要求意味著該方案必須是非確定性的,實際上,滿足這些要求的僅保密模式要麼是機率的,要麼是基於隨機數的。

我注意到有一些民間傳說的安全概念將方案的安全性與恢復密鑰的能力聯繫起來 $ K $ 本身。當密鑰可以在其他地方使用時,這很重要,但現在這種情況已經不常見了,而且上面描述的安全概念很普遍。

真實性模式的安全性以不同的方式定義。讓 $ H_K $ 是這樣的方案與密鑰 $ K $ . 我們要求如果對手選擇任何數據 $ D $ 還沒有被認證,那麼他猜標籤的機會 $ T $ 這樣 $$ H_K(D) = T $$ 可以忽略不計。如果他送出這對 $ (D,T) $ 給驗證者,他會得到答案 $ \perp $ (錯誤)。

請注意,我們還沒有討論對僅保密模式的選擇密文攻擊。當對手也能夠發送他自己的密文進行解密時,這些是攻擊。雖然這種設置也出現在實踐中(儘管比選擇明文攻擊少),但僅保密方案無法抵抗此類攻擊。要建立這種安全性,使用者必須再次使用經過身份驗證的加密

認證加密方案的安全性由兩部分定義。首先,與僅保密模式類似,對手必須無法區分密文和隨機字元串。其次,無論是假的(不是在 $ K $ ) 她發送解密的密文,她很可能得到 $ \perp $ 作為回應。

因此,如果需要,經過身份驗證的加密模式還可以為您提供針對選擇密文攻擊的安全性。

這個怎麼運作

有許多集成的認證加密方案:CCM、GCM、OCB、EAX 等,其中建立機密性和真實性的機制緊密耦合。這些方案的設計遠遠超出了主題。但是,有一個簡單的組合方案,即著名的 Encrypt-then-MAC,其工作原理如下。讓 $ K_1,K_2 $ 成為密鑰, $ P $ 成為明文, $ E $ 是某種加密模式,並且 $ H $ 是一些MAC。然後方案 $$ \Pi_{K_1,K_2}: M\rightarrow E_{K_1}(M) || H_{K_2}(E_{K_1}(M)) $$ 是一個安全的認證加密方案,如果 $ E $ 是一種安全的保密模式,並且 $ H $ 是一種安全的真實性模式。

認證加密方案的附加功能

除了提供機密性和真實性之外,經過身份驗證的加密方案還可能具有許多附加功能。沒有方案擁有所有這些,因此最佳選擇取決於使用者的設置。

  • 安全級別。一個方案僅在加密數據或解密請求數量的一定範圍內保證機密性和數據真實性。此界限通常遠低於密鑰空間,並且對於基於 AES 的模式通常不會超過 $ 2^{64} $ .
  • 並行性 如果有大量可用資源,可能希望並行執行加密、解密或驗證。使用連結的模式(如從 CBC 加密或海綿結構派生的模式)難以並行化。
  • 線上加密。我們說一個方案是線上的,如果它允許在數據可用時立即加密,而不知道它的長度。
  • 專利的使用。最有趣的 AE 方案之一,OCB 模式,已獲得專利,並且由於該屬性而較少使用和分析。通常希望該方案是無專利的。
  • 標籤更新。大多數方案,除了 GCM 等少數例外,如果修改了一小部分明文,則需要重新計算幾乎整個密文。如果密文可以快速更新,它將允許更快地處理大量加密數據,例如硬碟驅動器加密。
  • 使用隨機數或隨機 IV。隨機數和隨機 IV 導致不同的安全模型,這些模型通常不兼容(使用隨機數的方案可能是安全的,但對於相同長度的隨機 IV 則不安全,反之亦然)。雖然 nonce 唯一性可能更難確保,但隨機 IV 需要單獨的隨機數生成機制並導緻密文擴展。
  • 可變鍵、隨機數或標籤長度。所有三個參數通常都受到使用 AE 方案的應用程序的限制。反過來,AE 方案有自己的,有時是不兼容的限制。方案的可變性越多,它適合的應用就越多。
  • 處理相關數據。所有現代方案都允許對未加密的關聯數據進行身份驗證。但是,其中一些無法在明文結束之前對 AD 進行預處理,這可能會影響性能。

補充閱讀

Rogaway的技術報告是對僅保密模式、MAC 和一些經過身份驗證的加密模式的全面調查。它還包含有關安全概念的所有正式細節。

引用自:https://crypto.stackexchange.com/questions/12178