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

时间:2015-03-24 04:31:45

标签: c++ linux guid uuid

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

我认为g ++库< uuid / uuid.h>可能是实现此目的的最佳方式,Pi将在第一次启动时通过守护程序生成并存储UUID。

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

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

1 个答案:

答案 0 :(得分:1)

通常,有几种不同的方法来生成guid / uuid。根据{{​​3}},有5种不同的方法来生成它们。

  1. 网络MAC地址和时间。
  2. 与#1相同,但也包括用户数字用户ID或组ID。
  3. 这个使用某个名称,URL或对象的MD5哈希。但是,由于散列相同的东西会产生相同的散列,因此添加了一个时间元素以使guid / uuid唯一。
  4. 我个人的最爱。使用伪随机数发生器(PNRG)或真正的随机源(如放射性同位素的衰变,白噪声,从PN结放大的噪声等)随机生成guid / uuid。
  5. 在#3处相同,但使用SHA-1哈希函数。
  6. 除此之外,某些CPU还有一条指令告诉CPU提供其序列号。许多OEM机器在BIOS中有一个区域,其中包含机器的序列号。因此,任何这些都可以用作生成guid / uuid的源。由于您运行的是Linux,因此您可以编写自己的例程来生成这些例程。

    如果您计划使用机器特有的东西(例如网络MAC地址),我会将其与当前时间相结合并将其哈希几次,因为这会导致隐私漏洞。正是这个隐私漏洞让当局找到了Melissa病毒的作者。

    此外,还有UUID Wikipedia article详细说明了这一点。