您可以轻松猜出可能生成的GUID吗?

时间:2009-03-13 16:09:39

标签: security session guid

GUID在为Web应用程序创建会话密钥时经常使用。我一直想知道这种做法的安全性。由于GUID是根据来自机器的信息和时间以及其他一些因素生成的,因此猜测未来可能会出现的GUID有多难。假设您已经启动了1000个或10000个新会话,以获得正在生成的GUID的良好数据集。这是否会使生成可能用于另一个会话的GUID变得更容易。您甚至不必猜测特定的GUID,而只是继续尝试可能在特定时间段生成的GUID。

6 个答案:

答案 0 :(得分:20)

以下是来自Wikipediaoriginal source)的一些内容:

  

包含MAC地址的V1 GUID   和时间可以通过   数字“1”在第一个位置   例如,第三组数字   {2f1e4fc0-81fd-11DA-9156-00036a0f876a}。

根据我的理解,他们并没有真正隐藏它。

  

V4 GUID使用后面的算法,   这是一个伪随机数。这些   在同一位置有一个“4”   例   {38a52be4-9352-453e-af97-5c3b448652f0}。   更具体地说,'data3'位   模式将是0001xxxxxxxxxxxx in   第一种情况,和0100xxxxxxxxxxxx   在第二。密码分析   WinAPI GUID生成器显示,   因为V4 GUID的序列是   给定初始状态的伪随机,   人们可以预测下一个25万   函数返回的GUID   UuidCreate 1这就是GUID的原因   不应该用于密码学,例如   g。,作为随机密钥。

答案 1 :(得分:10)

GUID保证是唯一的,就是它。不保证随机或难以猜测。

回答你的问题,至少对于V1 GUID生成算法,如果你知道算法,MAC地址和创建时间,你可能会生成一组GUID,其中一个GUID是实际生成的。如果它是V1 GUID,MAC地址可以从同一台机器的样本GUID中确定。

来自维基百科的其他消息:

  

OSF指定的算法   生成新的GUID已经广泛存在   批评。在这些(V1)GUID中,   用户的网卡MAC地址是   用作最后一组的基础   GUID数字,例如,   可以追溯文档   创建它的计算机。这个   定位时使用了隐私洞   梅利莎蠕虫的创造者。最   其他数字的基础是   生成GUID时的时间。

答案 2 :(得分:9)

.NET Web应用程序调用Guid.NewGuid()来创建一个GUID,这反过来最终会在堆栈深处调用CoCreateGuid() COM函数。

来自MSDN Library:

  

CoCreateGuid 函数调用   RPC函数 UuidCreate ,它创建   GUID,全局唯一的128位   整数。使用 CoCreateGuid 功能   当你需要一个绝对独特的   您将用作的号码   分布式的持久标识符   环境。非常高的   确定,这个函数返回一个   唯一值 - 没有其他调用   相同或任何其他系统   (网络与否),应该返回   相同的价值。

如果您查看UuidCreate上的页面:

  

UuidCreate 函数会生成一个   无法跟踪的 UUID   以太网/令牌环地址   生成它的计算机。它   也不能与其他人联系    UUID 是在同一台计算机上创建的。

最后一个句子是你问题的答案。所以我想说,除非微软的实施中存在错误,否则很难猜测。

答案 3 :(得分:6)

如果有人持续使用连续的GUID流来访问服务器,那么它将更多地是拒绝服务攻击。

有人猜测GUID的可能性接近于零。

答案 4 :(得分:0)

取决于。如果GUID设置合理,例如很难使用盐渍安全哈希,你有很多位。如果GUID很短且很明显,它就很弱。

您可能希望采取措施阻止某人创建10000个新会话,因为这可能会造成服务器负载。

答案 5 :(得分:0)

“GUID保证是唯一的,就是它”。 GUID不保证是独一无二的。至少CoCreateGuid生成的那些:“对于非常高的确定性,此函数返回一个唯一值 - 在同一个或任何其他系统上没有其他调用(联网与否),返回相同的值。“