skip to main content
10.1145/2951913.2951941acmconferencesArticle/Chapter ViewAbstractPublication PagesicfpConference Proceedingsconference-collections
research-article
Public Access

Fully abstract compilation via universal embedding

Published:04 September 2016Publication History

ABSTRACT

A fully abstract compiler guarantees that two source components are observationally equivalent in the source language if and only if their translations are observationally equivalent in the target. Full abstraction implies the translation is secure: target-language attackers can make no more observations of a compiled component than a source-language attacker interacting with the original source component. Proving full abstraction for realistic compilers is challenging because realistic target languages contain features (such as control effects) unavailable in the source, while proofs of full abstraction require showing that every target context to which a compiled component may be linked can be back-translated to a behaviorally equivalent source context.

We prove the first full abstraction result for a translation whose target language contains exceptions, but the source does not. Our translation---specifically, closure conversion of simply typed λ-calculus with recursive types---uses types at the target level to ensure that a compiled component is never linked with attackers that have more distinguishing power than source-level attackers. We present a new back-translation technique based on a shallow embedding of the target language into the source language at a dynamic type. Then boundaries are inserted that mediate terms between the untyped embedding and the strongly-typed source. This technique allows back-translating non-terminating programs, target features that are untypeable in the source, and well-bracketed effects.

