首页 > 系统相关 >设备唯一标识方法(Unique Identifier):如何在Windows系统上获取设备的唯一标识

设备唯一标识方法(Unique Identifier):如何在Windows系统上获取设备的唯一标识

时间:2023-07-20 09:01:37浏览次数:39  
标签:UUID Windows 唯一 标识 Identifier ID 设备

  唯一的标识一个设备是一个基本功能,可以拥有很多应用场景,比如软件授权(如何保证你的软件在授权后才能在特定机器上使用)、软件License,设备标识,设备身份识别等。下面列举一下各种方法的优劣:

(1)网卡MAC地址

         MAC地址可能是最常用的标识方法,但是现在这种方法基本不可靠:一个电脑可能存在多个网卡,多个MAC地址,如典型的笔记本可能存在有线、无线、蓝牙等多个MAC地址,随着不同连接方式的改变,每次MAC地址也会改变。而且,当安装有虚拟机时,MAC地址会更多。MAC地址另外一个更加致命的弱点是,MAC地址很容易手动更改。因此,MAC地址基本不推荐用作设备唯一ID。

(2)CPU ID

         在Windows系统中通过命令行运行“wmic cpu get processorid”就可以查看CPU ID。

         目前CPU ID也无法唯一标识设备,Intel现在可能同一批次的CPU ID都一样,不再提供唯一的ID。而且经过实际测试,新购买的同一批次PC的CPU ID很可能一样。这样作为设备的唯一标识就会存在问题。

(3)硬盘序列号

         在Windows系统中通过命令行运行“wmic diskdrive get serialnumber”可以查看。

         硬盘序列号作为设备唯一ID存在的问题是,很多机器可能存在多块硬盘,特别是服务器,而且机器更换硬盘是很可能发生的事情,更换硬盘后设备ID也必须随之改变,不然也会影响授权等应用。因此,很多授权软件没有考虑使用硬盘序列号。而且,不一定所有的电脑都能获取到硬盘序列号。

(4)自定义算法生成唯一ID

         可以使用自制的一个特定算法(如GUID、或者一定位数的随机数)生成唯一的ID,然后写入到注册表或者设备上,作为其唯一ID。

         这种方法不依赖任何硬件特征,唯一性也可以自己完全控制,不过纯软件的实现缺点是这个ID很容易伪造,也很容易擦除;而且很可能还需要在线验证,后台存储所有ID的服务器必须保持在线。

