首先,您需要知道它们是否符合 RFC4122,并且您需要获取版本。
如果是 UUIDv1,你可以预测它们
UUIDv1 由:
- 时间戳(自公历纪元以来的 100 ns 间隔)
- A版(1)半字节
- RFC4122 合规性的两个(或三个,lol)位(这会导致半字节在 [89ab] 中)
- 时钟 id(随机位)
- 节点 ID(常量 6 字节掩码)
您只需要遍历可能的时间戳。当心,那里有很多 100 ns 的间隔!
一些软件正在生成 UUIDv1(Grafana 仪表板 ID、Airbnb 列表等),但一些软件依赖于随机 UUID、UUIDv4。
如果是 UUIDv4,你可能会窃取 PRNG 上下文
正如 Nikolay «denish» Denishchenko (Kaspersky) 不久前所展示的,如果对生成 UUID 的进程具有调试访问权限,则可以窃取当前的 RC4 上下文并在其他地方复制多达 500000 个 UUID。这已经在 Microsoft Windows XP 上得到了证明(嗨,Will Dean),它使用了一个有趣的 8*RC4 机制,并且每 500000 个 UUID 只用实际熵播种。
在 Windows 10 上(它不完全是 Windows 版本,而是 .NET 框架或 rpcrt4.dll 版本),它不再是 RC4 而是 AES,大概用于 CTR 模式。大概有相同的熵重用。
有关更多信息,请查看我在那里所做的工作https://uuid.pirate-server.com/blog/