【发布时间】:2012-11-27 19:57:46
【问题描述】:
RFC 4122 相当详细地定义了UUIDs。当前定义了 5 个变体,全部为 128 位,但位的派生方式各不相同。
为什么要关心遵守特定的变体;一旦创建了 ID,使用 UUID 的人为什么需要知道它是如何构造的?
特别是,如果我要使用变体 4(完全随机),遵循 RFC 将随机位从 128 减少到 122(变体 4b 位,保留 2 位)似乎是一种浪费。我不遵循 RFC 并使用所有 128 位随机性不是更好吗?
【问题讨论】:
-
如果您不遵守规则,那么您的 ID 可能会与其他算法之一生成的 ID 发生冲突。
-
这与必须处理 2 个变体 4 ID 来源相比有什么不同吗? IE。同一变体产生的碰撞几率不大于2。
-
由于某些算法(例如 v1)是确定性的,如果您的算法在版本字段中意外生成带有“1”的 GUID,攻击者可以强制 GUID 冲突:他们将 MAC 地址设置为与最后一个匹配您的 GUID 的一部分并等待时间与开始部分匹配。然后他们点击提交并繁荣,GUID 冲突,数据库爆炸,资金被转移到开曼群岛。每种算法都旨在避免与自身发生冲突,但它无法防止与其他算法发生冲突。只要遵守规则。不要试图对那些额外的 6 位偷偷摸摸。
-
有道理,谢谢。您想将此作为答案发布吗?
标签: database standards guid uuid