2013-01-11 47 views
3

我寫了一個代碼,該代碼根據私人密碼學項目(用於教育目的)生成隨機數。現在我想檢查一下我的隨機數發生器的質量如何。檢查隨機數的質量

測試中,我已經做了:

  • 計數的所有數字加起來,檢查的距離爲零(數字可以是正,負)
  • 比較與System.Random類的隨機數(其中被複制的數字是在.NET的隨機生成器的一半)

我還能做些什麼來檢查算法的工作效果如何?

+2

http://www.phy.duke.edu/~rgb/General/dieharder.php –

+1

請注意,測試RNG和cryto有兩個問題:1)即使不安全的發生器也可以通過任何統計測試,包括dieharder。 2)即使是安全的PRNG算法,如果播種不充分,也可能不安全。這是非常難以測試的。 – CodesInChaos

+1

您可否詳細說明「重複的數字在.NET的隨機生成器的一半」?我想看看測試代碼。我不認爲'System.Random'已經壞了。 – CodesInChaos

回答

2

我還能做些什麼來檢查算法的工作效果?

的最終出路將是給一個正式的證明了它是很難這個僞隨機序列從一個真正的隨機序列,例如區分,以減少這種區別的問題是證明一個問題(或最不強烈的信心)是困難的(例如採取離散對數)。

這部分密碼學被稱爲可證明安全,它提供了一些很好的證明技術和概念(硬核謂詞,單向函數,區分攻擊,混合分佈......)。但是,只有在算法具有可正式處理的數學基礎的情況下才能應用它。

從這個領域,第一個質量檢查是:如果你能告訴世界其他地方所有算法及其所有概念和想法的所有細節,這樣可以嗎?如果沒有,那麼就會出現問題,因爲沒有加密方案應該隱藏它的工作方式。祕密必須是個人祕密密鑰(或隨機種子),而不是算法本身。例如,一旦知道它如何工作,凱撒芯片很容易斷裂。與此相反,AES是一個開放的標準,但它仍被認爲是安全的。

+0

數學證明似乎是檢查數字質量的最佳解決方案,但這似乎非常耗時,因爲我必須投入更多時間(其實我不可用)。 –

3

TestU01是一個軟件庫,以ANSI C語言實現,爲統一隨機數生成器的經驗統計測試提供了一系列實用程序。

請參閱:P. L'Ecuyer和R. Simard,TestU01:用於隨機數發生器的經驗檢驗的C庫ACM Transactions on Mathematical Software,Vol。 33,2007年第22期。