在我的公司,我们正在开发一个由多台服务器组成的大型系统。该系统由大约 5 个逻辑组件组成。数据存储在 XML、MS SQL 和 SQLite 中。这是一个 .Net 系统(大部分),组件使用 WCF 和一些自定义 UDP 进行通信。客户端主要通过自定义 UDP 或 WEB(ASP.NET & Silverlight)访问系统。
保护通信很容易,一些 SSL 和 WCF 上的一些安全性,我们就完成了。
我们面临的主要问题是系统需要部署在客户的站点上,我们不一定信任的客户。我们需要保护服务器上的数据以及软件本身免受逆向工程的影响。两者对我们都至关重要。
我们还需要一个终止开关,我想要一些破坏数据和软件的东西,根据命令,或者如果在一段时间内无法打电话回家。
我正在考虑的方向是使用 TPM 或类似的东西 - 一些硬件加密解决方案,结合我们可以在内部保留的另一个服务来加密服务器上的所有软件和数据,以便密钥将来自我们的服务器安全地在我们的站点中,并且可能会从 TPM 中屏蔽内存。
你建议如何解决这样的问题?
更新04/02 我正在寻找实用的建议,或者对可以帮助我的产品提出建议,所以我开始赏金......
伙计们,我们基本上是把我们的机器放在客户的网站上(出于商业和实用性的原因),我们拥有那台机器,客户在几小时内收到他支付的一切,他可以随心所欲地处理数据。但是我在那台机器上运行的算法,以及存储在那里的一些数据是我们想要保护的商业机密。理想情况下,如果我不说没问题,我希望机器根本不工作,甚至不启动,如果没有我的好,机器上的所有内容都保持加密状态。内存窗帘看起来也是在执行时保护机器的好方法。
理想情况下,我希望所有机器上的 HD 和存储在有人用螺丝刀靠近它们时立即爆炸...... :-) 但我认为这太过分了......
更新10/02 好的,在进行了一些研究之后,我认为我们将尝试与 PS3 加密系统相同的方向,除了我们将引入用于解密软件和来自我们服务器的数据的密钥。这样做我们可以在我们的机器上决定我们是否信任请求密钥的服务器,我们可以通过重新安装机器来获得一个终止开关。这可能是基于 TPM 或类似的东西,也许是英特尔的 TXT ......我也对内存帘作为一个重要的安全功能很感兴趣......
顺便说一句,我们无法通过将系统的有价值部分移动到我们的站点来解决这个问题,这既是因为业务需求,也是因为它在技术上不可行——我们需要巨大的带宽......