Block-Cipher

使用分組密碼導出獨立值

  • July 24, 2022

假設有一個任意 $ GF(2^n) $ 元素 $ x $ . 它的分佈是未知的。

任務是導出兩個 $ GF(2^n) $ 元素 $ y $ 和 $ z $ , 分佈均勻,相互獨立。

讓 $ x $ 被可能的對手知道。

顯而易見的解決方案是:

  1. 使用一些KDF,但是評估需要很多時間。這個操作會經常用到。
  2. $ y = E_k(x), z = E_k(\overline{x}) $ ( $ E $ 是分組密碼),但知道 $ y $ 和 $ z $ 對於一些 $ x $ 我們可以很容易地找出 $ y’ = z, z’ = y $ 為了 $ x’ = \overline{x} $ .
  3. $ y = E_k(x), z = E_{k’}(x) $ ,但是這種方法使用了兩個可能不同的 PRP,並且使其餘的證明變得更加困難,因此我想避免使用不同的 PRP。
  4. 讓 $ x $ 成為其中的一個元素 $ GF(2 ^ {2n}) $ 並放 $ y = E_k(x[0..n]), z = E_k(x[n..2n]) $ , 但 $ x $ 通常是一個很小的數字,所以上半部分可能為零。
  5. 看到這個問題,但解決方案是使用 KDF 和雜湊,這在性能方面太昂貴了。

我有幾個想法,但我不確定是否這樣 $ y $ 和 $ z $ 是獨立的。

  1. 讓 $ y = E_k(x), z = E_k(y \oplus k’) $ , 在哪裡 $ k’ $ 是均勻的、隨機的和獨立的。
  2. 讓 $ y = E_k(x), z = E_k(x \oplus k’) $ , 在哪裡 $ k’ $ 滿足與前一個選項相同的條件。但是,此解決方案存在以下缺陷: $ y = z \implies k’ = 0 $ . 如果對手可以攔截這些值,它可能會影響一些實際的安全性。理論上,這個對手的機會被忽略了(他或她與密碼系統作為黑盒進行互動),但如果第 1 或第 3 種情況產生獨立的值,我更喜歡其中一個。
  3. 讓 $ y = E_k(x), z = y \oplus k’ $ , 在哪裡 $ k’ $ 又是均勻隨機且獨立的。

問題是:是 $ y $ 和 $ z $ 在這種情況下相互獨立。如果沒有,是否有任何“輕量級”方法來得出這些值。

讓 $ k, k’ $ 成為萬能鑰匙和 $ y, z $ 成為我想從主密鑰派生的一些具體密鑰,並且對於不同的密鑰應該彼此不同 $ x $ 的。它們也應該是一致隨機的並且彼此獨立。

如果 $ k $ 是統一且獨立的,那麼對於固定 $ x, $ $ {E_k(x): k \in GF(2)^n} $ (假設 keylength=blocklength)通常是 PRF 而不是 PRP $ k $ 鍵空間的範圍。因此,它在箱分佈中具有隨機球,並且對於兩個不同的 $ k\neq k’ $ $ E_k(x) $ 可能等於 $ E_{k’}(x) $ 大約有機率 $ e^{-1} $ (紊亂)。因此選項 2 可能有 $ y $ 和 $ z $ 即使一樣 $ k’\neq 0. $

如果您處理,您可以直接使用 PRP 屬性 $ x $ 作為關鍵

$$ fixed, with nonuniform distribution but that won’t matter $$例如,您可以定義 $$ y=E_x(k),\quad z=E_x(k’), $$ 現在這些是來自您正在使用的同一個 PRP 的兩個“單點”樣本,並且是均勻分佈和獨立的。 我想知道這個或類似的東西是否能滿足您的要求。如果 $ x $ 需要隱藏,我想你可以這樣做 $ x_0=H(x) $ 對於一些雜湊函式和使用 $ E_{x_0}(\cdot) $ 反而。

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