2010-11-25 51 views
0

我正在寻找一种RAIL方式来创建一个非常安全的UID,它将充当身份验证令牌。rails - 创建安全ID /密码

我一直在使用UUID,但被告知他们不安全。我想知道,现在在ruby/rails 3中选择什么方法?

+1

安全抵抗什么?碰撞?这应取决于您生成它们的方式以及您计划使用的数量。 – Piskvor 2010-11-25 16:35:08

+0

我打算使用一个很好的100000s来防止某个人轻易猜出或找到一个ID。把它当作密码。建议? – AnApprentice 2010-11-25 16:40:59

回答

2

这个问题绝不是Rails的具体问题。

UUID是不安全的简单事实,即它是一个独特标识符和它包含一个给定的机器的“恒定”部分(例如,它可能使用的MAC地址的机器),这使得它更容易猜测。

如果您希望100k以上的字符串没有人猜测,您需要能够将密钥分配到大的密钥空间中。让我解释一下:

如果你只需要1个键(让我们),你可以选择'A'。在A-Z的关键空间中,你有1:26的机会猜测它。现在,如果您将密钥空间扩展到A-Za-z,那么您就有1:52的猜测机会。

还需要更多安全性吗?使用更长的键:'AA'1:2704的机会。

现在,如果你想拥有2000个密钥并使用密钥长度为2(例如'AA'),那么有人可能会猜到它的一个2000:2704 => 1:1.352的机会。很糟糕。

所以,这里的关键是选择一个非常长的密钥大小。使用Digest::SHA1可以得到40个字符的键(使用十六进制,每个字符有16个不同的值)。这是1.46150164e48独特的值。你的100k值应该足够随机。

编辑:

随着40位十六进制值SHA1你有机会1:461501640000000000000000000000000000000000000000000猜测之一。这需要很长时间。