我正在尋找一種RAIL方式來創建一個非常安全的UID,它將充當身份驗證令牌。rails - 創建安全ID /密碼
我一直在使用UUID,但被告知他們不安全。我想知道,現在在ruby/rails 3中選擇什麼方法?
我正在尋找一種RAIL方式來創建一個非常安全的UID,它將充當身份驗證令牌。rails - 創建安全ID /密碼
我一直在使用UUID,但被告知他們不安全。我想知道,現在在ruby/rails 3中選擇什麼方法?
這個問題絕不是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
猜測之一。這需要很長時間。
安全抵抗什麼?碰撞?這應取決於您生成它們的方式以及您計劃使用的數量。 – Piskvor 2010-11-25 16:35:08
我打算使用一個很好的100000s來防止某個人輕易猜出或找到一個ID。把它當作密碼。建議? – AnApprentice 2010-11-25 16:40:59