我正在寻找一种RAIL方式来创建一个非常安全的UID,它将充当身份验证令牌。
我一直在使用UUID,但被告知他们不安全。我想了解一下,这些天在ruby / rails 3中选择的方法是什么?
答案 0 :(得分:2)
这个问题绝不是Rails特有的。
UUID不安全,因为它是一个唯一标识符,它包含给定计算机的“常量”部分(例如,它可能使用机器的MAC地址),这使得它更容易猜到。
如果您想要100k +字符串而无需猜测,您需要能够在大的密钥空间内分发密钥。让我解释一下:
如果你只需要一把钥匙(让我们),你可以选择'A'。在A-Z的关键空间中,你有1:26的机会猜测它。现在,如果你将你的密钥空间扩展到A-Za-z,你有1:52的猜测机会。
还需要更多安全措施吗?使用更长的钥匙:“AA”1:2704几率。
现在,如果您想拥有2000个密钥并使用密钥长度2(例如“AA”),那么有人可能会猜到2000:2704 => 1:1.352
。非常糟糕。
所以,这里的关键是选择一个很长的密钥大小。使用Digest::SHA1
,您可以获得40个字符的密钥(使用Hex,每个字符有16个不同的值)。这是1.46150164e48
个唯一值。你的100k值应该足够随机。
编辑:
使用40位HEX SHA1值,您有1:461501640000000000000000000000000000000000000000000
猜测一个值。这需要很长时间。