Cryptanalysis

為什麼要計算 pi 來估計隨機性?

  • January 29, 2020

為什麼測試套件計算 $ \pi $ (pi) 使用蒙特卡羅方法確定一系列數字是否隨機?據我所知,蒙地卡羅方法可以用來估計 $ \pi $ 本身(作為計算它的數字手段)。碰巧使用隨機數。

為什麼它必須是 $ \pi $ 如果您正在測試數字序列的隨機性?似乎在圓圈內外繪製隨機點以獲得 $ 3.1415 \dots $ 實現與在三角形內部/外部繪製點完全相同以獲得 $ 0.5 $ . 與密碼學相關的圓形有什麼特別之處嗎?

知識淵博的加密從業者不會計算 $ \pi $ 使用蒙特卡羅方法來確定一系列數字是否是隨機的。

問題中提到的測試是針對隨機數生成器的通用¹隨機性測試,其輸出的實數預計與範圍一致 $ [0\dots1[ $ . 測試包括繪圖對 $ (x,y) $ ,並確定比例使得 $ x^2+y^2<1 $ ,這應該是關於 $ \pi/4 $ (因為那是邊的正方形相交的面積 $ 1 $ 有一個半徑的圓盤 $ 1 $ 和中心在正方形的一個角落,並且正方形的任何子集都有望獲得與其面積成比例的隨機抽籤的比例)。

該測試的變體可以用於具有位或整數輸出的隨機數生成器,如密碼學中使用的那樣。但是這個測試不是特別好,或者經常使用。


此外,通用RNG測試在密碼學中通常不是很有用:

  1. 如果應用於PRNG的輸出,則此類測試將聲明 RNG 良好,包括加密非常弱且播種不良的 PRNG(例如播種為全 1 的LFSR)。
  2. 如果直接基於物理現象(例如通過去除直流分量過濾熱雜訊、保持極性以及在相對較低的頻率下採樣)應用於TRNG的輸出,許多此類通用測試往往會由於較小的原因而失敗調節電路中的偏置,即使 TRNG 按設計工作並且在通過適當設計的CSPRNG調節後完全可用。

在我看來,在密碼學上下文中,通用¹隨機性測試的唯一技術²合理使用是檢測嚴重故障³。其原型測試是以前在 FIPS 140-1和FIPS 140-2中的Monobit、Poker 和 Runs 測試;這些測試原則上是合理的,但已被指定為極其嚴格的接受水平,使得這些測試僅可用於 PRNG 的輸出,因此在很大程度上毫無意義(根據上述 1.)。在改變了接受水平之後,理由佔了上風,這些測試在 FIPS 140-2 設備啟動時不再是強制性的。

上述歷史錯誤的一個遺憾的副作用是執行 Monobit 和 Poker 測試棒的習慣,因此硬體 TRNG 的設計者努力讓他們的生成器通過這些測試達到最嚴格的水平,因此有動力避免暴露他們的內部熵在大量記錄不充分的調節之前的來源。這使得設計一個好的 TRNG 現場測試比需要的更具挑戰性;也就是說,一項測試能夠可靠地擷取部署設備中出現的危險缺陷(包括故意誘發的缺陷,例如,當智能卡通過液化氣體的蒸發而冷卻以希望真正凍結 TRNG 時),並且這樣做不會導致錯誤警報和/或永久禁用完美的設備。


¹通​​用我的意思是檢測與真正隨機的任何偏差,並相應地設置接受水平。這包括NIST SP 800-22 rev 1a

² 獲得橡皮圖章本身就是一個合理的目標。

³ 在某些設計階段檢測嚴重故障一個合理的目標。主要基於沒有檢測到嚴重故障來驗證密碼小發明(或更糟糕的算法)的設計是一種糟糕的方法。

我想我已經意識到你為什麼會計算 $ \pi $ .

這簡單: $ x^2 + y^2 = 1 $ 是一個簡單的計算,因此很快。如果您要選擇另一個具有非平凡周長的二維形狀,您將很難估計一個點落在周長的哪一側。

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