Expand description
软机器绑定(soft machine binding)
将 API Key 与一个稳定的机器指纹绑定,防止 keys.json 被整体复制到别的机器后仍可用。
§强度说明 — 这是“软“绑定,不是硬件锁
- Linux: 读
/etc/machine-id(world-readable,只需文件读权限即可拿到) - macOS: 解析
ioreg输出拿IOPlatformUUID(任何用户都能跑 ioreg) - Windows: 暂不支持,跳过校验
能挡住:
- 把
keys.json整个拷到别的开发机 / VM / Docker 镜像里直接用 - 密钥不小心进了 git,clone 到别的机器也跑不起来
挡不住:
- 攻击者已经登上目标机器 → 他能读到 machine-id,就能伪造指纹
- 真要强绑定得走 TPM / Secure Enclave,那是未来版本的事
§指纹公式
SHA-256("futu-machine-bind:v1:" || key_id || ":" || raw_machine_id) → 64 位 hex
key_id 混入哈希的目的是:同一台机器上不同 key 的指纹不同,泄漏一个 key 的指纹 不会暴露别的 key 绑定的是不是同一台机器。
Enums§
Functions§
- check
- 检查本机指纹是否在白名单里
- fingerprint_
for - 计算指定 key_id 在本机的指纹哈希(64 位 hex)
- fingerprint_
from_ raw - 纯函数版本(方便单元测试)
- raw_
machine_ id - 获取本机原始 machine-id(每进程只调用一次,后续走缓存)