Secure Computing

Cloud computing, remote virtual machines, web mash-ups, and anything that executes on someone else’s machine with data you (or your customers) provide is really insecure. Sure you can encrypt the traffic, but in the end that remote machine is forced to decrypt that data before it’s operated on. For example, suppose I have two numbers, which I want added together. Now, if you can add, then I can send you the numbers, and you can send me back the sum. But what if I’d really rather not reveal these numbers, and I’m incapable of adding them myself?

It should be theoretically possible for me to encrypt the numbers and send them you, and let you directly perform the addition operation in the encrypted domain, sending me back the encrypted sum. It would be really difficult, however, to find an encryption operation that would allow this for addition, multiplication, and division. Yet, even if we could, it still doesn’t solve problems related to pointer arithmetic or memory addressing. It’s entirely possible that I might have computed, and therefore not want to reveal, a memory offset that the underlying processor would need for indexing an array.

Still directly processing in the encrypted domain might be useful for certain, more limited, applications.