2011-01-12 52 views
6

我需要創建一次性填充以加密一些數據(幾KB大小)。我應該如何生成這個一次性鍵盤來避免與基本隨機數生成相關的所有僞隨機問題,如rand()用於加密的完美隨機一次性填充

是否有可用於此的現有的可信工具或庫?

+0

您使用的是什麼語言/操作系統/運行環境? – 2011-01-12 18:21:02

+1

尋找幾個很好的解決方案:http://stackoverflow.com/questions/3436376/what-is-the-most-secure-seed-for-random-number-generation – 2011-01-12 18:41:38

+0

@Erik,無所謂許多。但最好是Windows。 – 2011-01-13 07:43:38

回答

4

嘗試Random.ORG。他們有各種免費(和付費)服務,可以根據大氣噪聲產生真正的隨機數(至少這是他們聲稱的)。

5

大多數現代操作系統都有cryptographically-secure pseudo-random number generator。例如,Windows有CryptGenRandom。您可以使用RNGCryptoServiceProvider類從.NET訪問相同的流。從C++開始,您可以使用Microsoft C++庫函數rand_s訪問相同的流。從Python中,可以使用os模塊中的函數urandom(請參閱鏈接頁面的底部)訪問它。

與普通的PRNG不同,CSPRNG被設計爲通過嚴格的統計隨機性測試。即使攻擊者可以使用它們的初始狀態或運行狀態,它們也可以在嚴重的攻擊下保持良好狀態。

密碼學家使用的術語「僞隨機」可能會誤導非技術讀者。 CSPRNG將一系列隨機值(稱爲種子)擴展爲更長的數字序列。考慮到種子,該序列是可重現的,但對於任何良好的CSPRNG,種子中的微小變化產生非常不同的序列。因此,只要至少有一部分種子是通過適當的隨機過程選擇的,攻擊者無法預測結果序列 - 即使攻擊者可以影響種子的其餘部分。

許多重要的系統,從軍事通信到實際上保護所有在線交易的加密,都依賴於「密碼安全的僞隨機」和「隨機」之間功能上相同的安全性。

編輯:如果您足夠幸運能夠使用英特爾Ivy Bridge處理器系列,您現在有another very interesting alternative

4

您無法通過算法生成真正的隨機數 - 您需要硬件幫助。如果你使用一種算法,但是安全(比如一個密碼安全的PRNG),你只需要創建一個基於PRNG的流密碼;它不再是一次性便條。