硬件指纹策略
硬件指纹用于把许可证绑定到具体设备,降低授权码被复制到其他机器使用的风险。指纹策略越严格,防滥用能力越强,但客户更换硬件后需要重新激活的概率也会提高。
设计原则
| 原则 | 说明 |
|---|---|
| 稳定优先 | 选择不容易随软件升级变化的设备信息 |
| 与网络解耦 | 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、网卡信息或内存容量。
客户端处理建议
- 固定字段顺序,避免同一设备生成不同指纹。
- 对原始字段做规范化处理,例如去空格、统一大小写。
- 过滤空值、全 0、厂商默认占位值和明显无效的序列号。
- 最终只保存和传输稳定哈希,不把原始设备标识暴露给业务日志或接口错误。
- 稳定来源不可用时给出明确错误,不得回退到 MAC、随机 UUID 或当前时间。
- 测试重启、软件升级、切换网络、启停 VPN、增删虚拟网卡后指纹不变。
- 指纹算法一经发布不得静默修改;如需迁移,应提供旧许可证兼容或重新授权方案。
常见问题
| 问题 | 说明 |
|---|---|
| 更换网卡后无法使用 | 说明旧实现仍依赖 MAC;应迁移到稳定设备 ID,已签发许可证需同步处理兼容或重新授权 |
| 虚拟机克隆后授权异常 | 多台虚拟机可能出现相同或变化的设备信息 |
| 系统重装后重新激活 | 操作系统稳定设备 ID 可能变化;如需跨重装保持绑定,应评估使用有效的固件 System UUID |
| 离线设备换机 | 通常需要重新生成离线授权 |