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

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

但是,我计划创建一个库存安装镜像,并在每次向网络添加一个镜像时将其加载到新的树莓派上。据我了解,UUID生成部分基于系统时间,并且由于我将对所有它们使用相同的镜像,因此它们可能都具有相同的系统时间。 (有可能在获得任何形式的互联网时间之前将其引导。)

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

最佳答案

通常,有几种不同的方式来生成guid / uuid。根据UUID Wikipedia article,有5种不同的生成方式。

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

  • 除这些以外,某些CPU还具有一条指令,告诉CPU提供其序列号。许多OEM机器的BIOS中都有一个区域,其中包含机器的序列号。因此,任何这些都可以用作生成guid / uuid的源。由于您正在运行Linux,因此您可以编写自己的例程来生成它们。

    如果您打算使用机器特有的功能(例如网络MAC地址),我会将其与当前时间结合在一起并对其进行哈希处理几次,因为这可能会导致隐私漏洞。正是这个隐私漏洞使当局能够追踪梅利莎病毒的作者。

    此外,还有RFC4122也会对此进行详细说明。

    关于c++ - 是否可以在具有相同镜像的多个设备之间生成重复的UUID(GUID)?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29225067/

    10-08 21:48
    查看更多