與 Dieharder 一起測試時,Fortuna 和 Yarrow 應該如何比較
我將Yarrow和Fortuna都實現為數字生成器。我使用相同的熵源為每個實現執行了 100 個完整的 DieHarder(熵測試器)測試。結果令人驚訝:Fortuna 的表現不如 Yarrow。
結果顯示,使用 Fortuna 生成時結果稍差。
使用 Fortuna PRNG 的目的是否更多地關注安全性和防止“種子洩漏”而不是其生成的隨機值的“質量”?
根據要求,以下是 100 個樣本的結果:
Fortuna Test Name PASSED WEAK POOR FAILED ----------------------------------------- -------- ------ ------ -------- RGB Bit Distribution Test 97 3 0 0 RGB Bit Distribution Test 96 3 1 0 RGB Bit Distribution Test 98 2 0 0 RGB Bit Distribution Test 98 2 0 0 RGB Bit Distribution Test 97 3 0 0 RGB Bit Distribution Test 97 3 0 0 RGB Bit Distribution Test 95 3 2 0 RGB Bit Distribution Test 97 2 1 0 RGB Bit Distribution Test 97 3 0 0 RGB Bit Distribution Test 98 1 1 0 RGB Bit Distribution Test 94 6 0 0 RGB Bit Distribution Test 87 8 5 0 Diehard(er) Birthdays Test 95 3 2 0 Diehard OPERM5 Test 17 18 45 20 Diehard 32x32 Binary Rank Test 100 0 0 0 Diehard 6x8 Binary Rank Test 89 10 1 0 Diehard Bitstream Test 2 7 61 30 Diehard OPSO 77 14 8 1 Diehard OQSO Test 96 4 0 0 Diehard DNA Test 78 16 6 0 Diehard Count the 1s (stream) Test 91 6 3 0 Diehard Count the 1s Test (byte) 94 4 2 0 Diehard Parking Lot Test 96 3 1 0 Diehard Minimum Distance (2d Circle) Test 96 3 1 0 Diehard 3d Sphere (Minimum Distance) Test 95 5 0 0 Example Dieharder Test 94 6 0 0 Diehard Sums Test 0 0 0 100 Diehard Runs Test 96 3 1 0 Diehard Runs Test 97 3 0 0 Diehard(er) Craps Test 99 1 0 0 Diehard(er) Craps Test 97 3 0 0 Marsaglia and Tsang GCD Test 99 1 0 0 Marsaglia and Tsang GCD Test 99 1 0 0 STS Monobit Test 97 3 0 0 STS Runs Test 98 1 1 0 Example Dieharder Test 98 1 1 0 Yarrow Test Name PASSED WEAK POOR FAILED ----------------------------------------- -------- ------ ------ -------- RGB Bit Distribution Test 98 1 1 0 RGB Bit Distribution Test 95 5 0 0 RGB Bit Distribution Test 98 2 0 0 RGB Bit Distribution Test 98 2 0 0 RGB Bit Distribution Test 96 2 2 0 RGB Bit Distribution Test 100 0 0 0 RGB Bit Distribution Test 98 1 1 0 RGB Bit Distribution Test 97 3 0 0 RGB Bit Distribution Test 95 5 0 0 RGB Bit Distribution Test 99 1 0 0 RGB Bit Distribution Test 98 2 0 0 RGB Bit Distribution Test 97 3 0 0 Diehard(er) Birthdays Test 95 5 0 0 Diehard OPERM5 Test 15 20 51 14 Diehard 32x32 Binary Rank Test 97 2 1 0 Diehard 6x8 Binary Rank Test 91 6 3 0 Diehard Bitstream Test 4 8 57 31 Diehard OPSO 76 16 8 0 Diehard OQSO Test 98 2 0 0 Diehard DNA Test 81 13 4 2 Diehard Count the 1s (stream) Test 94 3 3 0 Diehard Count the 1s Test (byte) 92 4 4 0 Diehard Parking Lot Test 97 2 1 0 Diehard Minimum Distance (2d Circle) Test 94 6 0 0 Diehard 3d Sphere (Minimum Distance) Test 95 4 1 0 Example Dieharder Test 99 1 0 0 Diehard Sums Test 0 0 0 100 Diehard Runs Test 95 4 1 0 Diehard Runs Test 98 1 1 0 Diehard(er) Craps Test 97 3 0 0 Diehard(er) Craps Test 98 2 0 0 Marsaglia and Tsang GCD Test 97 2 1 0 Marsaglia and Tsang GCD Test 96 3 1 0 STS Monobit Test 98 2 0 0 STS Runs Test 95 4 1 0 Example Dieharder Test 98 2 0 0
使用 Fortuna PRNG 的目的是否更多地關注安全性和防止“種子洩漏”而不是其生成的隨機值的“質量”?
不,這與生成的隨機值的“質量”無關。這是關於 DieHarder 對質量確實好的東西非常偏執。僅僅因為你的 RNG 連續三次給你零,這並不意味著它是一個糟糕的 RNG——這是可以預料的。DieHarder 有一個眾所周知的歷史,不時會失敗每個存在的 RNG。你的結果只是隨機的;下次你可能會得到相反的結果。
如果測試結果增量可以歸因於隨機性,那麼如何將 Fortuna 評估為更好的 PRNG?
DieHarder 僅決定輸出是否具有隨機外觀。這是一種黑盒方法。這只能發現 RNG 質量的重大錯誤,而 DieHarder 突破極限也將好的 RNG 檢測為差。密碼學家有一種白盒方法,它提供了關於密碼的更多細節、它的安全性等。本質上,我們希望攻擊者在攻擊失敗的情況下擁有最多的細節/數據/攻擊點(DieHarder 無法很好地模擬)。Yarrow 嘗試確定輸入質量的方法不太明確。Fortuna 簡化了這一點,因為它使用了更多的隨機池(並且還通過這種方式避免了一些問題)。此外,Yarrow 使用現在已棄用的算法,其中一些算法已被破壞(更不用說效率低下等小缺陷):SHA-1 和 3DES。這些都可以改
簡單地說:Fortuna 實現起來更簡單,開箱即用地使用更好的原語,並且通常被認為更好(因為 Yarrow 有一些 Fortuna 修復的錯誤)。所有這一切都具有更大的安全邊際和更高的效率。如果 Fortuna 可用,則沒有理由考慮 Yarrow。