Randomness
驗證 TRNG 輸出的隨機性和唯一性
我們需要驗證關於一組數字的兩個聲明:
- 它們是隨機的
- 它們在集合中是獨一無二的(集合大約2000億(2TB bin儲存))
據推測,這些數字是由 TRNG(基於輻射探測器)生成的。TRNG 本身是一個 PCI Express 卡(我們還沒有)並且可能是一個 TRNG 饋送 CSPRNG。
有什麼方法可以驗證索賠?對於隨機性,有 NIST 和其他規範和工具。
但是如何將第一個聲明的驗證與驗證第二個聲明(集合中的唯一性)聯繫起來?請記住,幾乎可以肯定 TRNG 的輸出已從重複項中過濾掉。這很可能會破壞隨機性測試。
沒有隨機數這樣的東西,因此嘗試驗證一組特定的數字是否“隨機”是一個類別錯誤。有數字的隨機生成器;相關的問題是你——或者更重要的是,一個資金充足的對手——是否可以在你不知道先驗的情況下預測輸出。要回答這個問題,您必須:
- 研究設備內部機制的物理特性。聘請世界上最優秀的理論物理學家,根據人類目前對物理學的理解
- 你可以在這裡做什麼驗證?你,或者你僱傭的實驗物理學家,可以設計實驗來排除關於物理學如何工作的替代假設。但是在這個階段,您無法對RNG 設備的輸出做任何有意義的事情。
- 研究設備的工程。聘請有能力的工程師來確定設備是否有可能發生故障,如果有,請模擬它在發生故障時的行為方式。
- 你可以在這裡做什麼驗證?您或您僱用的統計學家也可以設計一個假設檢驗,以根據您的 RNG 設備的輸出來區分故障組件和工作組件。
- 確保計算假設檢驗不會通過旁道洩露秘密。
- 如果涉及 CSPRNG,請研究 CSPRNG 的密碼學。聘請世界上最聰明的密碼分析員來尋找 CSPRNG 的鑑別器。
- 你可以在這裡做什麼驗證?您或您僱用的密碼學工程師也可以使用已知答案測試向量編寫自動測試,以確認 CSPRNG 實施的設計已受到數十年的審查,並由密碼分析家在嚴格的同行評審學術會議上發表世界。
- 請注意,CSPRNG 基本上可以保證防止硬體健康測試,這就是為什麼您應該先將這些測試應用於硬體 RNG 輸出,然後再使用 CSPRNG 對其進行調節。
或者,如果您不喜歡這些答案,我聽說您可以從 RAND Corporation 購買一本經過認證的隨機數的書,之所以這麼命名,大概是因為他們是這方面的專家。
至於檢測重複,這取決於數據的單位。重複位?好吧,只有兩個可能的位,所以你可能有重複,除非你發現了人類迄今未知的新位!重複太比特長度的位串?即使您有數 TB 的數據,您也可能只有其中一個。但也許您的意思是 32 位或 256 位字元串。檢測大列表中重複項的一種方法是對其進行排序——成本計算 $ O(n \log n) $ 天真地看待事物的時間,或 $ O(n \sqrt n) $ 在可能與大量數據相關的更現實的區域時間度量中,然後掃描它以查找重複項。但這似乎是一個一般的非密碼算法問題。