Hash

使用散列算法構造流密碼可能出現的問題

  • July 5, 2018

我將這樣定義一個基於雜湊的流密碼範例:

  • $ H: {0,1}^* \rightarrow {0,1}^{256} $ 是雜湊函式。
  • $ K={0,1}^{256} $ 是秘鑰。
  • $ N={0,1}^{128} $ 是隨機數。
  • $ C={0,1}^{128} $ 是櫃檯。
  • $ X=H(K||N||C) $ 是密鑰流輸出。

我已經閱讀了這個網站上提出的幾個關於基於散列函式的流密碼的問題。其中一個回复說,使散列函式“安全”的屬性可能不足以構成安全的流密碼。擁有許多相似輸入的輸出是否可以計算 $ K $ ?

在嘗試確定密碼的安全屬性之前,最好先定義密碼的安全性。以 CPA 安全為例 - Katz 和 Lindell(現代密碼學簡介第 2 版)指出,如果以下關係成立,則對稱方案在選擇的明文攻擊下具有不可區分的多重加密(即,該方案對於多重加密是 CPA 安全的)所謂的“左右神諭”遊戲:

$ \textbf{Pr}[\textbf{PrivK}_{\mathcal{A},\pi}^{LR-cpa}(n) = 1] \leq 1/2 + \textbf{negl(n)} $

在哪裡 $ \textbf{K} $ 是長度的加密密鑰 $ n $ 和 $ \textbf{negl}(n) $ 是一個“可忽略的”函式 $ n $ (這種關係是 Katz 和 Lindell 對上述文本中定義 3.23 的重新陳述)

鑑於 CPA 安全性的上述定義,只要底層的“分組密碼”是偽隨機函式並且您正在處理“q-query”對手,即您是將對手的預言機查詢數量限制為 $ q $ 這樣 $ q^{2}<< 2^{n} $ 在哪裡 $ n $ 是塊的大小(參見此處所謂的“CTR 模式定理”:http: //spark-university.s3.amazonaws.com/stanford-crypto/slides/04.5-using-block-annotated.pdf

如果您的基礎“塊”是 PRF,並且您已經建構了適當的隨機計數器模式,那麼根據上述結果,您的方案將是“CPA 安全”的。

另一方面,如果您需要 CCA 安全性,則您的方案需要以經過身份驗證的加密方案的方式具有不可延展性。因此,從安全定義的角度來看,您對安全問題的回答部分取決於您需要什麼或希望實現什麼。

假設散列函式是 PRF,這是安全的。它對於常見的 Merkle-Damgård 雜湊函式(如 SHA-256)也是安全的。此外,如果使用 $ n × n \rightarrow n $ 壓縮函式 $ F $ 作為 $ C = P \oplus F(\text{Key}, \text{Nonce}\mathbin|\text{Counter}) $ , 前提是 $ F $ 是一個 PRF 並且 $ n $ 足夠大以防止暴力攻擊。

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