唯一的标识一个设备是一个基本功能,可以拥有很多应用场景,比如软件授权(如何保证你的软件在授权后才能在特定机器上使用)、软件License,设备标识,设备身份识别等。下面列举一下各种方法的优劣
机器唯一设备标识方案全对比(软件授权 / License 绑定 / 设备身份识别)
核心目标
一、硬件底层硬件标识类(原生物理唯一,优先授权场景)
方案 1:CPU 序列号 / CPU Processor ID
原理
CPUID 指令读取 CPU 唯一序列号(Intel Pentium 3 时代原生支持;现代消费 CPU 默认屏蔽,企业 Xeon 可 BIOS 开启);ARM 读取 CPU 芯片唯一 ID。优势
- CPU 焊死在主板,一台主机终身不变;
- 无法通过软件修改,篡改必须更换 CPU 硬件;
- 全局唯一性极强,全球无重复 CPU SN。
劣势
- 现代台式 / 笔记本 BIOS 默认关闭 CPU 序列号,读取返回空 / 统一占位符,兼容性差;
- 虚拟机 CPU 为虚拟生成 ID,克隆后多台虚拟机 ID 完全一致;
- AMD 大部分消费级 CPU 不开放该字段;
- 更换 CPU 后原有 License 直接失效,售后成本高。
适用场景
方案 2:主板 BIOS 序列号(BaseBoard SerialNumber)
原理
Win32_BaseBoard、SMBIOS 读取主板出厂序列号,主板厂商烧录。优势
- 主板整机唯一,台式机 / 服务器兼容性最好;
- 无需开启 CPU 特殊功能,Windows 默认可读;
- 单台物理机生命周期内稳定,不随硬盘、内存更换改变。
劣势
- 廉价白牌主板、组装工控主板会填充空字符串 / 默认
To be filled by O.E.M.,无唯一值; - 更换主板整机授权直接失效;
- 虚拟机 SMBIOS 序列号可一键修改,虚拟化环境极易破解;
- 部分品牌机可通过 BIOS 工具改写 SN。
适用场景
方案 3:网卡 MAC 地址(多网卡取第一张有效有线网卡)
原理
优势
- 读取接口最简单,Windows/Linux/macOS 全平台支持;
- 几乎所有设备都自带有线网卡,不会出现空值;
- 开发成本最低,无需底层权限。
劣势
- MAC 地址软件可一键修改(工具、命令行
reg.exe、PowerShell),盗版用户极易篡改伪造机器指纹; - 虚拟机虚拟 MAC 重启可自动变化;
- 更换网卡、USB 外置网卡后设备标识改变,授权失效;
- 服务器多网卡、无有线网卡仅 WiFi 设备容易指纹漂移。
适用场景
方案 4:硬盘物理序列号(HardDisk Physical Serial Number)
原理
优势
- 普通用户无工具修改硬盘固件 SN,篡改门槛远高于 MAC;
- 单硬盘主机指纹稳定;NVMe 企业盘序列号不可改写。
劣势
- 更换系统盘 / 新增硬盘后指纹变更;
- 虚拟机虚拟硬盘无真实物理序列号,克隆后全部相同;
- 部分加密硬盘、RAID 阵列无法读取底层盘 SN;
- 多硬盘设备需要组合多盘 SN 才能保证唯一性。
适用场景
方案 5:TPM 2.0 设备唯一背书密钥(EK / Endorsement Key)
原理
优势(硬件指纹最优安全方案)
- 硬件级安全,软件完全无法伪造、篡改、复制;
- 支持加密签名校验,License 可加密绑定 TPM,盗版无法移植;
- 更换 CPU / 硬盘不影响 TPM 标识,仅更换主板才失效;
- 支持远程安全校验、离线授权双重验证,对抗虚拟机克隆。
劣势
- 老旧电脑、工控机无 TPM 2.0,兼容性差;
- 开发流程复杂,需要 TPM 安全 API,跨平台适配成本高;
- 云虚拟机多数无物理 TPM(vTPM 可被管理员重置);
- 用户更换主板需要重新激活,售后流程复杂。
适用场景
二、系统软件层标识(无硬件依赖,易修改,低成本)
方案 6:系统分区卷序列号(Volume Serial Number)
原理
优势
劣势
- 重装系统、格式化硬盘序列号直接改变;
- 工具可随意修改卷序列号;
- 虚拟机克隆分区卷号完全一致;
- 无硬件绑定,仅标识分区,不代表机器。
适用场景:临时本地区分文件,严禁用于授权。
方案 7:Windows 机器 GUID / MachineGuid(注册表 HKLM\SOFTWARE\Microsoft\Cryptography)
原理
优势
- 全 Windows 系统自带,一键读取;
- 同一系统内永久不变,不随硬盘文件修改变化。
劣势
- 重装系统直接生成全新 GUID;
- 注册表可手动修改、虚拟机克隆后 GUID 相同;
- 仅系统标识,无任何硬件绑定,盗版可一键复制整机注册表实现多机授权。
适用场景:内网简易设备统计,无防盗版需求。
方案 8:自定义本地随机指纹文件
原理
优势:开发最简单,零系统 API 依赖。
劣势:用户删除、复制文件即可移植 License,安全等级最低。
三、复合指纹方案(多硬件字段混合哈希,工业授权主流折中方案)
原理
主板SN + CPU ID + 第一块硬盘SN优势
- 单一硬件更换不会直接导致指纹失效(仅更换硬盘:主板 + CPU 不变,哈希仅小幅变动,可做兼容逻辑);
- 破解成本大幅提升,攻击者需要同时篡改主板、CPU、硬盘三组标识才能伪造;
- 兼容无 TPM 老旧设备,兼顾兼容性与安全性;
- 可自定义容错规则:单硬件变更允许 1 次重新激活,降低售后压力。
劣势
- 代码复杂度提升,需要处理各类硬件读取空值、异常兼容;
- 虚拟机环境依然存在批量克隆风险;
- 多硬件读取逻辑多,启动时轻微增加软件加载耗时。
适用场景:绝大多数商用付费软件、桌面工具、中小型服务器授权(性价比最高)。
四、虚拟化专用标识(针对云主机、虚拟机防克隆)
方案 9:虚拟机底层 UUID(Hyper-V/SMBIOS UUID、VMware Instance UUID)
原理
优势
劣势
- 管理员可复制虚拟机镜像,克隆后 UUID 可手动重置;
- 本地 VMware 虚拟机可自由修改 SMBIOS UUID;
- 物理机无该标识,需要两套兼容逻辑。
适用场景:云端 SaaS 服务、云服务器软件授权。
五、各维度优劣总表(授权场景直接选型参考)
| 标识方案 | 防篡改能力 | 虚拟机抗克隆 | 硬件更换容错 | 兼容性(老设备) | 开发成本 | 推荐授权等级 |
|---|---|---|---|---|---|---|
| TPM2.0 EK 密钥 | ★★★★★ | ★★★★ | 高(换硬盘 / CPU 不变) | 低(老机器无 TPM) | 极高 | 高价值付费软件、涉密系统 |
| 复合多硬件哈希 | ★★★☆ | ★★☆ | 中(单硬件更换可兼容) | 极高 | 中 | 主流商用软件、工控授权 |
| 主板 BIOS SN | ★★☆ | ★ | 低(换主板失效) | 高 | 低 | 品牌物理 PC 单机工具 |
| 硬盘物理 SN | ★★ | ★ | 低(换盘失效) | 高 | 低 | 单机桌面轻量软件 |
| CPU 序列号 | ★★★ | ★ | 极低(换 CPU 失效) | 低(消费 CPU 关闭) | 中 | 固定工控专用设备 |
| MAC 网卡地址 | ★ | ★ | 极低 | 极高 | 极低 | 内网简易设备识别,禁止付费授权 |
| 系统 MachineGuid | ☆ | ☆ | 无(重装即变) | 极高 | 极低 | 内部统计,不可授权 |
| 分区卷序列号 | ☆ | ☆ | 无 | 极高 | 极低 | 仅本地文件区分 |
六、落地选型建议(软件 License 授权场景)
- 高价值付费软件 / 涉密系统:首选 TPM2.0 硬件密钥绑定,搭配加密 License 签名,从硬件底层杜绝盗版移植;
- 通用商业桌面 / 服务器软件(兼顾老旧电脑兼容):复合硬件指纹(主板 SN + 硬盘 SN),增加容错激活逻辑;
- 工业工控固定设备(硬件不更换):CPU 序列号 + 主板 SN 双绑定;
- 云端虚拟机 SaaS 产品:虚拟化平台实例 UUID + 云端服务器二次校验;
- 免费内网工具、无防盗需求:MAC 地址或系统 MachineGuid 最简实现;
- 绝对避坑:不要单独使用 MAC、卷序列号、MachineGuid 做付费软件授权,篡改成本极低,极易出现盗版批量破解。
七、补充加固配套方案(无论采用哪种设备 ID 都可叠加)
- 设备 ID 做 SHA256 不可逆哈希,不裸传原始硬件序列号;
- License 文件使用 RSA 非对称加密,服务器私钥签名、软件公钥校验;
- 增加联网二次校验:定期上传设备 ID 至授权服务器,拉黑盗版重复机器;
- 限制单设备 ID 同时在线数量,防止镜像批量分发;
- 硬件变更缓冲机制:允许 1 次硬件更换免重新购买授权,降低用户售后阻力。
GDID + 全品类浏览器指纹完整汇总(原理、优劣、场景、对比)
一、GDID 完整定义、原理、优劣
1. GDID 全称
- 平台风控 GDID:网站后端生成、下发至浏览器本地持久存储的全局设备唯一 ID(LocalStorage/IndexedDB/Cookie 持久化)
- Chromium 内核 GDID:浏览器底层硬件标识,内核读取硬件特征后生成全局稳定设备标识,用于 Chrome 同步、安全校验、设备绑定
2. 底层实现原理
- 业务平台 GDID(风控 / 广告最常用)
网站首次访问时,前端 JS 生成 128 位随机 UUID,存入浏览器持久化存储(不受清除 Cookie 短期影响);后续每次请求自动带上 GDID,服务端直接识别同一设备,不依赖任何硬件渲染特征。
- Chromium 原生 GDID
内核读取主板 SN、硬盘序列号、TPM、显卡信息复合哈希生成,存储在用户数据目录,用于 Chrome 账号同步、设备安全验证、云端授权绑定,仅 Chromium 系浏览器内置。
3. GDID 优势
- 识别成本极低:服务端仅比对字符串,无需多维特征哈希计算,性能高;
- 跨会话强稳定:无痕 / 隐私模式默认共享 GDID,清除普通 Cookie 仍保留;
- 实现简单:前端几行 JS 即可生成,无浏览器 API 限制;
- 跨页面、跨子域名统一标识,天然适配广告归因、账号关联风控。
4. GDID 短板
- 极易清除 / 篡改:清除浏览器本地存储、重装浏览器、更换配置文件直接重置 GDID;
- 无硬件绑定:同一电脑多浏览器、多指纹环境可独立生成不同 GDID,无法识别底层同一物理设备;
- 可被指纹浏览器一键随机生成伪造,对抗能力弱;
- 隐私风险:长期持久追踪用户,被各国隐私法规重点监管(GDPR、个人信息保护法)。
5. 适用场景
二、全品类浏览器指纹分类汇总(静态渲染指纹 / 网络指纹 / 硬件复合指纹 / 行为指纹)
(一)基础静态文本指纹(低熵,辅助识别)
1. UA User-Agent 指纹
User-Agent,携带浏览器、内核、系统、版本、设备型号。- 优势:零开发成本,所有请求自动携带;
- 劣势:一键伪造,大量用户 UA 完全一致,唯一性极低;
- 适用:基础设备分层,不作为核心识别依据。
2. 基础 Navigator 组合指纹(语言 / 时区 / 屏幕 / CPU 并发)
- 优势:读取简单,无图形渲染开销;
- 劣势:单一字段熵值极低,仅组合使用才有区分度,极易统一批量伪造;
- 适用:辅助风控,搭配 Canvas/WebGL 使用。
3. 字体枚举指纹 Font Fingerprint
- 优势:Windows/macOS 字体库差异巨大,区分度中等;
- 劣势:指纹浏览器可自定义字体列表,操作系统重装字体库直接变更;
- 适用:辅助区分办公 / 个人设备,模拟器检测。
(二)渲染类高熵指纹(主流风控核心,唯一性最高)
1. Canvas 2D 渲染指纹
- 优势:全局唯一性 94%+,无痕模式无法规避,清除 Cookie 无效;
- 劣势:更新显卡驱动、系统渲染组件后指纹变化;JS 层可被 Hook 篡改;
- 适用:反羊毛党、批量注册、多账号关联检测。
2. WebGL 指纹(GPU 硬件指纹)
- 优势:硬件级特征,熵值高于 Canvas,区分虚拟机 / 模拟器效果极强;
- 劣势:更换显卡、更新显卡驱动指纹改变;JS 可拦截返回值伪造;
- 适用:识别脚本自动化、云模拟器、虚拟机批量操作。
3. AudioContext 音频指纹
- 优势:小众指纹,多数自动化脚本未做伪装;
- 劣势:更换声卡、音频驱动指纹变更;移动端兼容性差;
- 适用:深层机器人脚本识别,多层交叉验证。
(三)网络层底层指纹(TCP/TLS/WebRTC,底层不可 JS 篡改)
1. JA3 TLS 握手指纹
- 优势:底层网络特征,指纹浏览器仅内核级修改可伪装,JS 脚本无法拦截;
- 劣势:更换代理、浏览器内核会改变 JA3;同内核设备 JA3 一致;
- 适用:爬虫、自动化工具、恶意流量识别。
2. WebRTC 内网 IP 指纹
- 优势:可识别同一内网多账号,区分代理虚假 IP;
- 劣势:浏览器可关闭 WebRTC API 屏蔽读取;
- 适用:检测同一局域网批量运营账号。
3. IP 地址指纹
- 优势:最简单网络标识;
- 劣势:代理、VPN、动态 IP 极易切换;多用户共享公网 IP;
- 适用:风险分层,搭配其他指纹交叉验证。
(四)硬件复合底层指纹(类 GDID、硬件设备指纹)
1. 浏览器复合硬件指纹(等效高安全 GDID)
- 优势:绑定真实硬件,更换单一硬件仅小幅变化,识别同一物理设备;
- 劣势:JS 无法直接读取底层硬件(浏览器安全沙箱拦截),仅客户端桌面程序可用,网页端受限;
- 适用:PC 客户端软件授权、网页高等级风控(需配合本地客户端)。
2. TPM / 设备 EK 指纹(最高安全硬件标识)
- 优势:硬件级不可篡改,虚拟机 vTPM 可隔离;
- 劣势:老旧设备无 TPM,网页 JS 无法访问 TPM 接口;
- 适用:企业内网高安全系统、涉密网页平台。
(五)行为指纹(动态辅助指纹,无静态哈希)
- 优势:真人与机器人行为差异巨大,无法批量统一伪造;
- 劣势:单一行为无固定指纹,只能做模型打分,无法生成唯一标识哈希;
- 适用:人机验证、机器人脚本识别,辅助指纹交叉校验。
三、主流指纹横向优劣对比表
| 指纹类型 | 唯一性 | 稳定性 | 伪造难度 | 无痕模式失效? | 清除 Cookie 失效? | 核心适用场景 |
|---|---|---|---|---|---|---|
| GDID(本地存储 UUID) | ★☆ | 中 | 极低(一键清空) | 否 | 是(清存储即重置) | 简易设备记忆、广告归因 |
| UA / 基础 Navigator | ★ | 中 | 极低 | 否 | 否 | 基础分层辅助 |
| 字体列表 | ★★ | 中高 | 低 | 否 | 否 | 辅助设备区分 |
| Canvas 渲染指纹 | ★★★★ | 中 | 中(JS Hook 可篡改) | 否 | 否 | 核心风控、多账号关联 |
| WebGL GPU 指纹 | ★★★★ | 中 | 中高(需拦截 GPU 参数) | 否 | 否 | 虚拟机 / 模拟器识别 |
| Audio 音频指纹 | ★★★ | 中 | 中 | 否 | 否 | 深层机器人检测 |
| JA3 TLS 指纹 | ★★★ | 中 | 高(需内核修改) | 否 | 否 | 爬虫、底层恶意流量识别 |
| WebRTC 内网 IP | ★★★ | 低 | 中(关闭 API 即可屏蔽) | 否 | 否 | 内网批量账号检测 |
| 硬件复合指纹(主板 + 硬盘 SN) | ★★★★★ | 极高 | 极高(需更换硬件) | 否 | 否 | PC 客户端授权、高安全风控 |
| TPM EK 硬件指纹 | ★★★★★ | 永久 | 不可伪造 | 否 | 否 | 涉密、企业高安全平台 |
| 行为指纹 | 无固定哈希 | 动态变化 | 极高(真人行为无法批量复刻) | — | — | 人机模型打分 |
四、GDID 与 Canvas/WebGL 渲染指纹核心区别
- 生成逻辑
GDID:随机字符串持久存储,无硬件关联;Canvas/WebGL:基于显卡、渲染引擎固有硬件偏差实时计算哈希,绑定物理硬件特征。
- 抗作弊能力
GDID:极低,清除本地存储直接重置,指纹浏览器一键随机;渲染指纹:高,必须拦截浏览器底层渲染管线,仅内核级指纹浏览器可完整伪装。
- 跨设备识别
同一电脑更换浏览器,GDID 完全独立;Canvas/WebGL 指纹基本一致,可识别底层同一物理设备。
- 隐私合规风险
GDID 属于持久化用户追踪,违规风险更高;渲染指纹无本地存储,合规压力更小。
- 性能开销
GDID:零计算开销;Canvas/WebGL:需要图形渲染、二进制哈希计算,前端轻微性能损耗。
五、业务场景选型方案
场景 1:广告平台、用户简易回访(低风控)
场景 2:电商、社交平台防多账号关联、羊毛党(主流风控)
场景 3:反爬虫、自动化脚本、模拟器识别
场景 4:PC 客户端软件网页授权、设备绑定 License
场景 5:涉密内网、高安全企业后台
场景 6:跨境多账号运营、指纹浏览器对抗平台风控
六、通用短板汇总(所有指纹通用局限)
- 单一指纹识别准确率有限,生产环境必须多指纹交叉验证;
- 更新显卡驱动、系统、浏览器版本会改变渲染类指纹;
- 虚拟机、云桌面可批量模拟统一设备特征,批量绕过识别;
- 纯 JS 层伪装仅能对抗基础检测,内核级深度风控可识别 JS Hook 篡改痕迹。
唯一的标识一个设备是一个基本功能,可以拥有很多应用场景,比如软件授权(如何保证你的软件在授权后才能在特定机器上使用)、软件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失灵。因此,无论设备标识或者用户标识,很多情况下可能只防君子、不防小人,甚至悲观者认为这些手段都是防止合法用户的,影响用户使用的方便性,大可以取消掉。笔者认为,没有必要这么悲观,知识产权等信息是尊敬人的价值和劳动的表现,即便不能完全防止小人,我们也要通过这些方法将一般的小人排除在技术门槛之外,并尽量增加高级小人破解时的代价。

浙公网安备 33010602011771号