ASHWID是否可以保证唯一标识设备?

时间:2012-09-21 16:42:55

标签: windows-8 microsoft-metro uniqueidentifier

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

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

我很难看到如何保证它的独特性。格式包括每个硬件组件两个字节,其中唯一可识别的是MAC地址和硬盘序列号。但这些值只有两个字节似乎不够。

如果使用的字节数不是最低有效数字(最右边,人类读取它们),那么生产线上相邻的两台相同的笔记本电脑可能具有相同的ASHWID。 MAC和驱动器序列可能是相邻的。

所以,我想我的问题的关键在于,在您可能重复之前,必须使用相同的CPU类型和内存配置生成多少设备。看起来像Birthday Paradox那样的问题,所以我找到了一个计算器并插入了数字:)

使用一个MAC地址和一个每个具有两个字节标识符的硬盘,您有大约40亿个排列。一旦你只分配了6,000个,那么大约有50/50,你有两个相同。

(转到http://jeff.aaron.ca/cgi-bin/birthday并插入“6563”和“4294967296”进行实际计算。

所以这真的不是很独特。我是否对这个标识符持怀疑态度,或者我错过了一些非常重要的东西?

2 个答案:

答案 0 :(得分:4)

不,ASHWID无法保证唯一标识设备。在工作中,我已经看到了几十次每日碰撞,其中一个月是我们的容忍度。

此外,ASHWID可能经常更改为同一设备 - 因为Windows 8通常会在可能添加扩展坞,USB拇指驱动器或插入式蓝牙适配器的笔记本电脑上运行。 ASHWID的最佳用途是验证用户是否仅将您的应用安装到有限数量的设备,并通过解析ASHWID并有选择地将其与该用户之前看到的ASHWID进行比较来实现。

对于唯一的硬件标识符,我建议包含多个组件的字符串的MD5摘要,其中ASHWID的某些组件可以起作用。

您可以随机生成一个大数(64+位)并存储(例如在注册表中)。当然,如果您希望其他内容包含在哈希中,则用户的登录名/ ID对于该用户应该是唯一的。如果用户克隆操作系统安装,或者在驱动器发生故障后替换HD,您还需要考虑要执行的操作。

回到Windows桌面世界,我使用了MachineGuid注册表项和启动设备的序列号,但我正努力在Windows应用商店应用中访问该信息。如果您有权限,则MachineGuid位于HKLM\SOFTWARE\Microsoft\Cryptography,MS保证是唯一的。引导设备::GetVolumeInformationW(::SHGetFolderPathW(~),~)的序列号将相当独特,但只有32位。

答案 1 :(得分:0)

来自文章:

  

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

ASHWID由9个组成部分组成:

  1. 处理器的CPU ID
  2. 内存大小
  3. 磁盘设备的序列号
  4. 网络适配器(NIC MAC地址 - 第一个实例)
  5. 音频适配器
  6. 停靠站
  7. 蓝牙地址
  8. 移动宽带设备ID
  9. BIOS
  10. CPU ID仅对处理器型号唯一,但NIC MAC地址应该非常独特。话虽如此,可以克隆MAC地址,并且可以将USB NIC从一个设备移动到另一个设备。所以,虽然我猜两个设备的可能具有相同的ASHWID,但非常不太可能。使用此ID最具挑战性的是硬件可以更改。由服务决定他们允许改变的ASHWID的哪些部分以及哪些部分不允许(可接受的方差)。 article本身就此提供了指导。