我们希望在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”进行实际计算。
所以这真的不是很独特。我是否对这个标识符持怀疑态度,或者我错过了一些非常重要的东西?
答案 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个组成部分组成:
CPU ID仅对处理器型号唯一,但NIC MAC地址应该非常独特。话虽如此,可以克隆MAC地址,并且可以将USB NIC从一个设备移动到另一个设备。所以,虽然我猜两个设备的可能具有相同的ASHWID,但非常不太可能。使用此ID最具挑战性的是硬件可以更改。由服务决定他们允许改变的ASHWID的哪些部分以及哪些部分不允许(可接受的方差)。 article本身就此提供了指导。