You might want to try wikipedia's explanation: http://en.wikipedia.org/wiki/Homomorphic_encryption
You might want to try wikipedia's explanation: http://en.wikipedia.org/wiki/Homomorphic_encryption
Edit: Someone with more insight came along. This post explains the real issue going on here much better: http://news.ycombinator.com/item?id=2827465 Read that one instead.
If I have a function f and you have some data x, and you want to compute f(x), then without fully homomorphic encryption, either I have to give you my function or you have to give me your data. With fully homomorphic encryption, you can give me your encrypted data and I can use that as input to my function, so that you don't learn what my function is and I don't learn what your data is. I give you the output of the function, and you can decrypt it to learn what f(x) is without learning f.
I think the use case where I want to compute f(x) in an untrusted (eg cloud) environment is probably the real potential use case.
The (slightly odd) book Translucent Databases gives some more use cases, such as working with anonymised statistics.
If someone was trying to be dishonest then they could fake any attribute of f() that you could likely verify.
Not necessarily. For example: you can't fake bitcoin transactions, as each one requires significant amount of comuptation. Basically faking would require exactly the same work (modulo problems with SHA1 itself, but that's another matter).
This is used for other purposes as well: http://en.wikipedia.org/wiki/Proof_of_work
Proof of work techniques are relying on forcing the other party to run a known function in order to prevent various attacks. If the other party can't verify the result they would be no use.