我正在构建一个分布式应用程序,其中软件由我的公司安装在我们客户的硬件上。因此,客户可以篡改软件。我想知道是否存在这样一种技术,即当运行在客户硬件上的软件向我们的中央服务器发出网络请求时(即完全在我们的控制之下),我们可以验证该请求是否来自我们软件的未受限制版本。
我认为这被称为"远程证明"。关于远程证明的Web搜索会返回各种结果,从"不可能"到"使用TPM"。但我一直找不到一个简单易懂的例子来说明如何在Windows中编写代码。
因此,我的问题是:远程认证在Windows中可能吗?如果可能,是否有一个工作示例可以作为实现的基础?
注意:远程证明有时是通过"隐藏"技术实现的,例如将"共享机密"嵌入到应用程序中,然后以各种方式隐藏它,以确保攻击者无法通过反编译轻松提取共享机密。我对这些技术不感兴趣,正在寻找能够提供真正安全性的东西,而不是默默无闻的安全性。
为了证明一个系统,您需要两件事:
- 从信任根到每一个执行的代码的信任链
- 解释和验证服务器上获得的测量值的方法
使用Windows时,两者都没有。
目前甚至连Windows本身都不知道它的状态。不过,这在Windows8中有所改善。现在您至少有了引导加载程序和驱动程序的测量结果。但没有扩展到用户代码的内容。