Module machine

Module machine 

Source
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§

MachineError

Functions§

check
检查本机指纹是否在白名单里
fingerprint_for
计算指定 key_id 在本机的指纹哈希(64 位 hex)
fingerprint_from_raw
纯函数版本(方便单元测试)
raw_machine_id
获取本机原始 machine-id(每进程只调用一次,后续走缓存)