我的任务是使用TPM向现有的软件项目添加许可系统。其想法是使用TPM唯一地标识计算机(运行GNU/Linux,可能是CentOS/RHEL/Fedora),以便许可证文件只能在该计算机中使用。在了解TPM之前,我们将使用MAC地址、主板ID和其他串行代码的组合来尝试对计算机进行唯一的标识,但其中大多数并不是防篡改的。
我一直在阅读关于TPM的文章,但我对TPM似乎提供的多种功能感到有点困惑。据我所知,使用背书密钥或认证标识密钥都是这里的关键(双关意),但除此之外,我不确定该如何进行,甚至不确定我的方法是否正确。也许有更简单的方法来做我想要的事。
发布于 2016-07-22 00:49:34
当您要运行开源操作系统时,认证将不那么可靠。TPM将能够对操作系统的加载程序进行认证,但在此之后,由于开源软件易于修改,认证变得非常困难。
我建议使用认证标识密钥,创建远程认证签名(TPM_Quote),然后使用云服务托管应用程序的大部分部分。
客户端应用程序只是充当云服务器的“哑接口”,而TPM_Quote作为“登录”发送到服务器。这也可以用来协商一个“会话密钥”,只有TPM和您的服务器才能用来加密/解密。
这意味着黑客可以复制您的应用程序,直到母牛回家,这并不重要,因为您的服务器将不接受来自被篡改的系统的TPM_Quote。
这也使得在许可证被滥用时可以很容易地撤销许可证,例如,如果客户滥用个人许可证,则可以将RDP/VNC访问计算机的权限借给客户所在地以外的个人。
请注意,未加密的应用程序仍然需要对主机OS可用,因此无论您使用哪种TPM特性,只要在本地完成验证,它仍然是可破解的。即使使用带有密封存储和封存的认证,破解器仍然能够破解应用程序,因为密封存储和封存只能包含数据,而不能包含可执行的代码。(是的,您可以在例如缓存内存中包含可执行代码,但是要使主机OS能够执行它,您需要将它移出缓存内存之外)。
这就是为什么您需要使用云服务,这样您就可以从一个中央位置强制执行客户端计算机的非篡改状态,而攻击者无法实际访问该位置,然后在这个位置承载应用程序,所以即使破解器完全访问了客户端源代码,它们也不能利用所涉及的服务。
https://security.stackexchange.com/questions/130658
复制相似问题