2013-09-28 31 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

相关问题