References

  1. M. Abadi. Protection in programming-language translations. In International Colloquium on Automata, Languages and Programming (ICALP), pages 868–883, 1998. Google ScholarGoogle ScholarDigital LibraryDigital Library
  2. M. Abadi and G. Plotkin. On protection by layout randomization. ACM Transactions on Information and Systems Security, 15(2), July 2012. Google ScholarGoogle ScholarDigital LibraryDigital Library
  3. P. Agten, R. Strackx, B. Jacobs, and F. Piessens. Secure compilation to modern processors. In Computer Security Foundations Symposium (CSF), pages 171–185, 2012. Google ScholarGoogle ScholarDigital LibraryDigital Library
  4. A. Ahmed. Step-indexed syntactic logical relations for recursive and quantified types. In European Symposium on Programming (ESOP), pages 69–83, Mar. 2006. Google ScholarGoogle ScholarDigital LibraryDigital Library
  5. A. Ahmed. Verified Compilers for a Multi-Language World. In T. Ball, R. Bodik, S. Krishnamurthi, B. S. Lerner, and G. Morrisett, editors, 1st Summit on Advances in Programming Languages (SNAPL 2015), volume 32 of Leibniz International Proceedings in Informatics (LIPIcs), pages 15–31, 2015.Google ScholarGoogle Scholar
  6. A. Ahmed and M. Blume. Typed closure conversion preserves observational equivalence. In International Conference on Functional Programming (ICFP), Victoria, British Columbia, Canada, pages 157– 168, Sept. 2008. Google ScholarGoogle ScholarDigital LibraryDigital Library
  7. A. Ahmed and M. Blume. An equivalence-preserving CPS translation via multi-language semantics. In International Conference on Functional Programming (ICFP), Tokyo, Japan, pages 431–444, Sept. 2011. Google ScholarGoogle ScholarDigital LibraryDigital Library
  8. N. Benton. Embedded interpreters. Journal of Functional Programming, 15(04):503–542, 2005. Google ScholarGoogle ScholarDigital LibraryDigital Library
  9. N. Benton and A. Kennedy. Exceptional syntax. Journal of Functional Programming, 11(04):395–410, 2001. Google ScholarGoogle ScholarDigital LibraryDigital Library
  10. N. Benton, A. Kennedy, and G. Russell. Compiling Standard ML to Java bytecodes. In International Conference on Functional Programming (ICFP), Baltimore, Maryland, USA, pages 129–140, 1998. Google ScholarGoogle ScholarDigital LibraryDigital Library
  11. W. J. Bowman and A. Ahmed. Noninterference for free. In International Conference on Functional Programming (ICFP), Vancouver, British Columbia, Canada, 2015. Google ScholarGoogle ScholarDigital LibraryDigital Library
  12. D. Devriese, M. Patrignani, and F. Piessens. Fully-abstract compilation by approximate back-translation. In ACM Symposium on Principles of Programming Languages (POPL), St. Petersburg, Florida, page To appear, 2016. Google ScholarGoogle ScholarDigital LibraryDigital Library
  13. D. Dreyer, G. Neis, and L. Birkedal. The impact of higher-order state and control effects on local relational reasoning. Journal of Functional Programming, 22(4&5):477–528, 2012. Google ScholarGoogle ScholarDigital LibraryDigital Library
  14. V. D’Silva, M. Payer, and D. Song. The correctness-security gap in compiler optmization. In Language-theoretic Security IEEE Security and Privacy Workshop (LangSec), 2015. Google ScholarGoogle ScholarDigital LibraryDigital Library
  15. M. Felleisen and R. Hieb. A revised report on the syntactic theories of sequential control and state. Theor. Comput. Sci., 103(2):235–271, 1992. Google ScholarGoogle ScholarDigital LibraryDigital Library
  16. C. Fournet, N. Swamy, J. Chen, P.-E. Dagand, P.-Y. Strub, and B. Livshits. Fully abstract compilation to JavaScript. In ACM Symposium on Principles of Programming Languages (POPL), Rome, Italy, pages 371–384, 2013. Google ScholarGoogle ScholarDigital LibraryDigital Library
  17. N. Glew. Object closure conversion. In Higher-Order Operational Techniques in Semantics (HOOTS ’99), Sept. 1999.Google ScholarGoogle Scholar
  18. R. Jagadeesan, C. Pitcher, J. Rathke, and J. Riely. Local memory via layout randomization. In Computer Security Foundations Symposium (CSF), pages 161–174, 2011. Google ScholarGoogle ScholarDigital LibraryDigital Library
  19. A. Jeffrey. A fully abstract semantics for a concurrent functional language with monadic types. In IEEE Symposium on Logic in Computer Science (LICS), San Diego, California, 1995. Google ScholarGoogle ScholarDigital LibraryDigital Library
  20. J. Kang, Y. Kim, C.-K. Hur, D. Dreyer, and V. Vafeiadis. Lightweight verification of separate compilation. In ACM Symposium on Principles of Programming Languages (POPL), St. Petersburg, Florida, pages 178–190. ACM, 2016. Google ScholarGoogle ScholarDigital LibraryDigital Library
  21. A. Kennedy. Securing the .NET programming model. Theoretical Computer Science, 364(3):311–317, 2006. Google ScholarGoogle ScholarDigital LibraryDigital Library
  22. J.-L. Krivine. Classical logic, storage operators and second-order lambda-calculus. Annals of Pure and Applied Logic, 68(1):53–78, 1994.Google ScholarGoogle ScholarCross RefCross Ref
  23. J. R. Longley. Universal types and what they are good for. In Domain theory, logic and computation, pages 25–63. Springer, 2003.Google ScholarGoogle Scholar
  24. J. Matthews and R. B. Findler. Operational semantics for multilanguage programs. In ACM Symposium on Principles of Programming Languages (POPL), Nice, France, pages 3–10, Jan. 2007. Google ScholarGoogle ScholarDigital LibraryDigital Library
  25. A. Meyer and J. G. Riecke. Continuations may be unreasonable. In Conf. on LISP and functional programming, LFP ’88, pages 63–71, 1988. Google ScholarGoogle ScholarDigital LibraryDigital Library
  26. Y. Minamide, G. Morrisett, and R. Harper. Typed closure conversion. In ACM Symposium on Principles of Programming Languages (POPL), St. Petersburg Beach, Florida, pages 271–283, Jan. 1996. Google ScholarGoogle ScholarDigital LibraryDigital Library
  27. G. Neis, C.-K. Hur, J.-O. Kaiser, C. McLaughlin, D. Dreyer, and V. Vafeiadis. Pilsner: A compositionally verified compiler for a higherorder imperative language. In International Conference on Functional Programming (ICFP), Vancouver, British Columbia, Canada, Aug. 2015. Google ScholarGoogle ScholarDigital LibraryDigital Library
  28. M. New, W. J. Bowman, and A. Ahmed. Fully abstract compilation via universal embeddding (technical appendix). July 2016.Google ScholarGoogle Scholar
  29. M. Patrignani, D. Clarke, and F. Piessens. Secure compilation of objectoriented components to protected module architectures. In Proceedings of the 11th Asian Symposium on Programming Languages and Systems (APLAS), Melbourne, Australia, Dec. 2013. Google ScholarGoogle ScholarDigital LibraryDigital Library
  30. M. Patrignani, P. Agten, R. Strackx, B. Jacobs, D. Clarke, and F. Piessens. Secure compilation to protected module architectures. ACM Transactions on Programming Languages and Systems, 37(2): 6:1–6:50, Apr. 2015. Google ScholarGoogle ScholarDigital LibraryDigital Library
  31. J. T. Perconti and A. Ahmed. Verifying an open compiler using multilanguage semantics. In European Symposium on Programming (ESOP), Apr. 2014. Google ScholarGoogle ScholarDigital LibraryDigital Library
  32. A. M. Pitts and I. D. Stark. Operational reasoning for functions with local state. Higher order operational techniques in semantics, pages 227–273, 1998. Google ScholarGoogle ScholarDigital LibraryDigital Library
  33. N. Ramsey. Embedding an interpreted language using higher-order functions and types. Journal of Functional Programming, 21(06): 585–615, 2011. Google ScholarGoogle ScholarDigital LibraryDigital Library
  34. J. G. Riecke. Fully abstract translations between functional languages. In ACM Symposium on Principles of Programming Languages (POPL), Orlando, Florida, pages 245–254, 1991. Google ScholarGoogle ScholarDigital LibraryDigital Library
  35. S. B. Sanjabi and C.-H. L. Ong. Fully abstract semantics of additive aspects by translation. In Proceedings of the 6th international conference on Aspect-oriented software development (AOSD), pages 135–148, 2007. Google ScholarGoogle ScholarDigital LibraryDigital Library
  36. D. Scott. Data types as lattices. Siam Journal on computing, 5(3): 522–587, 1976.Google ScholarGoogle Scholar
  37. N. Shikuma and A. Igarashi. Proving noninterference by a fully complete translation to the simply typed λ-calculus. In Proceedings of the 11th Asian computing science conference on Advances in computer science: secure software and related issues, pages 301–315. Springer-Verlag, 2007. Google ScholarGoogle ScholarDigital LibraryDigital Library
  38. N. Shikuma and A. Igarashi. Proving noninterference by a fully complete translation to the simply typed λ-calculus. Logical Methods in Computer Science, 4(3:10):1–31, 2008.Google ScholarGoogle Scholar
  39. G. Stewart, L. Beringer, S. Cuellar, and A. W. Appel. Compositional compcert. In ACM Symposium on Principles of Programming Languages (POPL), Mumbai, India, 2015. Google ScholarGoogle ScholarDigital LibraryDigital Library
  40. S. Tse and S. Zdancewic. Translating dependency into parametricity. In International Conference on Functional Programming (ICFP), Snowbird, Utah, pages 115–125. ACM, 2004. Google ScholarGoogle ScholarDigital LibraryDigital Library
  41. P. Wang, S. Cuellar, and A. Chlipala. Compiler verification meets cross-language linking via data abstraction. In ACM Symposium on Object Oriented Programming: Systems, Languages, and Applications (OOPSLA), Oct. 2014. Google ScholarGoogle ScholarDigital LibraryDigital Library

Index Terms

  1. Fully abstract compilation via universal embedding

      Recommendations

      Comments

      Login options

      Check if you have access through your login credentials or your institution to get full access on this article.

      Sign in

      PDF Format

      View or Download as a PDF file.

      PDF

      eReader

      View online with eReader.

      eReader