是否存在滥用GUIDe的明显方法?

时间:2009-12-15 13:36:15

标签: language-agnostic guid

GUID通常用于唯一标识所有类型的实体 - 来自外部系统,文件等的请求。像魔术一样工作 - 你称之为“GiveMeGuid()”(Windows上的UuidCreate())功能 - 在你的服务中有一个全新的GUID。

鉴于我的代码在每次需要新的GUID时都会调用“GiveMeGuid()”函数,是否有任何不太明显的方法可以滥用它?

5 个答案:

答案 0 :(得分:4)

刚刚找到一个旧问题的答案:How deterministic Are .Net GUIDs?。重新报价:

  

这不是一个完整的答案,但我可以告诉你,第13个十六进制数字总是4,因为它表示用于生成GUID的算法的版本(id est,v4);另外,我引用维基百科:

     
    

WinAPI GUID生成器的密码分析显示,由于V4 GUID的序列是伪随机的,因此在给定初始状态的情况下,可以预测函数UuidCreate返回的下一个250 000 GUID。这就是GUID不应该用于加密的原因,例如,作为随机密钥。

  

所以,如果你幸运并得到同样的种子,你将按顺序打破250k镜像。引用另一个Wikipedia piece

  

虽然不保证每个生成的GUID都是唯一的,但是唯一密钥的总数(2 128 或3.4×10 38 )是如此之大,以至于两次生成的相同数字非常小。

底线:可能误用表格认为GUID 总是唯一。

答案 1 :(得分:2)

这取决于。 GUID生成的一些实现是时间相关的,因此快速连续调用CreateGuid可能会创建冲突的GUID。

编辑:我现在记住了这个问题。我曾经在使用一些PHP代码,其中GUID生成函数用每次调用的系统时间重新安装RNG。不要这样做。

答案 2 :(得分:1)

我可以看到滥用Guid的唯一方法是尝试以某种逻辑方式解释该值。并不是说它真的邀请你这样做,这是我真正喜欢的Guid的特色之一。

答案 3 :(得分:1)

也许可以通过首先使用一些用于生成GUID的参数(例如接口标识符)来操纵熵。

答案 4 :(得分:1)

某些GUID包含其生成的计算机的某些标识符,因此可以在客户端/服务器环境中使用,但有些则不能。请确保您的用户不要在多个客户端访问数据库时使用它们。