開發者工具 · 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 是對已經穩定的標準的澄清和現代化。