Skip to content

硬件指纹策略

硬件指纹用于把许可证绑定到具体设备,降低授权码被复制到其他机器使用的风险。指纹策略越严格,防滥用能力越强,但客户更换硬件后需要重新激活的概率也会提高。

设计原则

原则说明
稳定优先选择不容易随软件升级变化的设备信息
与网络解耦MAC、IP、网卡名称和网卡编号不得参与指纹
可解释客服和交付人员能解释为什么设备需要重新激活
可恢复客户换机、维修、系统重装时有明确处理流程
不收集敏感信息避免采集与授权无关的个人数据

常见字段

字段稳定性说明
操作系统稳定设备 ID如 Windows MachineGuid、Linux machine-id、macOS IOPlatformUUID;系统重装或镜像克隆时可能变化或重复
固件 System UUID通常不受网络和软件升级影响,但要过滤全 0、默认占位值等无效结果
主板或 CPU 标识中到高可作为固件标识不可用时的备选;需要处理厂商缺失值和跨平台差异
主机名易读但可被用户修改,只适合作为辅助信息,不建议作为唯一来源
MAC、IP 和网卡信息禁止用于指纹;联网方式、网卡、VPN、虚拟化或驱动变化都可能导致结果改变
内存容量升级或识别方式变化就会改变,不建议参与默认指纹

推荐策略

普通桌面软件

默认建议使用当前操作系统的稳定设备 ID,并在字段名命名空间下规范化后计算哈希。例如 Windows 桌面软件可使用:

plaintext
windows-machine-guid:<规范化值> -> SHA-256

它不受网卡、VPN 和联网方式影响。应明确告知客户,系统重装或还原镜像仍可能触发重新授权。

工业或设备软件

优先使用经过有效性检查的固件 System UUID:

plaintext
firmware-system-uuid:<规范化值> -> SHA-256

固件 UUID 不可用时,再选择稳定的主板或 CPU 标识作为明确回退方案。回退顺序必须固定;采集失败时不得临时切换到 MAC。

高价值离线交付

可以采用固定的多字段组合,但每增加一个字段都会增加硬件维修后重新授权的概率。例如:

plaintext
Firmware System UUID + Motherboard Serial + CPU Identifier

仅在确实需要更严格绑定、且有明确换机流程时使用。即使在高价值离线场景,也不要加入 MAC、IP、网卡信息或内存容量。

客户端处理建议

  1. 固定字段顺序,避免同一设备生成不同指纹。
  2. 对原始字段做规范化处理,例如去空格、统一大小写。
  3. 过滤空值、全 0、厂商默认占位值和明显无效的序列号。
  4. 最终只保存和传输稳定哈希,不把原始设备标识暴露给业务日志或接口错误。
  5. 稳定来源不可用时给出明确错误,不得回退到 MAC、随机 UUID 或当前时间。
  6. 测试重启、软件升级、切换网络、启停 VPN、增删虚拟网卡后指纹不变。
  7. 指纹算法一经发布不得静默修改;如需迁移,应提供旧许可证兼容或重新授权方案。

常见问题

问题说明
更换网卡后无法使用说明旧实现仍依赖 MAC;应迁移到稳定设备 ID,已签发许可证需同步处理兼容或重新授权
虚拟机克隆后授权异常多台虚拟机可能出现相同或变化的设备信息
系统重装后重新激活操作系统稳定设备 ID 可能变化;如需跨重装保持绑定,应评估使用有效的固件 System UUID
离线设备换机通常需要重新生成离线授权

相关文档