我的公司从供应商那里购买了定制主板。最近,我们要求他们将 UUID 放入我们的 SMBIOS 中。他们帮我们做到了。据他们说,他们使用一个程序来生成 UUID 版本 5(SHA-1 哈希)。详情:http://en.wikipedia.org/wiki/Universally_unique_identifier
当我们收到主板并检查 SMBIOS 数据时,我们确实看到了一长串随机字符。但是,我们如何验证这些字符串是否唯一?当我们问他们是否有一个范围或工具可以让我们检查主板(每隔几个月检查一次以确保生成正确的 UUID)时,他们告诉我们他们没有任何工具供我们检查。因此,目前我们的 QC 标准是“只要 SMBIOS 中的 UUID 字段中有字符串,我们就会让主板通过”。但是,我认为我们无法防止以下情况:- 有人使用错误的程序生成错误的 UUId 字符串 - 有人执行了错误的步骤并拥有一批具有相同字符串(不唯一)的主板。
我们还对该主板上的 MAC 地址进行了质量检查。对于 MAC 地址,至少有一个分配的范围。因此,我们至少可以检查该范围。但对于 UUID,没有范围。
我还检查了戴尔的电脑。我发现两种不同的戴尔型号的 UUID 在前几个(大约 6-8 个)字符上的内容相同。
如果可能的话,请告诉我我应该如何要求主板工程师为我们提供每隔几个月检查一次字符串的工具。
我相信他们可以编写一个函数来检查,就像系统如何验证存储在数据库列中的加密(带盐)密码一样。
太感谢了!
答案1
随机的 128 位 UUID 几乎保证是唯一的,即使你在整个宇宙长度上每秒生成数千亿个 UUID,找到碰撞的机会也比连续两天中彩票的几率还要大。
Dell 之所以有前缀是因为他们很可能使用连续的 UUID,也许您应该要求这些 UUID,并跟踪最后看到的 UUID,然后您可以通过简单地检查当前的 UUID 是否大于任何以前看到的 UUID 来确保它们有效。
答案2
除了“独特”之外,没有其他“正确”的标准吗?
自己动手。收到主板后,请对照之前收到的所有系统检查每个 UUID。
答案3
您无法随意检查它们是否“正确”。归根结底,UUID 实际上只是一个随机生成的字符串。没有真正的方法可以验证它是否足够随机,或者它之前是否被发布过(除非您有一个包含迄今为止生成的所有 UUID 的数据库)。
Linux用户名工具有两种生成 UUID 的方法。如果他们使用类似的方法,并且使用基于随机的 UUID,那么您将看到到处都是值。如果他们基于生成机器的 MAC 地址,您可能能够检查前缀是否没有改变(但即使它确实发生了变化,也可能只是意味着他们更换了生成它们的机器)。
答案4
实际上,验证特定主板的 UUID 是否唯一的唯一方法是保存已查看过的 UUID 的数据库。对照列表测试新的 UUID,如果尚未查看,请将其添加到列表中。