Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/google-chrome/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Guid UUID有多独特?_Guid_Uniqueidentifier_Uuid - Fatal编程技术网

Guid UUID有多独特?

Guid UUID有多独特?,guid,uniqueidentifier,uuid,Guid,Uniqueidentifier,Uuid,使用UUID唯一地标识某些东西(我将其用于上传到服务器的文件)有多安全?据我所知,它是基于随机数。然而,在我看来,如果有足够的时间,它最终会自己重复,纯粹是出于偶然。是否有更好的系统或某种类型的模式来缓解此问题?非常安全: 一个人每年被陨石击中的风险是 估计是170亿分之一的机会,这意味着 概率约为0.00000000006(6×10−11) ,相当于赔率 在一年内创建几十万亿个UUID并拥有一个 复制换句话说,只有在每年生成10亿个UUID之后 其次,在接下来的100年里,只创造一个 复制率大

使用UUID唯一地标识某些东西(我将其用于上传到服务器的文件)有多安全?据我所知,它是基于随机数。然而,在我看来,如果有足够的时间,它最终会自己重复,纯粹是出于偶然。是否有更好的系统或某种类型的模式来缓解此问题?

非常安全:

一个人每年被陨石击中的风险是 估计是170亿分之一的机会,这意味着 概率约为0.00000000006(6×10−11) ,相当于赔率 在一年内创建几十万亿个UUID并拥有一个 复制换句话说,只有在每年生成10亿个UUID之后 其次,在接下来的100年里,只创造一个 复制率大约为50%

警告:

然而,这些概率仅在生成UUID时成立 使用足够的熵。否则,重复的概率 可能更高,因为统计离散度可能 再低一点。其中分布式数据库需要唯一标识符 应用程序,这样即使来自多个应用程序的数据 设备被合并,种子和生成器的随机性被用于 每个设备在使用寿命内都必须可靠。哪里 这是不可行的,RFC4122建议使用名称空间变量 相反

来源:维基百科关于通用唯一标识符的文章(链接导致从2016年12月开始修订,然后编辑该部分)

另请参阅同一通用唯一标识符文章中关于同一主题的当前部分,。

引用自:

因此,任何人都可以创建UUID并使用 它是用来识别某物的 有理由相信 标识符永远不会被删除 被任何人无意中用于 还有别的吗


它接着非常详细地解释了它实际上有多安全。所以要回答你的问题:是的,它足够安全。

如果“给足够的时间”是指100年,并且你以每秒十亿的速度创建它们,那么是的,100年后发生碰撞的几率是50%。

UUID方案通常不仅使用伪随机元素,而且使用当前的系统时间,以及某种通常唯一的硬件ID(如果可用),例如网络MAC地址


使用UUID的全部意义在于,您相信它能够比您自己更好地提供唯一的ID。这与使用第三方加密库而不是使用自己的加密库的原理相同。自己做可能会更有趣,但这样做通常不太负责任。

已经做了很多年了。永远不要遇到问题

我通常将数据库设置为一个包含所有键和修改日期等的表。从未遇到过重复密钥的问题


它唯一的缺点是,当您编写一些查询以快速查找某些信息时,您需要大量复制和粘贴密钥。您不再有简单易记的ID。

我不知道这对您是否重要,但请记住。

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

  • 版本1是基于时间的加MAC地址UUID。128位包含网卡MAC地址的48位(由制造商唯一分配)和分辨率为100纳秒的60位时钟。这样这些uuid至少在那之前是安全的(除非你每秒需要超过1000万个新uuid或者有人克隆你的网卡)。我说“至少”是因为时钟开始于1582年10月15日,所以在时钟结束后的400年里,即使是很小的复制可能性都没有

  • 版本4是随机数UUID。有六个固定比特,UUID的其余部分是122个随机比特。请参阅或其他分析,说明复制的可能性有多大

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

  • 版本2与版本1相似,但时钟更小,所以它将更快地完成工作。但是,由于版本2 UUID是用于DCE的,所以不应该使用这些UUID

因此,对于所有实际问题,它们都是安全的。如果你不愿意让它取决于概率(例如,你是那种担心地球在你有生之年会被一颗大型小行星摧毁的人),只需确保你使用版本1 UUID,并且它保证是唯一的(在你有生之年,除非你计划活到公元3603年以后)


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

这一问题的答案可能在很大程度上取决于UUID版本

许多UUID生成器使用版本4随机数。然而,其中许多使用伪随机数生成器来生成它们

如果使用一个小周期的不良种子PRNG来生成UUID,我会说它根本不太安全。一些随机数生成器的方差也很小。i、 e.比其他人更倾向于某些数字。这行不通

因此,它的安全性取决于用于生成它的算法

另一方面,如果您知道这些问题的答案,那么我认为使用版本4 uuid应该是非常安全的。事实上,我用它来识别网络块文件上的块