Randomness

NIST SP 800-90B 有什麼問題?

  • December 20, 2020

NIST SP 800-90B提供了各種用於估計熵的測試。他們還提供了這些測試的實現。使用他們的程序稱為ea_iid,估計熵非常容易。

$ ea_iid random.dat
Calculating baseline statistics...
H_original: 7.884314
H_bitstring: 0.998545
min(H_original, 8 X H_bitstring): 7.884314

** Passed chi square tests

** Passed length of longest repeated substring test

Beginning initial tests...
Beginning permutation tests... these may take some time
** Passed IID permutation tests

因此產生 random.dat 的源的最小熵估計是每字節 7.88 位資訊。

但是,此頁面稱其為無用。我無法重現此頁面的聲明 — 我的 NIST SP 800-90B 程序都沒有顯示與此頁面顯示的輸出相似的輸出。上面的輸出是一個例子。我執行的是完全不同版本的程序嗎?

作為該頁面的作者,我覺得有必要進行一些澄清:-

我執行的是完全不同版本的程序嗎?

是的。您正在執行IID測試。你需要執行ea_non_iid. 您執行的假設數據樣本是 ap=0.01 確定性內的 IID。然後計算最小值。使用最大機率的數據集熵 ( $ H_\infty $ )。這很容易。

ea_non_iid嘗試測量 $ H_\infty $ 的相關數據。這很難。90B 毫無用處(並且從未使用過)的原因是程式碼假定數據是均勻分佈的。老實說,沒有人真正知道作者的想法。

$$ Insert appropriate conspiracy theory, but I draw your attention to Federal Information Security Modernization Act (FISMA) of 2014, 44 U.S.C. § 3551 et seq., which is referenced on page 3 of 90B $$. 除了少數實驗室二進制熵源之外,大多數都產生某種形式的非均勻分佈。根據對源進行採樣和打包成字節的方式,您可能會得到非常奇怪的結果。該站點有範例,這是來自目前項目來源的另一個範例:-

直方圖

該網站還表示不信任該網站上的任何內容。做你自己的研究,看看: -

John Kelsey、Kerry A. McKay 和 Meltem Sönmez Turan,最小熵估計的預測模型,以及 Joseph D. Hart、Yuta Terashima、Atsushi Uchida、Gerald B. Baumgartner、Thomas E. Murphy 和 Rajarshi Roy,建議和插圖光子隨機數發生器的評估。

這是摘錄:-

圖形

你可以看到在某些情況下 $ H_\infty $ 被低估了六倍。他們的各種預測指標都不是很好。從經驗和研究來看,我最信任 LZ78Y 壓縮預測器,但仍然如此。如圖所示,這與我自己的測試一致。

John Kelsey 是 90B 的作者之一,所以他批評自己!

該頁面在頂部附近顯示:

NIST SP 800-90B 測試+ 僅適用於(並且僅在其行為時)均勻分佈的數據集。那種你幾乎沒有採樣過真實世界的物理熵源。

均勻分佈在位序列的上下文中,意味著像理想化的硬幣拋硬幣一樣的行為:

  1. 每個位出現 0 或 1 的機率相同;
  2. 任何隨機位的值都獨立於任何其他位的值。

這確實是大多數加密軟體所期望的隨機性。這樣一個統一的隨機位串的熵等於它的長度——也就是說,它給出了它的大小可能的最大熵。

但是物理雜訊源往往是正態分佈的,或者更通俗的說法是“鐘形曲線”,其中有一個最有可能的平均值,68% 落在平均值的一個標準偏差內,依此類推。您連結的頁面位於一個關於物理設備的站點中,該設備會產生隨機雜訊,顯然沒有聲稱其輸出是均勻分佈的。因此,確實,均勻分佈的測試不適用於評估其輸出的熵。

請注意,在實踐中,要在密碼學典型應用中使用這種非均勻設備,將執行某種調節隨機性提取,以將其原始輸出合成為與均勻隨機性無法區分的處理輸出。例如,如果您使用它的輸出來提供作業系統隨機生成器熵池,這很可能會隱式發生。


所以我想說,這個頁面將 SP-800-90B 測試標記為“無用”是誇張且無益的。這實際上只是意味著它們並非旨在評估非均勻隨機雜訊源,而是以一種可能誤導人們認為測試存在某種缺陷的方式表示。

引用自:https://crypto.stackexchange.com/questions/83882