Hostname: page-component-6766d58669-6mz5d Total loading time: 0 Render date: 2026-05-15T11:00:56.900Z Has data issue: false hasContentIssue false

Secure distributed programming with value-dependent types

Published online by Cambridge University Press:  29 October 2013

NIKHIL SWAMY
Affiliation:
Microsoft Research (e-mail: nswamy@microsoft.com, juanchen@microsoft.com, fournet@microsoft.com)
JUAN CHEN
Affiliation:
Microsoft Research (e-mail: nswamy@microsoft.com, juanchen@microsoft.com, fournet@microsoft.com)
CÉDRIC FOURNET
Affiliation:
Microsoft Research (e-mail: nswamy@microsoft.com, juanchen@microsoft.com, fournet@microsoft.com)
PIERRE-YVES STRUB
Affiliation:
MSR-INRIA (e-mail: pierre-yves@strub.nu)
KARTHIKEYAN BHARGAVAN
Affiliation:
INRIA (e-mail: karthikeyan.bhargavan@inria.fr)
JEAN YANG
Affiliation:
MIT (e-mail: jeanyang@csail.mit.edu)
Rights & Permissions [Opens in a new window]

Abstract

Core share and HTML view are not available for this content. However, as you have access to this content, a full PDF is available via the 'Save PDF' action button.

Distributed applications are difficult to program reliably and securely. Dependently typed functional languages promise to prevent broad classes of errors and vulnerabilities, and to enable program verification to proceed side-by-side with development. However, as recursion, effects, and rich libraries are added, using types to reason about programs, specifications, and proofs becomes challenging. We present F*, a full-fledged design and implementation of a new dependently typed language for secure distributed programming. Our language provides arbitrary recursion while maintaining a logically consistent core; it enables modular reasoning about state and other effects using affine types; and it supports proofs of refinement properties using a mixture of cryptographic evidence and logical proof terms. The key mechanism is a new kind system that tracks several sub-languages within F* and controls their interaction. F* subsumes two previous languages, F7 and Fine. We prove type soundness (with proofs mechanized in Coq) and logical consistency for F*. We have implemented a compiler that translates F* to .NET bytecode, based on a prototype for Fine. F* provides access to libraries for concurrency, networking, cryptography, and interoperability with C#, F#, and the other .NET languages. The compiler produces verifiable binaries with 60% code size overhead for proofs and types, as much as a 45x improvement over the Fine compiler, while still enabling efficient bytecode verification. We have programmed and verified nearly 50,000 lines of F* including new schemes for multi-party sessions; a zero-knowledge privacy-preserving payment protocol; a provenance-aware curated database; a suite of web-browser extensions verified for authorization properties; a cloud-hosted multi-tier web application with a verified reference monitor; the core F* typechecker itself; and programs translated to F* from other languages such as F7 and JavaScript.

Information

Type
Articles
Copyright
Copyright © Cambridge University Press 2013 
Submit a response

Discussions

No Discussions have been published for this article.