是否可以在具有相同图像的多个设备上生成重复的 UUID(GUID)?

Can duplicate UUID's (GUID's) be generated across multiple devices with the same image?

我正在为我正在进行的项目使用多个 Raspberry Pis 运行 raspian(Debian)。我希望每个 Raspberry Pi 都有一个唯一的 ID,这样我就可以在网络上区分它们。

我认为 g++ 库 可能是实现此目的的最佳方式,其中 Pi 将在首次启动时通过守护程序生成并存储 UUID。

但是,我计划创建一个库存安装映像,并在每次向网络添加一个时将其加载到新的 raspberry Pi 上。据我所知,UUID 的生成部分基于系统时间,因为我将对它们使用相同的图像,它们可能都具有相同的系统时间。 (它们有可能在获得任何类型的互联网时间之前就已启动。)

这对 UUID 生成的唯一性有多大影响?

一般来说,有几种不同的方法可以生成 guid/uuid。根据 UUID Wikipedia article,有 5 种不同的生成方法。

  1. 网络MAC地址和时间。
  2. 与#1 相同,但还包括用户数字用户 ID 或组 ID。
  3. 这个使用某个名称 URL 或对象的 MD5 散列。但是,由于对同一事物进行散列会得到相同的散列,因此添加了时间元素以使 guid/uuid 唯一。
  4. 我个人的最爱。 guid/uuid 是使用伪随机数发生器 (PNRG) 或真正的随机源随机生成的,例如放射性同位素的衰变、白噪声、从 PN 结放大的噪声等。
  5. 与 #3 相同,但改为使用 SHA-1 哈希函数。

除此之外,一些 CPU 有一条指令告诉 CPU 提供其序列号。许多 OEM 机器在 BIOS 中有一个区域,其中包含机器的序列号。所以这些中的任何一个都可以用作生成 guid/uuid 的来源。既然你是运行Linux,你可以自己写例程来生成这些。

如果您打算使用机器独有的东西(例如网络 MAC 地址),我会将其与当前时间结合起来并对其进行哈希处理几次,因为这可能会导致隐私漏洞。正是这个隐私漏洞让当局得以追查 Melissa 病毒的作者。

此外,RFC4122 也详细说明了这一点。