开发者工具 · UUID 生成器
RFC 4122 与 RFC 9562:2024 UUID 标准中的更改
· 背景
uuid 密码学 浏览器 API
UUID 引用了两个 RFC,但它们并没有说完全相同的内容。本文介绍了 RFC 9562 相对于 RFC 4122 添加、澄清和弃用的内容。
我引用哪个 RFC? ——文档和库引用不同标准时的混乱
UUID 文档中经常引用两个 RFC,但它们所表述的内容并不相同。 RFC 4122(在 2005 中发布)定义了 UUID 及其五个版本(v1 到 v5)。在 2024 中发布的 RFC 9562 完全废弃了 RFC 4122,澄清了从业者解决的歧义,添加了三个新版本(v6、v7、v8),并更新了有关实现随机性的指南。当某个库引用 RFC 4122 时,这并没有错 - 该库可能在 RFC 9562 发布之前就已发布,或者维护者可能没有更新文档。检查 RFC 引用会告诉您库上次重大更新的时间。在编写新规范或评估实现时,RFC 9562 是规范性参考。
废弃,而不是替换格式 — RFC 4122 下有效的所有内容仍然有效;布局和变体位未更改
RFC 9562 正式废弃 RFC 4122 作为当前参考文档,同时保留熟悉的 128 位表示、十六进制组、版本位置和主要变体布局。现有存储的 UUID 字符串不需要仅仅因为存在较新的 RFC 而重新发布。实际的迁移在于文档、生成器和验证策略:引用当前标准,了解添加的版本,并检查旧代码是否依赖于修订版澄清的模糊性。兼容性仍应在系统边界进行测试,特别是在库序列化 Microsoft GUID 结构或强制执行比标准描述更窄的版本集的情况下。
三个新版本 — v6(重新排序时间)、v7(Unix 纪元时间排序)和 v8(实现定义)
RFC 9562 向标准添加了三个新版本。版本 6 对 v1 时间戳位重新排序,以生成可按字典顺序排序的标识符,从而获得更好的数据库性能。版本 7 使用 48 位 Unix 毫秒时间戳,后跟随机位,提供按时间排序的生成,而无需考虑 v1 的隐私问题。版本 8 是实现定义的布局的逃生口。这些版本都不会改变 v1-v5 的工作方式或含义。来自 2005 的 v1 UUID 和来自 2024 的 v7 UUID 可以共存于同一个数据库中,每个版本都具有标识其生成方法的版本位。这三个新版本解决了实践中出现的常见模式。
Max UUID 连接 Nil — 与全零 1 一起定义的全 F 值
RFC 4122 将 Nil UUID (全零位)记录为示例和文档中的特殊参考值。 RFC 9562 包含相同的 Nil 定义,但正式定义了范围边界的 Max UUID (所有位设置为 1)。 Nil 和 Max 都不是版本 4 随机 UUID 因为它们没有正确的版本和变体位。 Max UUID 在数据库查询中用作上限范围边界非常有用:WHERE uuid_column <= MAX_UUID 匹配所有可能的 UUID。 Nil 可用作可空 UUID 列中未分配的哨兵。 RFC 9562 记录了两者,但未强制要求在应用程序数据中使用它们。
澄清指导 — 明确建议对随机字段使用 CSPRNG、在一毫秒内的单调计数器以及针对数据库局部性首选时间排序版本
RFC 9562 的最佳实践指南区分了抗碰撞性和不可猜测性。随机字段应使用适合应用程序威胁模型的源,并针对 CSPRNG 调用安全敏感的不透明性。当多个标识符共享一个时间戳记时,基于时间的生成器存在单独的单调性问题;该标准将计数器和附加时间戳精度描述为可能的方法,每种方法都有状态和翻转规则。基于名称的版本仍然是确定性标识符,而不是真实性证明。这些说明很重要,因为一个 UUID 解析器可以接受所有布局,即使它们的生成要求和信息公开属性不同。
ULID 想法的体现 — 社区形式如何影响 v7 的设计
RFC 9562 表示其作者在开发新布局时分析了几种现有的可排序标识符方案,包括 ULID、Snowflake 和 KSUID。这支持了一个温和的结论:对按时间排序的分布式标识符的操作需求通知了修订。它并不能证明一种社区格式向版本 7 捐赠了精确的字段布局。对于架构工作来说,实际的相似性已经足够了:这些系列将时间信息放在前面,这样普通的排序就可以保留广泛的创建顺序,然后在编码、协调和内部行为上有所不同。通过生态系统兼容性和书面保证而不是直接血统的声明来选择它们。
这不包括什么——逐行差异;这篇文章关注的是实施者的实际后果
这篇综合文章遵循 RFC 9562 对于实施者和用户的实际后果和实施,而不是与 RFC 4122 的逐行差异。完整的规范可从标准机构获得,对于在语言或平台中实现 UUID 处理值得阅读 - 文本提供了超出概述所能涵盖的权威细节。这篇文章没有描述 v6 如何重新排序 v1 字节或 v7 如何编码 Unix 毫秒的位级机制。标准和实施指南仍然是有关位布局、编码或合规性验证的任何实施问题的主要权威参考。
要点:更新您的引文和默认值 - ToolAcre 生成器遵循两个 RFC 共享的 CSPRNG 指南
对于任何新工作,请更新文档和规范以引用 RFC 9562。 RFC 4122 中的每个 UUID 在 RFC 9562 下仍然有效 — 迁移本质上纯粹是前瞻性和管理性的。关于加密随机性的明确指南强调标识符必须来自生产系统中加密安全的来源。 ToolAcre 遵循两个 RFC 的加密随机性指南,仅使用浏览器的 Web Crypto API。当您在日志、数据库导出或 API 响应中遇到 UUID 时,ToolAcre 格式正确的检查会根据 RFC 9562 报告其版本和变体。 RFC 9562 是对已经稳定的标准的澄清和现代化。