Snårkl: Somewhat Practical, Pretty Much Declarative Verifiable Computing in Haskell

Conference paper
Part of the Lecture Notes in Computer Science book series (LNCS, volume 10702)


Verifiable computing (VC) uses cryptography to delegate computation to untrusted workers. But in most VC schemes, the delegated program must first be arithmetized – expressed as a circuit with multiplication and addition over a finite field. Previous work has compiled subsets of languages like C, LLVM, and bespoke assembly to arithmetic circuits. In this paper, we report on a new DSL for VC, called Snårkl (“Snorkel”), that supports encodings of language features familiar from functional programming such as products, case analysis, and inductive datatypes. We demonstrate that simple constraint-minimization techniques are an effective means of optimizing the resulting encodings, and therefore of generating small circuits.


Arithmetic Circuits Pinocchio Constraint Minimization Disequality Tests Recursive Bound 
These keywords were added by machine and not by the authors. This process is experimental and the keywords may be updated as the learning algorithm improves.


  1. 1.
    Arora, S., Lund, C., Motwani, R., Sudan, M., Szegedy, M.: Proof verification and the hardness of approximation problems. JACM 45(3), 501–555 (1998)MathSciNetCrossRefzbMATHGoogle Scholar
  2. 2.
    Arora, S., Safra, S.: Probabilistic checking of proofs: a new characterization of NP. JACM 45(1), 70–122 (1998)MathSciNetCrossRefzbMATHGoogle Scholar
  3. 3.
    Ben-Sasson, E., Chiesa, A., Genkin, D., Tromer, E., Virza, M.: SNARKs for C: verifying program executions succinctly and in zero knowledge. In: Canetti, R., Garay, J.A. (eds.) CRYPTO 2013. LNCS, vol. 8043, pp. 90–108. Springer, Heidelberg (2013). CrossRefGoogle Scholar
  4. 4.
    Ben-Sasson, E., Chiesa, A., Tromer, E., Virza, M.: Succinct non-interactive zero knowledge for a von Neumann architecture. In: USENIX Security (2014)Google Scholar
  5. 5.
    Ben-Sasson, E., et al.: The libsnark library. Accessed 23 Sep 2015
  6. 6.
    Brassard, G., Chaum, D., Crépeau, C.: Minimum disclosure proofs of knowledge. J. Comput. Syst. Sci. 37(2), 156–189 (1988)MathSciNetCrossRefzbMATHGoogle Scholar
  7. 7.
    Braun, B., Feldman, A.J., Ren, Z., Setty, S., Blumberg, A.J., Walfish, M.: Verifying computations with state. In: SOSP, pp. 341–357. ACM (2013)Google Scholar
  8. 8.
    Costello, C., et al.: Geppetto: versatile verifiable computation. In: Proceedings of the 36th IEEE Symposium on Security and Privacy, vol. 15. IEEE (2014)Google Scholar
  9. 9.
    Fournet, C., Kohlweiss, M., Danezis, G., Luo, Z.: ZQL: a compiler for privacy-preserving data processing. In: USENIX Security, pp. 163–178 (2013)Google Scholar
  10. 10.
    Fredrikson, M., Livshits, B.: ZØ: an optimizing distributing zero-knowledge compiler. In: USENIX Security (2014)Google Scholar
  11. 11.
    Gennaro, R., Gentry, C., Parno, B., Raykova, M.: Quadratic span programs and succinct NIZKs without PCPs. In: Johansson, T., Nguyen, P.Q. (eds.) EUROCRYPT 2013. LNCS, vol. 7881, pp. 626–645. Springer, Heidelberg (2013). CrossRefGoogle Scholar
  12. 12.
    GHC Team. The glorious Glasgow Haskell compilation system user’s guide (2005)Google Scholar
  13. 13.
    Goldwasser, S., Micali, S., Rackoff, C.: The knowledge complexity of interactive proof-systems. In: Proceedings of the Seventeenth Annual ACM Symposium on Theory of Computing, pp. 291–304. ACM (1985)Google Scholar
  14. 14.
    Mainland, G., Morrisett, G., Welsh, M.: Flask: staged functional programming for sensor networks. In: ICFP 2008 (2008)Google Scholar
  15. 15.
    O’Sullivan, B.: The Criterion library. Accessed 23 Sep 2015
  16. 16.
    Parno, B., Howell, J., Gentry, C., Raykova, M.: Pinocchio: nearly practical verifiable computation. In: Proceedings of the 35th IEEE Symposium on Security and Privacy, pp. 238–252. IEEE (2013)Google Scholar
  17. 17.
    Serrano, A., Hage, J.: Type error diagnosis for embedded DSLs by two-stage specialized type rules. In: Thiemann, P. (ed.) ESOP 2016. LNCS, vol. 9632, pp. 672–698. Springer, Heidelberg (2016). CrossRefGoogle Scholar
  18. 18.
    Setty, S.T., et al.: Taking proof-based verified computation a few steps closer to practicality. In: USENIX Security (2012)Google Scholar
  19. 19.
    Setty, S.T., McPherson, R., Blumberg, A.J., Walfish, M.: Making argument systems for outsourced computation practical (sometimes). In: NDSS (2012)Google Scholar
  20. 20.
    Taha, W., Sheard, T.: Multi-stage programming with explicit annotations. In: PEPM (1997)Google Scholar
  21. 21.
    Wahby, R.S., Setty, S., Ren, Z., Blumberg, A.J., Walfish, M.: Efficient RAM and control flow in verifiable outsourced computation. In: NDSS (2015)Google Scholar
  22. 22.
    Walfish, M., Blumberg, A.J.: Verifying computations without reexecuting them. CACM 58(2), 74–84 (2015)CrossRefGoogle Scholar
  23. 23.
    Xi, H., Chen, C., Chen, G.: Guarded recursive datatype constructors. In: POPL, pp. 224–235. ACM (2003)Google Scholar

Copyright information

© Springer International Publishing AG 2018

Authors and Affiliations

  1. 1.Ohio UniversityAthensUSA

Personalised recommendations