從Poisson分佈中提取隨機性
我正在研究基於 CMOS 相機感測器散粒雜訊的量子隨機數發生器。圖像中的散粒雜訊是由每單位時間撞擊感測器的光子數量的變化引起的。分佈遵循Poisson分佈。為了收集散粒雜訊,我必須用漫射光源照亮感測器。
許多討論如何從散粒雜訊中提取隨機性的論文通常使用等頻分箱方法。下圖是使用兩個 bin 進行隨機性提取的圖示。如果目前樣本大於平均值,則輸出 1,如果目前樣本小於平均值,則輸出 0。
這種方法的問題是不容易確定分割點,或者在這種情況下是平均值。我嘗試使用移動平均值,但由於我房間中的其他電子設備導致光源電壓有時會下降幾秒鐘,這會使我的 RNG 生成的輸出有時會出現幾秒鐘的偏差。我使用 NIST Statistical Test Suite 測試了生成的數據,它只通過了 5/15 的測試。
雖然當我應用馮諾依曼去偏方法時它通過了 14/15 的測試,但原始數據的質量真的很差這一事實仍然困擾著我。所以我嘗試了一種不同的提取方法。這是使用一個像素的工作原理
Let Brightness(t) be a function that returns the brightness of the pixel at time t if Brightness(0) < Brightness(1) then output 1 if Brightness(0) > Brightness(1) then output 0 else don't output anything
基本上,取兩個不重疊的樣本,如果第二個樣本比第一個樣本亮,則輸出 1,如果第二個樣本比第一個樣本暗,則輸出 0。
使用此方法生成的數據通過了 15/15 NIST 測試。但由於我從未見過任何論文討論這樣的方法,我需要確認這種方法是否真的像它看起來一樣好,也許需要解釋一下為什麼它很好。謝謝你。
如果沒有源模型,問題的方法是不安全的。特別是,應用於隨時間演變的源,因為這個鋸齒假設週期是和
之間的採樣時間的幾倍,輸出將嚴重偏向 0,因為函式大部分時間都在減小(這種效果會隨著添加高斯而減小雜訊,間隔採樣)。Brightness(0)``Brightness(1)
另一個問題是多個像素可以輸出相關位。
這兩種效應在實踐中很可能會出現,原因有很多:小發明電源的開關穩壓器,或環境照明的 LED 光源。在密碼學環境中,攻擊者通常對 RNG 具有某種程度的訪問權限,並且可能會故意誘發這種影響(例如,改變電源或光源)。並且根據墨菲定律的推論,經常在這種情況下得到驗證,這樣的事情將在沒有明確的對手(例如電源電容器老化的影響)的情況下發生,並且在最壞的時候發生。
使用此方法生成的數據通過了 15/15 NIST 測試
如果一個來源未能通過任何統計測試¹,這最終證明該來源從密碼學的角度來看是壞的。但是,如果源通過了所有測試,從密碼學的角度來看,它仍然是非常糟糕的;可以合理地說的最好的方法是,經過測試的源沒有測試旨在檢測的特定缺陷。
我對鋸齒的實驗表明,在不同的現實條件下,源可能會失效。設計一個通過所有測試的比特源是微不足道的,但在密碼學上卻非常弱。
¹ 比測試預測的更頻繁 $ p $ -值,正確設計、實施和應用測試。