2014-12-07 72 views
4

我在一次采访中被问到了关于分布式计算的这个问题。安全地在客户端执行代码

记者:

“萨姆跑了客户端的计算机上的某些代码来获得它的输出,但 的客户端修改代码,因此代码返回不同的输出

现在山姆希望。知道是否有可能检测代码是否已被更改或返回值被修改,这可能吗?“

我认为这是不可能的,因为它是在他们的计算机上防止客户端修改代码。还是我错了?如果没有,我们可以检测代码是否已经改变,或者做些什么来让客户难以操纵代码和输出?

+0

不可能阻止修改代码。而且,根据我的经验,可以访问他们机器的事件很难检测到已更改的代码,因为它不会在更改时保存为文件。我希望你看到其他情况,这可能非常酷。 – rfornal 2014-12-07 03:40:43

回答

2

客户端是否操纵代码并不重要,唯一真正重要的是结果您的服务器从它接收回来。毕竟,客户端可能根本没有运行你的代码,它可能只是返回一个硬编码的响应。

所以问题就变成了:你的服务器可以信任客户端发送的回答
一般的答案是:不。

更复杂的答案是:它取决于你想要它做什么。也许你正在做的是服从proof-of-work concept,客户必须在数学上证明它做了一些事情。也许你可以包含一些签名过程,这个过程在数学上证明某些数据是从某些其他数据派生出来的,并且可以验证客户端的数据。也许服务器可能需要两个不同的客户端执行相同的工作或重叠的工作部分,这些部分可以互相验证,这需要攻击者一次操纵两个(或更多)客户端,这可能是不可行的,足以使每个客户端客户的回应个别值得信赖。