Randomness
FIPS 140-2 有什麼用?
我剛剛使用了在 rngtools 中實現的 FIPS 140-2 測試,即 rngtest。我在一個 12.3MB 的 pak8 壓縮 ASCII 文本文件上執行它。它通過了大部分測試,失敗率為 0.2%。Monobit 和 Continuous 執行測試實際上已完成,沒有任何失敗。
檢測隨機性似乎非常鬆懈。如果它(有效地)將高度結構化的 zip 文件作為高質量隨機數傳遞,那麼這個測試的意義何在?
這是詳細資訊…
cat /tmp/raw.txt.fp8 | rngtest rngtest: starting FIPS tests... rngtest: entropy source drained rngtest: bits received from input: 98327312 rngtest: FIPS 140-2 successes: 4906 rngtest: FIPS 140-2 failures: 10 rngtest: FIPS 140-2(2001-10-10) Monobit: 0 rngtest: FIPS 140-2(2001-10-10) Poker: 1 rngtest: FIPS 140-2(2001-10-10) Runs: 1 rngtest: FIPS 140-2(2001-10-10) Long run: 8 rngtest: FIPS 140-2(2001-10-10) Continuous run: 0
首先,嚴格意義上來說,通過統計檢驗來檢測隨機性是不可能的。只能檢測到隨機性的缺失。
其次,一個完美的壓縮算法應該生成一個與隨機數無法區分的輸出。一個揮手的論點如下:
如果輸出與隨機數無法區分,那麼它將包含一些剩餘的結構。這種結構可以用來進一步壓縮輸入。
這意味著,您可能唯一能做的就是對您的隨機數進行許多好的統計測試。它不能證明你的來源是真正隨機的,但它可以給你一些證據證明它沒有被破壞。
值得一提的第三點是 NIST 已經通過 Nist SP 800-90B 出版物的更全面的測試取代了 Fips 140-2 的簡單測試。