2010-11-25 48 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猜測之一。這需要很長時間。