(5)Windows的产品ID(ProductId

         在“控制面板\系统和安全\系统”的最下面就可以看到激活的Windows产品ID信息,另外通过注册表“HKEY_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion”也可以看到看到“ProductId”字段。

         不过这个产品ID并不唯一,不同系统或者机器重复的概率也比较大。虚拟机中克隆的系统,使用同一个镜像安装激活的系统,其产品ID就可能一模一样。经过实测,笔者在两台Thinkpad笔记本上发现其ProductId完全一样。

(6)MachineGUID

         Windows安装时会唯一生成一个GUID,可以在注册表“HKEY_MACHINE\SOFTWARE\Microsoft\Cryptography”中查看其“MachineGuid”字段。

         这个ID作为Windows系统设备的唯一标识不错,不过值得注意的一点是,与硬件ID不一样,这个ID在重装Windows系统后应该不一样了。这样授权软件在重装系统后,可能就需要用户重新购买授权。

(7)主板smBIOS UUID

         在Windows系统中通过命令行运行“wmic csproduct get UUID”可以查看。

         主板UUID是很多授权方法和微软官方都比较推崇的方法,即便重装系统UUID应该也不会变(笔者没有实测重装,不过在一台机器上安装双系统,获取的主板UUID是一样的,双系统一个windows一个Linux,Linux下用“dmidecode -s system-uuid”命令可以获取UUID)。

         但是这个方法也有缺陷,因为不是所有的厂商都提供一个UUID,当这种情况发生时,wmic会返回“FFFFFFFF-FFFF-FFFF-FFFF-FFFFFFFFFFFF”,即一个无效的UUID。

(8)外置密码设备提供唯一ID

         这种方法很多,比如U盾里面可以提供唯一的密钥标识,可信计算密码芯片里面的背书密钥EK等都是唯一固定在安全硬件里面的,而且通过良好的密码算法生成,唯一性和差异性都可以保证,安全性也更高。

         这种方法需要在计算设备连接外置密码芯片,增加经济负担和开发成本。而且,即便这种方法也存在欺骗攻击和代理攻击等破解方法。

 

         当然还有很多其它方法,如可以获取声卡、CPU模式和频率、IDE控制器、内存等其他信息。甚至,可以收集设备的软硬件配置,通过统计方法和机器学习方法进行分类识别设备。学术上,还有各种密码算法,硬件不可克隆函数PUF等唯一标识的方法可以使用。

         从软件授权这个简单的应用来看,购买外置密码设备硬件太过昂贵,可以采用简单的组合方法,推荐使用主板UUID作为主标识,当UUID返回无效的值时,可以进一步采用CPU ID、BIOS序列号、MachineGUID等方式作为次标识,这基本可以解决问题。

         其实设备唯一标识其实也是指纹的一种,想要使用标识或者指纹时,首先必须明确自己的真实意图,是要标识一个用户(这样可以使用身份证、指纹、手机验证等方式),还是要标识一个设备(本文列举的各种设备ID)。根据自己的真实意图才能进一步思考具体使用的方式,不忘初衷。

       不过,不管使用怎样的硬件信息或者牛气的算法来进行用户或者设备的标识,还是一句老话“道高一尺,魔高一丈”,都是可以被攻破的,即便你的标识伪造不了、克隆不了,攻击者也可以使用其它攻击方式,如逆向你的验证check代码,然后将其修改掉,使其check失灵。因此,无论设备标识或者用户标识,很多情况下可能只防君子、不防小人,甚至悲观者认为这些手段都是防止合法用户的,影响用户使用的方便性,大可以取消掉。笔者认为,没有必要这么悲观,知识产权等信息是尊敬人的价值和劳动的表现,即便不能完全防止小人,我们也要通过这些方法将一般的小人排除在技术门槛之外,并尽量增加高级小人破解时的代价。

标签:UUID,Windows,唯一,标识,Identifier,ID,设备
From: https://www.cnblogs.com/yu-song/p/17567319.html

相关文章

  • Windows下将“使用VSCode打开”添加至右键菜单“
    Windows下将“使用VSCode打开”添加至右键菜单"本文转载自 Windows下将“使用VSCode打开”添加至右键菜单",特此记录收藏一下。问题:Windows上面安装VisualStudioCode编辑器后,常常会因为安装的时候忘记勾选等原因,没有将OpenwithCode(右键快捷方式)"添加到鼠标右键菜单里,所......
  • [记]Rust使用windows库开发串口功能
    在Rust中,可以使用windows库来操作串口。以下是一个使用windows库实现串口功能的示例代码:首先,在你的Cargo.toml文件中添加以下依赖项:[dependencies]windows="0.36.0"然后,可以按照以下代码示例使用windows库进行串口操作:usestd::io::{self,Read,Write};usewindows::Dev......
  • VMware Workstation 18 Tech Preview - 增强的 Windows 11 虚拟机安全性
    VMwareWorkstation18TechPreview-增强的Windows11虚拟机安全性VMwareWorkstationTechPreview2023请访问原文链接:https://sysin.org/blog/vmware-workstation-18/,查看最新版。原创作品,转载请保留出处。作者主页:sysin.org原文作者:MichaelRoyJuly13,2023准备......
  • 第7章 Windows Server 2012中的Active Directory
    第7章WindowsServer2012中的ActiveDirectory7.1ActiveDirectory基础知识简介在开始讨论ActiveDirectory之前,先介绍一些基础知识。由于ActiveDirectory使用很多特有的词汇,这里只解释管理员需要了解的那部分。工作组工作组是一个Windows网络(LAN)中的一台或名多台......
  • 第6章 Windows Server 2012 R2 中的DNS和名称解析
    第6章WindowsServer2012R2中的DNS和名称解析6.1理解DNS服务器角色下面简单总结本章涉及的DNS基本概念主机名指(用户友好)的计算机的名称,根据DNS标准,主机名可以多达255个字符,主机名等价于计算机的名字。名称空间这是域的名称,并不是具体指ActiveDirectory域......
  • ReadyBoost 是什么: ReadyBoost 是一种在 Windows 操作系统中使用外部闪存设备作为虚拟
    ReadyBoost是Windows操作系统中的一个功能,它可以利用闪存驱动器(如USB闪存驱动器)作为辅助内存来提高系统的响应速度和性能。下面是关于ReadyBoost的详细解释:ReadyBoost是什么:ReadyBoost是一种在Windows操作系统中使用外部闪存设备作为虚拟内存缓存的技术。它允许将US......
  • pagefile.sys是Windows操作系统中的一个系统文件,它用于实现虚拟内存功能 。虚拟内存是
    pagefile.sys是Windows操作系统中的一个系统文件,它用于实现虚拟内存功能。虚拟内存是一种由硬盘上的空间模拟出来的内存,它允许操作系统将物理内存(RAM)之外的空间用作扩展内存。当物理内存不足时,操作系统会将一部分数据从物理内存转移到pagefile.sys文件中,以释放物理内存空间给其他......
  • Windows修改远程桌面3389端口bat脚本
    使用Bat脚本修改Windows服务器3389远程端口脚本;食用时将以下代码保存为.bat或.cmd即可,注意编码格式否则会出现乱码;使用管理员模式打开,否则可能无法修改。@echooffecho————————————————-echo–%~nx0echo–echo–Windows远程桌面端口修改echo–......
  • Windows 7 操作系统
    2.2.1Windows7的基础知识Windows7的主要特性有: 更简单 更安全 更好的连接 更低的成本安装Windows7操作系统所需的硬件配置 Windows7系统的软件需求只是指对硬盘系统的要求。安装Windows7系统的硬盘分期必须采用NTFS结构,要确保至少有16GB的可用空间,最好能提供40GB可用......
  • JS标识符
    什么是标识符? 变量名函数名属性名都称为标识符. 定义标识符规范如下1)标识符只能由字母数字下划线$组成.2)标识符不能以数字开头,例如:1name.3)标识符不能实JS中的关键字或保留字,例如:forifwhile等.4)标识符一般采用驼峰命名法定义,第一个单词首字母为小......