Hmac

有沒有比 HMAC 更有效的方法來實現收斂加密?

  • November 24, 2019

我正在考慮這個問題的最佳答案中描述的聚合加密系統。然而,似乎首選的現代 HMAC 算法,如 HMAC-SHA256(在步驟 2 中用於創建“密鑰”)比實際加密慢得多。然後在明文大小的數據上再次呼叫 SHA256以創建定位器。

似乎作為 HMAC 步驟一部分的第一個 SHA-256 呼叫可以被任何其他無法反轉的明文轉換替換,並且在給定相同的明文數據的情況下會產生相同的輸出,就像簡單地用“特別選擇的 HMAC 密鑰”。我還閱讀了有關經過身份驗證的加密的資訊,並且想知道是否可以使用在例如 AES256-GCM 期間創建的 MAC 作為密鑰。

這些方法中的任何一種都允許迴避傳統 HMAC 方法的性能成本嗎?我能想到的唯一問題是,如果需要,可能很難提出 IV,因為所有編寫者都需要以某種方式使用相同的,以便“定位器”在所有實例中保持一致。相同的輸入數據。

如果沒有,是否有任何已知的技術可以減少 HMAC 的成本(除了減少輸入大小)?

答案取決於您如何定義“融合加密”以及您希望防禦哪些威脅。以下是您可能意味著的兩個廣泛的選擇:

  1. 你是一個儲存服務,你對你的使用者做出關於加密的崇高承諾,但你也在不相關的各方之間進行重複數據刪除。 (也許您濫用“零知識”一詞;在此類公司中很流行!)您只是想阻止對手
  • 恢復他們知道的明文,或
  • 偽造用於重複數據刪除的明文,以便某些嘗試儲存文件的倒霉使用者在以後嘗試檢索文件時會得到偽造。這是一個非常薄弱的​​安全概念,但它大致對應於,例如Dropbox,他們可能通過刪除無關人員多次共享的重複文件來節省大量資金,並且他們可能通過搶先檢查文件來獲得很多布朗尼積分已知兒童色情並通知當局(當然,應用於顛覆性圖像的完全相同的技術將符合專制政府的利益,但我們不會談論這個)。

所以你用 $ H(m) $ 作為加密密鑰,也許 $ H(H(m)) $ 就像重複數據刪除索引一樣,就像 Tahoe-LAFS 一樣(沒有收斂秘密)。在這種情況下,您需要一個抗衝突的雜湊函式 $ H $ - 否則攻擊者可能會發現良性文件之間的衝突 $ m $ 和一個文件 $ m’ $ 充滿兒童色情內容,然後說服受害者嘗試上傳 $ m $ . 沒有捷徑。對不起。如果您確實需要從中擠出性能,一些抗衝突雜湊函式比其他函式更便宜 - 請參閱eBASH以獲得在各種硬體上的公平性能比較。 2. 您或您和一小群朋友擁有可用於加密文件的秘密,並且您想在您(和您朋友的)文件之間進行重複數據刪除。 您想防止知道密鑰的對手甚至確認有關儲存了哪些文件的假設,當然,也防止您欺騙您接受偽造文件。

導出收斂加密密鑰和重複數據刪除密鑰所需的是一個*偽隨機函式族:對於**不知道密鑰的任何人,*輸出必須與統一隨機無法區分。

SHA-256 之所以昂貴,主要是因為它為抗碰撞付出了代價,雖然 HMAC-SHA256 是一種非常受人尊敬且廣泛可用的 PRF,但當你使用它時,你仍然需要為抗碰撞付出代價。

這裡有幾個選擇:

  • 與 SHA-3 中使用的 24 輪 Keccak 相比,更便宜的 PRF(如Kravatte)基於 6 輪 Keccak。這裡沒有很多廣泛可用的選項:該領域的大多數工作都涉及短輸入 PRF 或抗衝突雜湊。
  • 選擇一個通用雜湊家族 $ H $ 具有有界碰撞機率,例如 Poly1305,以及短輸入PRF $ f $ ,如ChaCha或Salsa20(或HChaCha或HSalsa20,稍便宜一些)。然後建構一個長輸入PRF,如下所示:

$$ \begin{equation*} F_{k_1,k_2}(m) := f_{k_1}(H_{k_2}(m)). \end{equation*} $$

也就是說,鬆散地使用 $ H $ 壓縮碰撞機率低的消息,然後使用 $ f $ 打亂它。

像 Poly1305 這樣的通用散列系列比 SHA-256 或任何其他抗衝突散列函式的計算成本要低得多,並且可以有效地進行矢量化。Poly1305 實現廣泛可用,例如在 NaCl/libsodium 中作為 crypto_onetimeauth_poly1305。

如果碰撞機率為 $ H $ , 那是 $ \Pr[H_{k_2}(x) = H_{k_2}(y)] $ 為了 $ x \ne y $ , 最多為 $ \varepsilon $ , 如果最好的 PRF 優勢反對 $ f $ 是 $ \delta $ , 那麼最好的 PRF-advantage against $ F $ 最多是 $ q^2 \varepsilon + \delta $ 在哪裡 $ q $ 是您在單個密鑰(證明)下處理的消息數。

對於 Poly1305, $ \varepsilon = 8\lceil L/16\rceil/2^{106} $ 消息最多 $ L $ 字節長,因此對於 Poly1305 和 ChaCha,如果您儲存(或者如果對手試圖偽造)長達 10 億兆字節長的文件(1 PB 數據),則對手在區分任何收斂密鑰和統一密鑰方面的優勢隨機字元串最多約為 $ 2^{60} 2^{16} 8/2^{106} + \delta = 2^{-27} + \delta $ . 如果對手對其施加額外的計算能力,那隻會提高 $ \delta $ ——但除非他們能破解 ChaCha,否則額外的計算能力與他們猜測你的 256 位密鑰所需的能力相比將相形見絀。

這種技術是確定性認證密碼AES-GCM-SIV 工作原理的一部分——輸出 $ F $ 既用作身份驗證標籤,又用於派生每個消息的子密鑰以加密消息。(當然,AES-GCM-SIV 使用的是 GHASH,而不是 Poly1305,以及 AES,而不是 ChaCha,所以它對硬體實現有利,對軟體實現不利。)

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