UUID有多独特?

使用UUID唯一标识某些内容(我正在使用它来上传到服务器的文件)有多安全? 据我了解,它是基于随机数字。 但是,在我看来,如果有足够的时间,它最终会以纯粹的机会重复自我。 是否有更好的系统或某种类型的模式来缓解这个问题?


非常安全:

一个特定人被陨石击中的年度风险估计为170亿的一次机会,这意味着概率大约为0.00000000006(6×10-11),相当于创造几十万亿UUID的几率在一年内有一个副本。 换句话说,只有在接下来的100年内每秒产生10亿个UUID之后,创建一个副本的概率将大约为50%。

警告:

但是,这些概率仅在使用足够的熵生成UUID时才有效。 否则,重复的可能性可能会更高,因为统计分散可能更低。 在分布式应用程序需要唯一标识符的情况下,即使合并来自多个设备的数据,UUID也不会发生冲突,因此每个设备上使用的种子和生成器的随机性在应用程序的生命周期中必须可靠。 在不可行的情况下,RFC4122建议使用名称空间变体。

资料来源:http://en.wikipedia.org/wiki/UUID#Random_UUID_probability_of_duplicates

Wikepedia文章删除了此部分,但他们有一个有用的参考外部链接到其他地方:http://www.h2database.com/html/advanced.html#uuid


如果“给定足够的时间”意味着100年,而你以每秒10亿的速度创造它们,那么是的,100年后你有50%的机会发生碰撞。


UUID有多种类型,因此“安全性”取决于您使用的是哪种类型(UUID规范称为“版本”)。

  • 版本1是基于时间加上MAC地址UUID。 128位包含网卡MAC地址(由制造商唯一分配)的48位和分辨率为100纳秒的60位时钟。 该时钟在3603 AD中包装,因此这些UUID至少在此之前是安全的(除非您每秒需要超过1,000万个新UUID或有人克隆您的网卡)。 我说“至少”是因为时钟从1582年10月15日开始,所以在时钟周期结束后大约有400年,甚至有很小的重复可能性。

  • 版本4是随机数UUID。 有6个固定位,其余的UUID是122位的随机性。 请参阅维基百科或其他分析,描述极不可能出现重复的情况。

  • 版本3使用MD5,版本5使用SHA-1创建这些122位,而不是随机或伪随机数字生成器。 因此,就安全性而言,版本4是​​一个统计问题(只要您确定摘要算法处理的内容始终是唯一的)。

  • 版本2与版本1类似,但是具有更小的时钟,因此它将更快地回绕。 但是由于版本2的UUID是用于DCE的,所以你不应该使用这些。

  • 所以对于所有的实际问题他们都很安全。 如果你对把它放在概率上感到不舒服(例如你是担心地球在你的生命中被一个大型小行星毁坏的类型),只要确保你使用的是版本1的UUID,并保证它是唯一的(在你有生之年,除非你计划过过公元3603年)。

    那为什么不是每个人都简单地使用版本1 UUID? 这是因为版本1的UUID会显示它生成的机器的MAC地址,并且它们可以预测 - 这两件事可能会对使用这些UUID的应用程序产生安全隐患。

    链接地址: http://www.djcxy.com/p/16265.html

    上一篇: How unique is UUID?

    下一篇: Storing MySQL GUID/UUIDs