Random-Number-Generator
硬體隨機性來源的質量測試
假設我開發了一個硬體隨機源,我想用它來播種一個密碼安全的隨機數生成器。
我將如何進行測試?是否有標準化的測試可以用來檢查他的熵源是否足夠可靠以生成密碼隨機數?
例如,
onerng.info
聲稱可以生成任何使用者需要的熵來保護他的隱私和 blablabla。他們如何證實他們的主張?如何驗證隨機數生成器?
NIST 有一個用於測試(偽)隨機數生成器的統計測試套件。還有許多其他套件,例如Diehard、Dieharder和TestU01。
但是所有這些測試都可以證明您的生成器是隨機的。他們無法證明這一點。所以你真的需要一個獨立的論據來解釋為什麼你的生成器的輸出真的是隨機的。真正的隨機數生成器通常包括:
- 輸出隨機過程的數字化樣本的熵源(但其輸出可能既不統一也不獨立)。
- 一種非確定性隨機位生成器(NRBG),它使用熵源的輸出來生成統一且獨立的隨機位。
因此,相應地,您需要:
- 你的熵源是隨機的,並且證明了它的熵率的下限(它是多麼隨機,每單位時間)的論點;
- 一個論點是,在給定雜訊源的輸出的情況下,您的 NRBG 會產生完整的熵輸出(均勻且獨立的隨機位)。
而且這裡沒有“亮線”測試。你不能證明你的輸出“真的是隨機的”——你證明你用來產生輸出的過程是合理的,你的實現是可靠的,你的硬體可以抵抗監控和乾擾,等等。你還提供健康檢查機制和回退來檢測和防範故障。
您可能對 NIST SP 800-90 系列感興趣,其中詳細介紹了隨機數生成器的標準:
- SP 800-90Ar1:使用確定性隨機位生成器生成隨機數的建議(第 1 版)
- SP 800-90B:關於用於隨機比特生成的熵源的建議(第二稿)
- SP 800-90C:隨機位生成器 (RBG) 結建構議(第 2 版草案)
特別是 90B 處理熵源,而 90C 的部分處理非確定性隨機位生成器 (NRBG) — 旨在獲取雜訊源輸出並產生真正隨機輸出的算法。