Efficient Zero-Knowledge Proofs and Applications