A zap is a two-round, public coin witness-indistinguishable protocol in which the first round, consisting of a message from the verifier to the prover, can be fixed “once and for all” and applied to any instance. We present a zap for every language in NP, based on the existence of non-interactive zeroknowledge proofs in the shared random string model. The zap is in the standard model, and hence requires no common guaranteed random string. We present several applications for zaps, including 3-round concurrent zero knowledge and 2-round concurrent deniable authentication, in the timing model of Dwork, Naor and Sahai [23], using moderately hard functions [20]. We also characterize the existence of zaps in terms of a primitive called verifiable pseudo-random bit generators (VPRGs).