Practical Verified Computation with Streaming Interactive Proofs


Graham Cormode, Michael Mitzenmacher, Justin Thaler


Abstract: When delegating computation to a service provider, as in the cloud computing paradigm, we seek some reassurance that the output is correct and complete.  Yet recomputing the output as a check is inefficient and expensive, and it may not even be feasible to store all the data locally.  We are therefore interested in what can be validated by a streaming (sublinear space) user, who cannot store the full input, or perform the full computation herself. Our aim in this work is to advance a recent line of work on “proof systems'” in which the service provider proves the correctness of its output to a user. The goal is to minimize the time and space costs of both parties in generating and checking the proof.  Only very recently have there been attempts to implement such proof systems, and thus far these have been quite limited in functionality. 

Here, our approach is two-fold.  First, we describe a carefully chosen instantiation of one of the most efficient general-purpose constructions for arbitrary computations  (streaming or otherwise),  due to Goldwasser, Kalai, and Rothblum. This requires several new insights and enhancements to move the methodology from a theoretical result to a practical possibility. Our main contribution is in achieving a prover that runs in time O(S(n) log S(n)), where S(n) is the size of an arithmetic circuit computing the function of interest; this compares favorably to the poly(S(n)) runtime for the prover promised in Goldwasser et al. Our experimental results demonstrate that a practical general-purpose protocol for verifiable computation may be significantly closer to reality than previously realized.

Second, we describe a set of techniques that achieve genuine scalability for protocols fine-tuned for specific important problems in streaming and database processing. Focusing in particular on non-interactive protocols for problems ranging from matrix-vector multiplication to bipartite perfect matching,  we build on prior work \cite{annotations, graphstream} to achieve a prover that runs in nearly linear-time,  while obtaining optimal tradeoffs between communication cost and the user's working memory.  Existing techniques required (substantially) superlinear time for the prover. Finally, we develop improved \emph{interactive} protocols for specific problems based on a linearization  technique originally due to Shen. We argue that even if general-purpose methods improve, fine-tuned protocols will remain valuable in real-world settings for key problems, and hence special attention to specific problems is warranted.


May 2011

Full Version:


Source Code:

[zip] (Please read the README file.)

This page contains source code for the paper Practical Verified Computation with Streaming Interactive Proofs, by Graham Cormode, Michael Mitzenmacher, and Justin Thaler.

I intend to maintain this code indefinitely.

This page was last updated on Sunday, July 21, 2013 (replaced modular multiplication function with more efficient version). Previous update December 2011.

Creative Commons License
This work by Justin Thaler is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 3.0 Unported License.