Microsoft的GUID生成器是否具有加密安全性

raT*_*aTM 6 .net security cryptography guid

我已经在线搜索了多个资源,但到目前为止还无法找到一个明确的答案,即微软的GUID生成机制是否足够安全以保证它可以作为整个应用程序的唯一ID使用.

为了澄清,'足够安全',我的意思是询问用于生成GUID的算法是否具有任何已知的弱点或漏洞,这些弱点或漏洞可能会降低GUID的有效随机性,即导致不可忽略的冲突次数.如果不是,这是否意味着GUID是完全不可行的,如果是,有一些方法可以为GUID生成器函数设定种子,以有效地增加生成的GUID的随机性.

基于在MSDN引导这里(中指定的信息http://msdn.microsoft.com/en-us/library/system.guid.aspx)是没有任何迹象表明用于生成GUID该系统可以在要被依赖足够随机.

谢谢!

Jor*_*ger 12

我不同意接受的答案。虽然通常不建议使用RFC的建议,但在这种情况下,我能够找到MSDN文档,该文档指定Microsoft确实采取了明显而有用的方法,并将加密安全的RNG绑定到了v4 GUID的生成中:

根据https://msdn.microsoft.com/zh-cn/library/system.guid.newguid(v=vs.110).aspx,.NET的GUID创建仅包含Windows函数CoCreateGuid和UuidCreate。根据https://msdn.microsoft.com/zh-CN/library/bb417a2c-7a58-404f-84dd-6b494ecf0d13#id11的说法,自Windows 2000于1999年问世以来,

“通过Windows CryptGenRandom加密API或等效的(用于生成加密密钥的相同来源)获得Windows内置的所有第4版GUID的随机位”

因此,我想您可以称其为加密安全-至少达到它们提供的122位熵的程度。

  • https://github.com/dotnet/runtime/blob/b24e9cd0996c688fd627fc1698986097e54103cd/src/libraries/System.Private.CoreLib/src/System/Guid.Unix.cs#L13调用https://github.com/dotnet/runtime/ blob/b24e9cd0996c688fd627fc1698986097e54103cd/src/libraries/Common/src/Interop/Unix/System.Native/Interop.GetRandomBytes.cs#L15 - 尽管有趣的是,尽管有这个名称,但似乎 SystemNative_GetNonCryptographyallySecureRandomBytes 的实现实际上使用 /dev/urandom或RC4 - 前者通常是安全的,后者只是有点不安全。 (2认同)
  • 第二个链接不再有效,这里是来自 Microsoft 的存档文档:http://download.microsoft.com/download/5/0/1/501ED102-E53F-4CE0-AA6B-B0F93629DDC6/Windows/%5BMS-WSO% 5D.pdf (2认同)

exp*_*nit 10

没有.Guid的目标是独一无二,但加密安全意味着它是不可预测的.这些目标有时但不总是一致的.

如果您想要加密安全,那么您应该使用像RNGCryptoServiceProvider这样的东西

也可以看看:

上述链接中的关键点是Microsoft的Guid是UUID的实现,UUID规范表明它们不应该用作安全性令牌:

不要以为UUID难以猜测; 例如,它们不应被用作安全功能(仅仅拥有访问权限的标识符).可预测的随机数源将加剧这种情况.