如何估計有限密鑰空間中二進制密鑰的有限樣本的“隨機性”?
給定由提取器生成的一組位序列,估計這些生成的密鑰的隨機性的有效設置是什麼?通常可以為該提取器得出什麼解析度?提取器將僅生成固定長度的位序列,例如 20 位。因此,所有可能的結果僅跨越有限的密鑰空間。
隨機性
儘管我們希望將生成的序列作為加密協議的輸入(即使在低熵輸入的情況下也具有很強的安全性),但我們對“隨機性”的要求比任何定義明確的隨機性概念要寬鬆一些因為這些通常關注無限序列的屬性。我們更關注局部隨機性,即由無限長隨機序列的有限子序列表示的屬性,我們甚至會對錶徵我們的提取器展示的特性/偏差/位間依賴性的結果感到滿意。
目前,我們從兩個角度來解決這個問題:
- 經驗:我們對生成的序列集應用統計測試,例如將序列集中的生日碰撞次數與相同大小的典型子樣本的估計碰撞次數進行比較。我們應該在這裡指出,我們知道套件更頑固,但不要認為它們在這裡適用,因為我們只對有限序列的情況感興趣。
- 概念性:我們專注於極端情況,例如我們的提取器生成僅由 1 組成的序列的情況,並推理該事件的可能性。
請注意:我們知道諸如 dieharder 之類的套件。我們也知道其他不同的測試,但認為它們在這裡不適用,因為它們並不專門針對固定長度序列集!
儘管我們認為沒有其他直接的方法可以解決這個問題,但我們將不勝感激任何進一步的見解或建議。有意義的測試也將不勝感激。
**更新:**雖然我們知道這些位序列的串聯應該是可能的,因為它們是隨機的,但我們天生缺乏足夠的數據來做到這一點——我們依賴於特定的感測器數據來讓我們的提取器工作,而這並不容易大量獲得。我們可能只能提取大約 1GB。因此,我們正試圖通過更多地關注我們問題的具體特徵來繞過這種缺乏數據的情況。
此外,術語密鑰在這裡可能不適用,應將其視為密碼,因為我們從未使用它來加密純文字。即使提取器中存在一些已知的輕微弱點,這也可能使我們能夠使用它。
這裡有幾點需要注意:
- 根據定義,任何測試序列都是有限的,我們不能在無限序列上執行測試;
- 輸出的大小很有趣,但如果它足夠隨機,那麼 20 位序列的連接也應該是隨機的;
- 我們不能肯定地說一個序列是真正隨機的,因為許多算法可以生成看似隨機的輸出,但實際上並非如此——就像來自特定偏移量的 Pi 的一部分;
- 特性/偏差/位間依賴性對於密鑰生成是不可接受的。
太好了,順便說一句,讓我們繼續回答:
- 更頑固的測試和任何其他測試似乎都適合您的特定問題;
- 一次生成 20 位的事實並不是一個特別的問題,只要它是隨機的;
- 您應該了解隨機數生成器的屬性並測試它是否應該在給定這些屬性的情況下是隨機的- 基本上您不能也不應該在沒有描述 RNG 本身的情況下測試隨機性;
- 如果您擔心您的結果有偏差,那麼您至少應該對生成的流進行白化和/或將其用作確定性隨機位生成器(DRBG 或 CSPRNG)的輸入。
至於(4),您似乎已經假設您的協議會處理可能的偏差(儘管您也談到使用隨機性作為關鍵數據)。在那種情況下,我會嘗試證明偏見不會造成問題。此外,我會確保 RNG 不能用於需要加密安全隨機數生成器的應用程序的其他部分。
最後,請注意,頑固的和類似的套件在(非常)大的數據集上效果最好。幾GB是最低限度的。我希望你的發電機足夠快。
警告:我不是這方面的超級專家,無法回答您的直播展示的當地房產。我確實認為通用測試套件不會接受這一點的想法是有缺陷的。我很確定像 die hard 這樣的套件會選擇它們 - 但我不確定返回結果的清晰度。
答案是你只是在想這個問題:-)
除了忘記隨機性是樣本量的函式之外,您沒有任何特殊的問題類別。更大的樣本只是意味著更容易反駁隨機性,容納更多的測試。較小的樣本僅意味著適用的測試較少。
1GB 是一個巨大的、巨大的數據量。NIST SP 800-22測試套件的完美尺寸。
隨機性的定義之一是具有頻率穩定性。根據定義,只要二進制序列的任何適當選擇的子序列具有頻率穩定性,它就是隨機的。如果您有一個固定的遍歷熵源,則自動滿足此要求。如果感測器的初始原始熵測量值正確,則基於簡單矩陣或散列的提取器不會真正出錯。但這是另一個問題和另一罐蠕蟲。
如果您的生成器產生 IID 輸出,則上述定義成立。因此它是直截了當的。連接並使用 NIST。這就是 TRNG 驗證的一貫做法。
在一個長的隨機流中,每 128kB(並且必鬚根據定義)自動出現 20 個序列。所有隨機性測試套件都知道這一點。