2013-09-28 33 views
1

我正在做一些事情,需要安全的隨機,短(〜40位)的ID。他們需要是獨一無二的,這意味着在中央服務器上完成它。生成*不重複*安全隨機數的最佳方法是什麼?

每次使用新的SecureRand都會遇到生日問題,並開始花費更長的時間來生成新條目。

什麼是更好的方法?

回答

0

你說得對,如果只是隨機選擇它們,40位太短而不能避免碰撞,即使你只需要幾個。事實上,無論使用哪種算法,都稱它們爲「安全」實在太短。但是,假設您需要的數量遠遠低於其全部數量,並且您確實不需要更大空間的安全性,那麼您實際上只有一個選擇:拒絕抽樣。即隨機產生並與現有產品進行比較。就像你說的那樣,這不會「開始花更長的時間」,直到你真的接近那個萬億次,因爲你可以用O(1)散列找到使用過的那個。使用類似於40位循環發生器的東西不會重複,只能追蹤「最後」一個將不安全,並且使並行化變得困難。

+0

鑑於我使用它們的方式,它們不需要在強大的密碼學意義上是安全的。請參閱Ryan對[Google文檔](https://docs.google.com/document/d/10G_AhiovtKoLVPGny5UdisSKE4StOLXLPiIZ6j1i1iM/edit?pli=1#)第2頁第4(b)部分的評論。 「生成,看看是否存在,重複如果是/輸出如果沒有」是默認的,但它會運行到50%[生日悖論](http://en.wikipedia.org/wiki/Birthday_attack#Mathematics)level @ 〜2^20個條目,這遠遠低於預期的分配數量。 – Sai

+0

如果您需要接近2^20個鍵的任何地方,那麼使用40位密鑰空間是瘋狂的。你真的需要在這裏質疑你的假設。備份並重新審視你真正需要的東西。 –

+0

你看過谷歌文檔嗎?這不是關於密碼分析攻擊的標準問題。實際的密鑰空間受到人類可用性的嚴重限制,並且它只是不受大多數​​強制使用非常稀疏的空間使用的攻擊。 – Sai

相關問題