Pinocchio: Nearly Practical Verifiable Computation. In this 2013 IEEE Symposium on Security and Privacy work, Bryan Parno and colleagues present a system that lets a client create public evaluation and verification keys for a function. An untrusted worker computes a result and proof, and anyone can verify correctness under cryptographic assumptions. The proof remains a fixed size regardless of the computation or input-output size. With Pinocchio, a worker returns both a result and a proof. The client creates public cryptographic material for a particular function: an evaluation key for producing proofs and a verification key for checking them. The worker performs the computation and generates the proof. The client, or anyone else, can then verify correctness under the protocol’s cryptographic assumptions. This setup is specific to the function being evaluated. Pinocchio distributes costs unevenly. Proofs remain compact regardless of computation and input-output size, while function-specific setup, evaluation-key storage, and proof generation can remain expensive. Evaluation keys commonly occupied much more storage than verification keys. Compared with selected prior work, Pinocchio substantially reduced worker proof effort, although Parno and colleagues still described that effort as expensive and said more progress was needed for true practicality. The toolchain accepted a substantial but restricted subset of C. It translated programs through arithmetic or Boolean circuits into quadratic arithmetic or span programs, then generated pairing-based proof code. That code let an untrusted worker compute a result and proof and let anyone check correctness under cryptographic assumptions. The compiler focused on integer-oriented programs; loops and dynamic memory references worked only under constraints. Setup generated keys for a specific function rather than material for arbitrary programs. Each proof was a constant 288 bytes, independent of the computation and the sizes of its inputs and outputs. Across the evaluated C applications, verification typically took about 10 milliseconds, and some parameter settings checked faster than running the original program natively. Those measurements establish a small proof and a fast checking path in the evaluated setting. They do not establish that setup or proof generation was equally cheap. Compared with earlier general-purpose systems selected by the researchers, verification was several orders of magnitude faster. Worker proof effort also fell by 19 to 60 times relative to selected prior work. Even after that reduction, the authors described the worker’s effort as expensive and said further progress was needed for true practicality. The experiment therefore separates a strong verifier-side improvement from the unresolved cost borne by the system producing each proof. The verifier advantage depended on the workload and configuration. On the test platform, some evaluated applications did not verify faster than native execution. Setup also required substantial reuse before its cost was recovered: the median break-even point was around 70,000 runs with a verifier selected in advance and 605,000 runs when proofs were publicly verifiable. These results are bounded to the evaluated applications and do not support assuming that every workload benefits. An architecture review should account for the whole system, not just proof size. Setup was specific to each function and scaled with evaluating that function. Evaluation keys commonly occupied tens or hundreds of megabytes, although verification keys were generally measured in kilobytes. The restricted compiler, constrained handling of loops and memory, and specialized pairing assumptions further limit direct adoption. A corrected full version also changed the verification procedure, so implementers should validate the precise construction and implementation they evaluate. Pinocchio demonstrated that restricted outsourced computations could produce constant-size proofs that were publicly checkable with much less verifier work in the tested applications. It did not demonstrate cheap proving, universally faster verification, or a drop-in verifier for general C programs. Security architects and cryptographic engineers should assess the full operating cost, especially setup, proving, and key storage. They should also check whether the workload is compatible and reused often enough, rather than infer overall practicality from the compact proof alone.