Microsoft 的 GUID 生成器在密碼學上是否安全
我在網上搜尋了多個資源,但到目前為止,對於 Microsoft 的 GUID 生成機制是否足夠安全以保證它在應用程序中用作唯一 ID 的問題,我一直無法找到明確的答案。
為了澄清,通過“足夠安全”,我的意思是詢問用於生成 GUID 的算法是否有任何已知的弱點或漏洞,可能會降低 GUID 的有效隨機性,即導致不可忽略的衝突次數。如果不是,這是否意味著 GUID 完全不可猜測,如果是,是否有某種方法可以為 GUID 生成器函式播種以有效增加生成的 GUID 的隨機性。
根據此處 MSDN 指南 ( http://msdn.microsoft.com/en-us/library/system.guid.aspx ) 中指定的資訊,是否有任何跡象表明可以依賴用於生成 GUID 的系統足夠隨機。
謝謝!
不是。Guid 的目標是唯一,但加密安全意味著它是不可預測的。這些目標有時但並非總是一致。
如果你想要加密安全,那麼你應該使用類似RNGCryptoServiceProvider 的東西
也可以看看:
上面兩個連結的關鍵點是微軟的 Guid 是 UUID 的實現,UUID 規範指出它們不應該用作安全令牌:
不要假設 UUID 很難猜;例如,它們不應該用作安全功能(僅擁有授予訪問權限的標識符)。一個可預測的隨機數源會加劇這種情況。
我不同意接受的答案。雖然違背 RFC 的建議通常是個壞主意,但在這種情況下,我能夠找到 MSDN 文件,指出 Microsoft 確實採取了明顯、有用的路線,並將加密安全的 RNG 綁定到 v4 GUID 的生成中:
根據https://msdn.microsoft.com/en-us/library/system.guid.newguid(v=vs.110).aspx,.NET 的 GUID 創建只是包裝了 Windows 函式 CoCreateGuid 和 UuidCreate。根據http://download.microsoft.com/download/5/0/1/501ED102-E53F-4CE0-AA6B-B0F93629DDC6/Windows/%5BMS-WSO%5D.pdf,自 1999 年的 Windows 2000 以來,
“Windows 中內置的所有版本 4 GUID 的隨機位是通過 Windows CryptGenRandom 加密 API 或等效的,用於生成加密密鑰的相同來源獲得”
所以我想說你可以稱它們為密碼安全——至少在它們提供的 122 位熵的範圍內。