Key-Derivation

估計從真正隨機數派生的密鑰的熵

  • September 28, 2021

**注意:**這個問題是基於我的假設 $ X $ 是一個“真正的隨機數”當且僅當它以比特為單位的長度等於它的以比特為單位的熵。換句話說,當每一點 $ X $ 由隨機拋硬幣產生。

假設我有一個真正的隨機數 $ R $ 大小為 256 位(熵的 256 位),以及一個真正的隨機數 $ S $ 長度 $ n * 256 $ , 在哪裡 $ n $ 是一個自然數,所以它有 $ n * 256 $ 一點點的熵。

我現在導出四個鍵 $ T_1 $ 至 $ T_4 $ 從 $ R $

  • $ T_1 = \text{concat}(R, \text{… n times …}, R) $
  • 計算 $ t_1 = \text{sha256}(R) $ , $ t_2 = \text{sha256}(t_1) $ , …, $ t_n = \text{sha256}(t_{n-1}) $ , 並做 $ T_2=\text{concat}(t_1, …, t_n) $ .
  • $ T_3 $ 計算方式與上面相同,但使用 HMAC 而不是 sha256。
  • $ T_4 = \text{hkdf_expand}(R, \text{null}, n * 256 / 8) $ .

最後,我計算 $ K_i = T_i\text{ xor }S $ .

熵有多少位 $ K_1 $ , $ K_2 $ , $ K_3 $ 和 $ K_4 $ 有?

我的快樂猜測:

  • $ T1 $ 將有盡可能多的熵 $ R $ ,因為重複連接不會增加輸出的熵,但我懷疑它也不會減少它。
  • $ \text{sha256} $ 和 $ \text{HMAC} $ 被認為保留了輸入的熵位,但是由於建構過程 $ T_2 $ 和 $ T_3 $ 確定性地計算自 $ R $ , 的熵 $ T_2 $ 和 $ T_3 $ 將大致相當於 $ T1 $ .
  • 不知道 $ T_4 $ . 我猜的好處 $ \text{hkdf_expand} $ 當其輸入不是真正的隨機數時啟動。

大約每 $ K_i $ , 我不確定。我最近了解到,對兩個真正的隨機數進行異或運算會得到一個真正的隨機數,所以輸出的熵位仍然是它的長度,但是由於 $ T_i $ s 不再是真正的隨機數了,我不知道這裡會發生什麼。

我的直覺告訴我,熵 $ S $ 將被保留( $ n * 128 $ 位),因為 $ K_i $ 相當於加密 $ T_i $ 使用 $ S $ 作為一次性墊鍵,使 $ T_i $ 或者 $ S $ 理論上是牢不可破的,所以 $ K_i $ 仍然是一個真正的隨機數。

異或兩個真正的隨機數給出一個真正的隨機數

沒有。反例: $ S $ 均勻隨機, $ S\oplus S $ 是大小相同的全零位串 $ S $ ,並且不是均勻隨機的(除非 $ S $ 是空的)。

成立的是:異或兩個相同大小的獨立值,其中至少一個是真正的隨機數,產生一個真正的隨機數。

在練習中, $ S $ 是均勻隨機的,並且 $ T_i $ 只取決於 $ R $ (以及在以下情況下 HMAC 的未說明密鑰 $ T_3 $ ,但讓我們忽略它),一切都指向 $ R $ 獨立於 $ S $ . 因此 $ T_i $ 獨立於 $ S $ .

以上,事物的大小,和 $ K_i $ 被建造為 $ K_i=T_i\oplus S $ , 足以得出關於

熵有多少位 $ K_1 $ , $ K_2 $ , $ K_3 $ 和 $ K_4 $ 有

這留給讀者作為練習。

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