Appendix B. 说明性示例
Appendix B. 说明性示例
以下各节包含说明性示例, 用于展示如何将 UUIDv8 (Section 5.8) 用于自定义和/或实验性的应用逻辑. 下面的示例并未经历本文档中其他算法所经历的同等严格测试, 原型设计和反馈循环. 作者鼓励实现者创建自己的 UUIDv8 算法, 而不是使用本节定义的项目.
B.1. UUIDv8 值示例 (基于时间)
此 UUIDv8 示例测试向量使用一个众所周知的 64-bit Unix Epoch 时间戳, 精度为 10 ns, 并将其截断为最低有效的最右侧 bit, 以填充 custom_a 和 custom_b 的前 60 bit, 同时将这两个段之间的 version bit 设为版本值 8.
设置 variant bit; 最后一个段 custom_c 使用随机数据填充.
时间戳为 Tuesday, February 22, 2022 2:22:22.000000 PM GMT-05:00, 表示为 0x2489E9AD2EE2E00 或 164555774200000000 (10 ns-steps).
-------------------------------------------
field bits value
-------------------------------------------
custom_a 48 0x2489E9AD2EE2
ver 4 0x8
custom_b 12 0xE00
var 2 0b10
custom_c 62 0b00, 0xEC932D5F69181C0
-------------------------------------------
total 128
-------------------------------------------
final: 2489E9AD-2EE2-8E00-8EC9-32D5F69181C0
Figure 27: UUIDv8 示例基于时间的说明性示例
B.2. UUIDv8 值示例 (基于名称)
按 Section 5.5, 想要使用现代哈希算法的基于名称 UUID MUST 在 UUIDv8 空间内创建. 这些 UUID MAY 利用较新的哈希算法, 例如 SHA-256 或 SHA-512 (由 [FIPS180-4] 定义), SHA-3 或 SHAKE (由 [FIPS202] 定义), 甚至可利用尚未定义的算法.
Figure 28 以说明性示例的形式详细展示了 Appendix A.4 中 SHA-1 计算的 SHA-256 版本, 说明如何实现这一点. 本节中基于名称 UUIDv8 值的创建遵循 Section 5.5 中定义的相同逻辑, 差异在于使用 SHA-256 代替 SHA-1.
字段映射和所有值如 Figure 29 所示. 最后, 为进一步说明 version 和 variant 的 bit 替换以及 SHA-256 值中未使用/丢弃的部分, 见 Figure 30. 对于产生任意大小输出的安全哈希算法 (例如 SHAKE 中的算法), 一个重要注意事项是输出哈希 MUST 为 128 bit 或更大.
Namespace (DNS): 6ba7b810-9dad-11d1-80b4-00c04fd430c8
Name: www.example.com
----------------------------------------------------------------
SHA-256:
5c146b143c524afd938a375d0df1fbf6fe12a66b645f72f6158759387e51f3c8
Figure 28: UUIDv8 示例 SHA256
-------------------------------------------
field bits value
-------------------------------------------
custom_a 48 0x5c146b143c52
ver 4 0x8
custom_b 12 0xafd
var 2 0b10
custom_c 62 0b00, 0x38a375d0df1fbf6
-------------------------------------------
total 128
-------------------------------------------
final: 5c146b14-3c52-8afd-938a-375d0df1fbf6
Figure 29: UUIDv8 示例基于名称的 SHA-256 说明性示例
A: 5c146b14-3c52-4afd-938a-375d0df1fbf6-fe12a66b645f72f6158759387e51f3c8
B: xxxxxxxx-xxxx-Mxxx-Nxxx-xxxxxxxxxxxx
C: 5c146b14-3c52-8afd-938a-375d0df1fbf6
D: -fe12a66b645f72f6158759387e51f3c8
Figure 30: UUIDv8 示例 Ver/Var bit 替换和丢弃的 SHA-256 片段
查看 Figure 30:
-
Line A 详细展示了完整 SHA-256, 以插入短横线后的十六进制值表示.
-
Line B 详细展示了必须覆盖的 version 和 variant 十六进制位置.
-
Line C 详细展示了覆盖 ver 和 var 之后的最终值.
-
Line D 详细展示了原始 SHA-256 计算中被丢弃的剩余值.