Zero-knowledge proofs are proofs that are both convincing and yet
yield nothing beyond the validity of the assertion being proven.
Since their introduction about twenty years ago,
zero-knowledge proofs have attracted a lot of attention
and have, in turn, contributed to the development of other
areas of cryptography and complexity theory.
We survey the main definitions and results regarding
zero-knowledge proofs.
Specifically, we present the basic definitional approach
and its variants, results regarding the power of zero-knowledge proofs
as well as recent results regarding questions such as
the composeability of zero-knowledge proofs
and the use of the adversary's program
within the proof of security (i.e., non-black-box simulation).