I want to run my computer program(or code) on someone else's computer(with permission from the owner of the computer) and get the results back. How can I make sure the owner is running my program only, for the computation of results? Does something like Intel Secure Enclave can help me achieve this?
A priori, you can't.
There are several approaches you can take:
- You just trust that the answer is right. Maybe you have no reason to doubt on the honesty of that remote computer. It's certainly easier.
- You verify the result. Some computations require a lot of work (like, finding string which produces certain hash), but once you are provided a solution, it is cheap to verify that it is a solution to the problem (or if not exactly cheap, much cheaper than the original computation).
- You can distribute the same work to multiple nodes, then verify they reach to the same solution. This "wastes" computing power in exchange of that extra trust on the results.
- You distribute to several nodes a portion of the work. Thus doing a probabilistic audit of their results.
- You trust the node results, but attribute the results to them so they can be blamed for errors
- Errors may be completely unintentional
- Errors may be completely malicious, with an active effort to bypass whatever checks you may set
- Your own computer may be the one in the wrong
A scenario where a host has faulty memory and provides bad results once in X blocks would be quite different than differences between two nodes due to hardware precision not being the same, and than people actively compromising the program execution to bypass a game license check.
In some cases maybe you could design the process in a way that allows such checks, Like having the remote computer process the data blinded with homomorphic encrption, in a way that it also produces a checksum that the controller may use for a quick check of the results.
could you use the Secure Enclave? Maybe. Signal conceived a way to show in a provable way the code they were using. It still needs to be able to run what you need (it's harder to program, and you have more limitations). Plus, it has the underlying assumption the Enclave itself isn't compromised (multiple vulnerabilities have been found).