TRNG 中的熵調節和最終輸出偏差之間有什麼關係?
這個問題涉及真隨機數生成器的調節和輸出。它指的是 NIST 特別出版物 800-90C,關於隨機位生成器 (RBG) 結構的建議。它定義了一個 $ n $ 長度位串具有全熵(理想情況下是隨機的):-
…如果該位串估計至少包含 $ (1-\epsilon) n $ 熵位,其中 $ 0 \leq \epsilon \leq 2^{-64} $ .
現在要獲得包含全熵的位串,該文件推薦附錄 C 中列出的條件操作。對於高音 DES,任何這些函式的最小內部塊寬度為 64 位。
而且文件還說,如果你遵循這個建議,你會得到一個完整的熵 $ t $ 來自調節器輸出的長度位字元串:-
如果 $ t \leq \frac{n}{2} $ ,則輸出字元串具有全熵輸出。
這是在 TRNG 中輸出一半散列輸入熵的常用經驗法則。因此,我的問題是兩者之間的關係是什麼 $ \frac{n}{2} $ 和 $ 2^{-64} $ ? 更具體地說,最大的 $ \epsilon $ 之前 $ \frac{n}{4} $ ?
找到了。
輸入和輸出熵與偏差的關係僅受以下限制:-
$$ \epsilon = 2^{-(sn-k)/2} $$ 在哪裡 $ s $ = 輸入熵率, $ n $ = 輸入位數和 $ k $ = 內部塊寬度。如果您採用 AESy 之類的 128 位寬度的調理組件, $ \epsilon = 2^{-64} $ . 這與 NIST 完全一致。那麼請注意 $ t \leq \frac{n}{2} $ 只適用於 $ k $ 128. NIST 建議不適用於 DES /TDEA 調節器,它會產生更大的偏差 $ 2^{-32} $ . 這不會具有NIST 使用其規定的標准定義的完整熵 $ t $ . 好奇的。
最後是我的問題答案。如果 n = 4 並且我使用 AES, $ \epsilon = 2^{-192} $ .
參考:-
ID Quantique, 關於隨機抽取器的技術論文。 1.0 版 2012 年 9 月
Bruno Sanguinetti、Anthony Martin、Hugo Zbinden 和 Nicolas Gisin, 手機上的量子隨機數生成。 瑞士日內瓦大學應用物理組。
符號有點混亂,因為它使用相同的字母 $ n $ 有兩個目的,所以讓我們把它改得更清楚一點:
- 熵源輸出字元串包含 $ 2t $ 熵位可以調節為一串 $ t $ 使用批准的條件函式包含完整熵輸出的位,其中 $ t $ 是經批准的推導函式的輸出塊的長度(參見 SP 800-90B)。
(已更換 $ n $ 經過 $ t $ .)
換句話說,如果我們有一個產生字元串的物理設備 $ \sigma $ 和 $ 2t $ 熵位,至少必須是 $ 2t $ 位長,我們可以選擇一個調節函式 $ C\colon {0,1}^* \to {0,1}^t $ ,然後字元串 $ C(\sigma) $ 是 $ t $ 位長,幾乎 $ t $ 熵位——特別是, $ (1 - \varepsilon) t $ , 在哪裡 $ \varepsilon < 2^{-64} $ .
這是關於熵源的假設(在§4.2“假設”中)的陳述,至少具有 $ 2t $ 熵位在哪裡 $ t $ 是輸出塊的長度。
- SP 800-90A 中的推導函式將輸入字元串提供的熵分配為 $ n $ 位(因此輸入字元串的長度為 $ r $ 一些位 $ r \geq n $ ),輸出字元串的長度為 $ t $ 位,則以下情況成立:
* 如果 $ t \leq n/2 $ ,則輸出字元串具有全熵輸出(即輸出字元串具有 $ (1 - \varepsilon) t $ 一些熵 $ \varepsilon \leq 2^{-64} $ ).
( $ t $ 現在和上面一樣。)
換句話說,如果我們有一個字元串 $ \sigma $ 和 $ n $ 熵位,至少必須是 $ n $ 位長( $ r \geq n $ ),然後對於任何派生函式的選擇 $ C\colon {0,1}^* \to {0,1}^t $ 在 SP 800-90A 中 $ t \leq n/2 $ , 這 $ t $ -位串 $ C(\sigma) $ 幾乎有 $ t $ 熵位——特別是, $ (1 - \varepsilon) t $ , 在哪裡 $ \varepsilon < 2^{-64} $ .
這是關於推導函式(如 Hash_df)用作條件函式的假設的陳述。一個不能滿足這個屬性的函式的例子是,比如說,它只給出第一個 $ t $ 輸入字元串的位。
為什麼這些關係要成立?有關詳細資訊,請參閱較早的答案。快速總結是輸出的預期熵的粗略近似 $ F(\sigma) $ 均勻隨機函式 $ F\colon {0,1}^* \to {0,1}^t $ 在一個字元串上 $ \sigma $ 和 $ t + k $ 熵位是 $ \lg 2^t (1 - e^{-2^k}) = t + \lg (1 - e^{-2^k}) \approx t - e^{-2^k}/\log 2 $ , 所以只要 $ k $ 相當大,我們很容易在這個模型中獲得“全熵” $ \varepsilon \approx e^{-2^k}/(t\log 2) $ .
採摘 $ k \geq 64 $ 很多——我們必須這樣做,因為每個已批准的派生函式的塊大小至少為 64。我們在現實世界中沒有統一的隨機函式,但 SP 800-90A 的派生函式沒有似乎有任何有趣的屬性可以讓我們將它們區分開來,所以這是一個非常好的模型。
如果你選擇一個字元串怎麼辦 $ \sigma $ 和 $ n = 256 $ 熵位,以及一個基於 3DES 的推導函式,其輸出塊為 $ t = 64 = n/4 $ 位?然後 $ k = 192 $ , 所以 $ \varepsilon $ 真的非常小,我們在 64 位字元串中得到“全熵”——儘管這只是不到 64 位的熵。
如果你選擇一個字元串怎麼辦 $ \sigma $ 和 $ n = 130 $ 熵位,以及一個基於 AES 的推導函式,其輸出塊為 $ t = 128 $ 位?在這種情況下,邊距更小:因為 $ k = 2 $ ,上面的近似值 (a) 不是一個很好的近似值,並且 (b) 給出了一個 $ \varepsilon $ 離很遠 $ 2^{-64} $ . 也許我們最終會得到超過 64 位的熵,但這並不是 128 位字元串的“全熵”。
在什麼 $ k $ 我們畫線嗎? 為了給一個舒適的餘量而不必費力考慮,我們只是說你應該使用輸入熵的兩倍 $ {\geq}64 $ -bit 輸出很長,以便在輸出中可靠地獲得“全熵”。