当前位置:  开发笔记 > 运维 > 正文

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

如何解决《您可以轻松猜出可能生成的GUID吗?》经验,为你挑选了4个好方法。

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



1> Uri..:

以下是维基百科的一些内容(原始来源):

包含MAC地址和时间的V1 GUID可以通过第三组数字的第一个位置中的数字"1"来标识,例如{2f1e4fc0-81fd-11da-9156-00036a0f876a}.

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

V4 GUID使用后来的算法,这是一个伪随机数.它们在相同位置具有"4",例如{38a52be4-9352-453e-af97-5c3b448652f0}.更具体地说,'data3'位模式在第一种情况下是0001xxxxxxxxxxxx,在第二种情况下是0100xxxxxxxxxxxx.WinAPI GUID生成器的密码分析表明,由于V4 GUID的序列是伪随机的,因此在给定初始状态的情况下,可以预测由函数 UuidCreate 1 返回的下一个250 000 GUID.这就是GUID不应该用于密码学的原因,例如,作为随机密钥.


真正有趣的是有一个函数f(n),给定一个guid n返回winapi接下来将生成的guid y.我相当肯定时间被用作随机种子的一部分(这可以通过VM验证)我不相信维基百科上的这些信息是正确的
好消息.但是,如何获得"初始状态"?

2> Tamas Czineg..:

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

从MSDN库:

CoCreateGuid函数调用RPC功能UuidCreate,它创建了一个GUID,全局唯一的128位的整数.当您需要一个绝对唯一的数字时,请使用CoCreateGuid函数,您将在分布式环境中将其用作持久性标识符.为了非常高的确定性,此函数在相同或任何其他系统上返回唯一值 - 无需其他调用(联网与否),应返回相同的值.

如果你查看UuidCreate上的页面:

所述UuidCreate函数生成一个 UUID无法追踪到在其上生成的计算机的以太网/令牌环地址.它也不能与在同一台计算机上创建的其他UUID相关联 .

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


这只表明调用CoCreateGuid函数不太可能两次返回相同的值.它没有说明构建自己的算法,根据以前的算法生成可能的GUID.
UUID主要基于服务器时钟,很容易猜到.不要**使用它作为安全密钥.有关更多详细信息,请参阅[RFC 4122](http://www.ietf.org/rfc/rfc4122.txt).

3> Davy8..:

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

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

来自维基百科的额外花絮:

用于生成新GUID的OSF指定算法受到广泛批评.在这些(V1)GUID中,用户的网卡MAC地址用作最后一组GUID数字的基础,这意味着,例如,可以将文档追溯回创建它的计算机.在找到Melissa蠕虫的创建者时使用了这个隐私漏洞.大多数其他数字基于生成GUID时的时间.



4> hmcclungiii..:

如果有人持续使用连续的GUID流来访问服务器,那么它将更多地是拒绝服务攻击而不是其他任何东西.

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

推荐阅读
手机用户2402851155
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有