ASHWID是否能保证唯一标识一个设备?

9
我们希望在Windows 8 Metro应用程序中使用唯一设备标识符,建议使用ASHWID,文档在此处记录:

http://msdn.microsoft.com/en-us/library/windows/apps/jj553431.aspx

我很难想象这怎么可能保证唯一性。格式包括每个硬件组件的两个字节,其中最独特可识别的是MAC地址和硬盘序列号。但是,对于这些值,仅使用两个字节似乎不足够。
如果使用的字节不是最不重要的数字(即人类阅读的最右边),则生产线上相邻的两台相同笔记本电脑可能具有相同的ASHWIDs。 MAC和驱动器序列号可能相邻。
所以,我想我的问题的关键是,在您生产具有相同CPU类型和内存配置的设备之前,需要生产多少设备才能避免重复。看起来像生日悖论的问题,因此我找到了一个计算器并输入了数字 :)
每个MAC地址和一个带有两个字节标识符的硬盘,您大约有40亿种排列方式。一旦您分配了其中的6,000个,就有大约50/50的机会您已经有两个相同的。

请前往http://jeff.aaron.ca/cgi-bin/birthday并输入"6563"和"4294967296"进行实际计算。

所以这个似乎并不是非常独特。我对这个标识符非常怀疑,我是否错过了一些重要的东西?


我不相信ASHWID是为了独一无二而设计的。事实上,在您提供的文档页面中甚至没有出现“独一无二”的词语。 - Denis
“实现每个设备的逻辑”意味着可以通过ID识别单个设备,而不是少数设备。 - Chris Newman
4
根据微软提供的信息,ASHWID 的拟议用途似乎是用于检测已知用户硬件的更改。例如:Acmeflix想要向付费客户流视频。为了防止用户与所有朋友共享他们的凭证,Acmeflix允许每个账户链接最多5个设备。ASHWID将允许该场景正常工作。 - Denis
你应该把那作为一个答案。 - N_A
2个回答

4
不,ASHWID不能保证唯一地识别设备。在工作中,我曾经看到每天都有数十个碰撞,其中一个月是我们的容忍度。
此外,对于同一设备,ASHWID可能会经常更改--因为Windows 8通常会运行在可能添加了一个坞站、USB闪存驱动器或插入蓝牙适配器的笔记本电脑上。ASHWID的最佳用途是验证用户只将您的应用程序安装到有限数量的设备上,并通过解析ASHWID并有选择地将其与该用户之前看到的ASHWID进行比较来实现这一点。
至于唯一的硬件标识符,我建议使用包含多个组件的字符串的MD5摘要,其中ASHWID的某些组件可以发挥作用。
您可以随机生成一个大数字(64+位)并存储它(例如在注册表中)。当然,如果您想在哈希中包含其他内容,则用户的登录名/ID应该对该用户是唯一的。您还需要考虑如果用户克隆操作系统安装或更换硬盘后要做什么。
回到Windows桌面世界,我使用了MachineGuid注册表键和引导设备的序列号,但我正在努力获得在Windows Store应用程序中访问该信息的权限。如果您有访问权限,MachineGuid在HKLM\SOFTWARE\Microsoft\Cryptography中,MS保证它是唯一的。引导设备的序列号::GetVolumeInformationW(::SHGetFolderPathW(~),~)将是相当独特的,但仅有32位。

有没有一种方法可以提取特定组件的字节? - Apoorva
是的,您必须迭代ASHWID以查找组件。请注意,可能会有多个给定类型的组件。详细信息请参见MSDN:http://msdn.microsoft.com/en-us/library/windows/apps/jj553431.aspx - AndrewS

1

来自文章:

ASHWID通过表示多个独立的硬件特征,为应用程序/包和设备之间提供了强大的绑定。为了保护用户隐私,ASHWID因应用程序而异。除非底层硬件发生变化,否则来自同一应用程序的两个调用将导致相同的ASHWID。但是,如果设备的硬件配置文件发生更改,例如用户拔下USB蓝牙适配器,则ASHWID会更改。后端云服务可以验证ASHWID并将其与先前报告的值进行比较。尽管ASHWID会变化,但可以解析它以检测差异是否仅由于系统添加了内存等微小更改引起。差异容忍度取决于后端云服务的实现。

ASHWID由9个组件组成:

  1. 处理器的CPU ID
  2. 内存大小
  3. 磁盘设备的序列号
  4. 网络适配器(NIC MAC地址-第一个实例)
  5. 音频适配器
  6. 对接站
  7. 蓝牙地址
  8. 移动宽带设备ID
  9. BIOS

CPU ID 只对处理器型号唯一,但 NIC MAC 地址应该非常独特。话虽如此,MAC 地址可以被克隆,USB NIC 可以从设备移动到设备。因此,虽然我猜两个设备可能拥有相同的 ASHWID,但这是非常不可能的。在使用此 ID 时最具挑战性的是硬件可能会发生变化。服务决定允许 ASHWID 的哪些部分发生变化,哪些部分不发生变化(可接受的差异)。article本身提供了相关指导。


完整的MAC地址非常独特,但是 - 除非我误解了 - 只有两个字节用于表示它。因此,在ID的最独特组件中只有65,536种排列方式。在数亿台设备中使用这些MAC地址片段命中两个相同的CPU ID的可能性似乎很高。 - Chris Newman

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接