我被要求使用 TPM 为具有 TPM 芯片的 x86_64 设备实施相当于许可证加密狗的内容。本质上,所需要的是确保为设备发布的软件只能在设备本身上运行,这样如果软件被迁移到虚拟机或其他硬件,它将拒绝运行。
我不希望该解决方案能够抵抗逆向工程,而是一种典型的“加密狗”类型的解决方案,它将阻碍普通用户并让企业客户保持诚实。
我已经成功构建并包含了 TPM 模块以及TrouSerS和 openssl-tpm-engine 代码——我可以成功获得 TPM 的所有权,但除此之外,可用的文档并没有完全涵盖这个用例——或者如果到目前为止,我一直无法找到一个简单的英文解决方案。
如果可能的话,我宁愿依赖存储在 TPM 中的私钥的秘密性质,而不是利用平台组件哈希(硬盘驱动器可能会死掉,CPU 可能会被更换等。我宁愿在客户的一方,这样系统不会在例行硬件升级后变得无法使用。
同样,理想情况下,我怀疑可以设计此解决方案,以便在制造过程中收集每个设备的公钥并将其添加到签名钥匙串中,以便可以根据每个设备可能存储在 TPM 中的单个密钥对软件进行签名,而不是要求对软件进行多次签名?我在这里可能弄错了,但必须有一些满足平台身份验证方法的批量方法,否则它似乎很难扩展。