{"id":559317,"date":"2019-01-14T09:00:34","date_gmt":"2019-01-14T17:00:34","guid":{"rendered":"https:\/\/www.microsoft.com\/en-us\/research\/?p=559317"},"modified":"2020-06-08T10:20:12","modified_gmt":"2020-06-08T17:20:12","slug":"project-everest-reaching-greater-heights-in-internet-communication-security","status":"publish","type":"post","link":"https:\/\/www.microsoft.com\/en-us\/research\/blog\/project-everest-reaching-greater-heights-in-internet-communication-security\/","title":{"rendered":"Project Everest: Reaching greater heights in internet communication security"},"content":{"rendered":"<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-large wp-image-559323\" src=\"https:\/\/www.microsoft.com\/en-us\/research\/wp-content\/uploads\/2019\/01\/Project_Everest_Blog_Site_1400x788-1024x576.png\" alt=\"\" width=\"1024\" height=\"576\" srcset=\"https:\/\/www.microsoft.com\/en-us\/research\/wp-content\/uploads\/2019\/01\/Project_Everest_Blog_Site_1400x788-1024x576.png 1024w, https:\/\/www.microsoft.com\/en-us\/research\/wp-content\/uploads\/2019\/01\/Project_Everest_Blog_Site_1400x788-300x169.png 300w, https:\/\/www.microsoft.com\/en-us\/research\/wp-content\/uploads\/2019\/01\/Project_Everest_Blog_Site_1400x788-768x432.png 768w, https:\/\/www.microsoft.com\/en-us\/research\/wp-content\/uploads\/2019\/01\/Project_Everest_Blog_Site_1400x788-1066x600.png 1066w, https:\/\/www.microsoft.com\/en-us\/research\/wp-content\/uploads\/2019\/01\/Project_Everest_Blog_Site_1400x788-655x368.png 655w, https:\/\/www.microsoft.com\/en-us\/research\/wp-content\/uploads\/2019\/01\/Project_Everest_Blog_Site_1400x788-343x193.png 343w, https:\/\/www.microsoft.com\/en-us\/research\/wp-content\/uploads\/2019\/01\/Project_Everest_Blog_Site_1400x788.png 1400w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/p>\n<p><em><a class=\"msr-external-link glyph-append glyph-append-open-in-new-tab glyph-append-xsmall\" rel=\"noopener noreferrer\" target=\"_blank\" href=\"https:\/\/project-everest.github.io\/\">Project Everest<span class=\"sr-only\"> (opens in new tab)<\/span><\/a> is a multiyear collaborative effort focused on building a verified, secure communications stack designed to improve the security of HTTPS, a key internet safeguard. This post, about the verification tools and techniques the Everest team is using and developing, is the first in a series exploring the groundbreaking work, which is available on <a class=\"msr-external-link glyph-append glyph-append-open-in-new-tab glyph-append-xsmall\" rel=\"noopener noreferrer\" target=\"_blank\" href=\"https:\/\/github.com\/project-everest\">GitHub<span class=\"sr-only\"> (opens in new tab)<\/span><\/a> now.<\/em><\/p>\n<p>Wouldn\u2019t it be great if a message you sent to your bank over the internet was guaranteed to be safe from tampering and readable only by your financial institution? Project Everest is building software that provides such a guarantee as a <em>theorem<\/em> about the <em>code<\/em> that implements a secure communication protocol deployed in web browsers and servers everywhere.<\/p>\n<p>\u201cProving theorems about programs has been a dream of computer science for the last 60 years or more, and we\u2019re finally able to do this at the scale required for an important, widely deployed security-critical piece of software,\u201d says <a href=\"https:\/\/www.microsoft.com\/en-us\/research\/people\/nswamy\/\">Microsoft Senior Researcher Nik Swamy<\/a>, a member of the Project Everest team.<\/p>\n<p>The security of internet communications crucially depends on a variety of cryptographic algorithms and protocols. The most widely used among these falls under the umbrella of the <a class=\"msr-external-link glyph-append glyph-append-open-in-new-tab glyph-append-xsmall\" rel=\"noopener noreferrer\" target=\"_blank\" href=\"https:\/\/datatracker.ietf.org\/doc\/rfc8446\/\">Transport Layer Security (TLS) protocol<span class=\"sr-only\"> (opens in new tab)<\/span><\/a>. TLS is used for secure web browsing via HTTPS, email, Voice over IP, instant messaging, and many other kinds of communication. Unfortunately, TLS and its many implementations have been <a class=\"msr-external-link glyph-append glyph-append-open-in-new-tab glyph-append-xsmall\" rel=\"noopener noreferrer\" target=\"_blank\" href=\"https:\/\/tools.ietf.org\/html\/rfc7457\">attacked repeatedly<span class=\"sr-only\"> (opens in new tab)<\/span><\/a> over its 25-year history.<\/p>\n<p><a class=\"msr-external-link glyph-append glyph-append-open-in-new-tab glyph-append-xsmall\" rel=\"noopener noreferrer\" target=\"_blank\" href=\"https:\/\/project-everest.github.io\/\">Project Everest<span class=\"sr-only\"> (opens in new tab)<\/span><\/a> is an ongoing collaboration started in 2016 with researchers from <a href=\"https:\/\/www.microsoft.com\/en-us\/research\/lab\/microsoft-research-redmond\/\">Microsoft Research Redmond<\/a>, <a href=\"https:\/\/www.microsoft.com\/en-us\/research\/lab\/microsoft-research-cambridge\/\">Microsoft Research Cambridge<\/a>, <a href=\"https:\/\/www.microsoft.com\/en-us\/research\/lab\/microsoft-research-india\/\">Microsoft Research India<\/a>, the <a class=\"msr-external-link glyph-append glyph-append-open-in-new-tab glyph-append-xsmall\" rel=\"noopener noreferrer\" target=\"_blank\" href=\"https:\/\/www.msr-inria.fr\/\">Microsoft Research-Inria Joint Centre<span class=\"sr-only\"> (opens in new tab)<\/span><\/a> in Paris, <a class=\"msr-external-link glyph-append glyph-append-open-in-new-tab glyph-append-xsmall\" rel=\"noopener noreferrer\" target=\"_blank\" href=\"http:\/\/prosecco.gforge.inria.fr\/\">Inria<span class=\"sr-only\"> (opens in new tab)<\/span><\/a>, <a class=\"msr-external-link glyph-append glyph-append-open-in-new-tab glyph-append-xsmall\" rel=\"noopener noreferrer\" target=\"_blank\" href=\"http:\/\/www.andrew.cmu.edu\/user\/bparno\/\">Carnegie Mellon University<span class=\"sr-only\"> (opens in new tab)<\/span><\/a>, and <a class=\"msr-external-link glyph-append glyph-append-open-in-new-tab glyph-append-xsmall\" rel=\"noopener noreferrer\" target=\"_blank\" href=\"https:\/\/homepages.inf.ed.ac.uk\/mkohlwei\/\">The University of Edinburgh<span class=\"sr-only\"> (opens in new tab)<\/span><\/a>. Growing out of several prior Microsoft Research projects, including <a href=\"https:\/\/www.microsoft.com\/en-us\/research\/project\/ironclad\/\">Ironclad<\/a>, <a class=\"msr-external-link glyph-append glyph-append-open-in-new-tab glyph-append-xsmall\" rel=\"noopener noreferrer\" target=\"_blank\" href=\"https:\/\/www.mitls.org\/\">miTLS<span class=\"sr-only\"> (opens in new tab)<\/span><\/a>, and <a class=\"msr-external-link glyph-append glyph-append-open-in-new-tab glyph-append-xsmall\" rel=\"noopener noreferrer\" target=\"_blank\" href=\"https:\/\/fstar-lang.org\/\">F*<span class=\"sr-only\"> (opens in new tab)<\/span><\/a>, Everest aims to develop and deploy efficient, verified, open-source implementations of the entire TLS stack and related protocols, formally reducing the security of the code to the assumptions about the <a class=\"msr-external-link glyph-append glyph-append-open-in-new-tab glyph-append-xsmall\" rel=\"noopener noreferrer\" target=\"_blank\" href=\"https:\/\/en.wikipedia.org\/wiki\/Computational_hardness_assumption\">hardness of certain cryptographic problems<span class=\"sr-only\"> (opens in new tab)<\/span><\/a>.<\/p>\n<p>For <a href=\"https:\/\/www.microsoft.com\/en-us\/research\/people\/protz\/\">Jonathan Protzenko<\/a>, a Microsoft researcher on the Everest team, the project\u2019s open collaboration is special.<\/p>\n<p>\u201cEverest makes for a tight interaction between industrial and academic research,\u201d he says. \u201cOur members frequently visit each other, co-author papers together, and send students from one institution to the other over the summer. Several of our members studied at or later moved to these institutions. In that sense, for me, Project Everest truly represents the ideal of open, collaborative research.\u201d<\/p>\n<p>Project Everest is halfway through its projected five-year arc, and its verified components are beginning to replace the current infrastructure with proven, secure software. For instance, Everest\u2019s <a class=\"msr-external-link glyph-append glyph-append-open-in-new-tab glyph-append-xsmall\" rel=\"noopener noreferrer\" target=\"_blank\" href=\"https:\/\/github.com\/project-everest\/hacl-star\">HACL*<span class=\"sr-only\"> (opens in new tab)<\/span><\/a> library provides verified cryptographic primitives for <a class=\"msr-external-link glyph-append glyph-append-open-in-new-tab glyph-append-xsmall\" rel=\"noopener noreferrer\" target=\"_blank\" href=\"https:\/\/blog.mozilla.org\/security\/2017\/09\/13\/verified-cryptography-firefox-57\/\">Mozilla Firefox<span class=\"sr-only\"> (opens in new tab)<\/span><\/a>, for the <a class=\"msr-external-link glyph-append glyph-append-open-in-new-tab glyph-append-xsmall\" rel=\"noopener noreferrer\" target=\"_blank\" href=\"https:\/\/www.wireguard.com\/formal-verification\/#verified-c-implementation-of-curve25519\">WireGuard VPN<span class=\"sr-only\"> (opens in new tab)<\/span><\/a>, and for the <a class=\"msr-external-link glyph-append glyph-append-open-in-new-tab glyph-append-xsmall\" rel=\"noopener noreferrer\" target=\"_blank\" href=\"https:\/\/www.reddit.com\/r\/tezos\/comments\/8hrsz2\/tezos_switches_cryptographic_libraries_from\/\">Tezos blockchain<span class=\"sr-only\"> (opens in new tab)<\/span><\/a>. And within Microsoft, Everest\u2019s <a class=\"msr-external-link glyph-append glyph-append-open-in-new-tab glyph-append-xsmall\" rel=\"noopener noreferrer\" target=\"_blank\" href=\"https:\/\/github.com\/project-everest\/mitls-fstar\">miTLS protocol stack<span class=\"sr-only\"> (opens in new tab)<\/span><\/a> powers the primary implementation of the QUIC transport protocol. The Everest team expects to announce further deployments in the coming weeks. Meanwhile, Everest code is already open source and is developed publicly on <a class=\"msr-external-link glyph-append glyph-append-open-in-new-tab glyph-append-xsmall\" rel=\"noopener noreferrer\" target=\"_blank\" href=\"https:\/\/github.com\/project-everest\">GitHub<span class=\"sr-only\"> (opens in new tab)<\/span><\/a>.<\/p>\n<div id=\"attachment_559320\" style=\"width: 1034px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-559320\" class=\"size-large wp-image-559320\" src=\"https:\/\/www.microsoft.com\/en-us\/research\/wp-content\/uploads\/2019\/01\/5c33d2746ef61-5c33d2746ef62Everest-All-Hands-Cambridge-Sep-19-21-2018-1.jpg-1024x585.jpg\" alt=\"\" width=\"1024\" height=\"585\" srcset=\"https:\/\/www.microsoft.com\/en-us\/research\/wp-content\/uploads\/2019\/01\/5c33d2746ef61-5c33d2746ef62Everest-All-Hands-Cambridge-Sep-19-21-2018-1.jpg-1024x585.jpg 1024w, https:\/\/www.microsoft.com\/en-us\/research\/wp-content\/uploads\/2019\/01\/5c33d2746ef61-5c33d2746ef62Everest-All-Hands-Cambridge-Sep-19-21-2018-1.jpg-300x171.jpg 300w, https:\/\/www.microsoft.com\/en-us\/research\/wp-content\/uploads\/2019\/01\/5c33d2746ef61-5c33d2746ef62Everest-All-Hands-Cambridge-Sep-19-21-2018-1.jpg-768x439.jpg 768w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><p id=\"caption-attachment-559320\" class=\"wp-caption-text\"><br \/>Members of the Project Everest team are working hard for greater internet security, and their progress is tangible: Two and a half years in, their verified components are already beginning to replace the current infrastructure with proven, secure software.<\/p><\/div>\n<h3>Formal Verification of Software<\/h3>\n<p>Formal verification involves using software tools, including various kinds of theorem provers and proof assistants, to analyze <em>all<\/em> possible behaviors of a program and prove mathematically they comply with the code\u2019s specification, a machine-readable description of the developer\u2019s intentions. Once the code has been verified against its specification mechanically, based on trust in the software used to check proofs, a skeptical auditor need only study the <em>specifications<\/em> and the <em>theorem statements<\/em> proven without needing to consult the much larger programs and proofs.<\/p>\n<p>\u201cMost software built today gets tested before it is released\u2014at least one hopes it does!\u201d says Swamy. \u201cBut even the most rigorous testing can only find bugs; it cannot rule out the existence of errors. For certain kinds of software, say security-critical code like TLS, one may actually want to prove that no vulnerabilities exist. Software verification is time-consuming and requires expertise, but, unlike testing, it can actually guarantee mathematically the absence of entire classes of errors.\u201d<\/p>\n<p>For Everest programs, the team\u2019s specifications cover a range of properties, including:<\/p>\n<ul>\n<li><strong>Memory safety:<\/strong> A program never violates the memory abstractions, and, as a consequence, is free from common bugs and vulnerabilities like buffer overflows, null-pointer dereferences, use-after-frees, and double-frees.<\/li>\n<li><strong>Type safety:<\/strong> A program respects the interfaces among its components, including any abstraction boundaries. For example, one component never passes the wrong kind of parameters to another or accesses its private state.<\/li>\n<li><strong>Functional correctness:<\/strong> A program\u2019s input\/output behavior is fully characterized by a simpler mathematical function, which acts as its functional specification.<\/li>\n<li><strong>Side-channel resistance:<\/strong> Observations about the implementation\u2019s low-level behavior, such as the time it takes to execute or the memory addresses it accesses, are independent of the secrets manipulated by the program. Hence, an adversary monitoring these \u201cside-channels\u201d learns nothing about the secrets.<\/li>\n<li><strong>Cryptographic security:<\/strong> Based on cryptographic assumptions, except for negligible probability, Everest programs are indistinguishable from ideal cryptographic functionalities, the mathematical definitions that cryptographers use to capture the notion of secrecy, integrity, and secure communication.<\/li>\n<\/ul>\n<p>Formal verification can play a role throughout the software development process, from design to implementations and deployments. The value of verification is increasingly widely perceived, especially for security-critical code.<\/p>\n<p>\u201cCryptographic protocols are notoriously hard to implement correctly, with errors in both the algorithms and the protocol implementation itself being common,\u201d says Eric Rescorla, chief technology officer of Mozilla Firefox, security area director at the Internet Engineering Task Force, and the editor of the TLS standard. \u201cFormal verification tools like those developed by the Project Everest team have transformed the way we design these protocols, allowing us to move faster while having much higher confidence in protocol correctness.\u201d<\/p>\n<p>Indeed, assisted in part by their verification efforts, <a class=\"msr-external-link glyph-append glyph-append-open-in-new-tab glyph-append-xsmall\" rel=\"noopener noreferrer\" target=\"_blank\" href=\"https:\/\/github.com\/beurdouche\/\">Benjamin Beurdouche<span class=\"sr-only\"> (opens in new tab)<\/span><\/a>, <a class=\"msr-external-link glyph-append glyph-append-open-in-new-tab glyph-append-xsmall\" rel=\"noopener noreferrer\" target=\"_blank\" href=\"http:\/\/prosecco.gforge.inria.fr\/personal\/karthik\/\">Karthik Bhargavan<span class=\"sr-only\"> (opens in new tab)<\/span><\/a>, <a class=\"msr-external-link glyph-append glyph-append-open-in-new-tab glyph-append-xsmall\" rel=\"noopener noreferrer\" target=\"_blank\" href=\"http:\/\/antoine.delignat-lavaud.fr\/\">Antoine Delignat-Lavaud<span class=\"sr-only\"> (opens in new tab)<\/span><\/a>, and <a href=\"https:\/\/www.microsoft.com\/en-us\/research\/people\/fournet\/\">C\u00e9dric Fournet<\/a>, all members of Project Everest, have contributed features and fixes to the TLS standard. Beyond assisting with designs and specifications, verified implementations are also increasingly attractive for mainstream deployment.<\/p>\n<p>\u201cVerified implementations of cryptographic primitives are gradually making their way into major implementations,\u201d Rescorla adds. \u201cThe Curve25519 and ChaCha\/Poly1305 algorithms from HACL* are already running in Firefox, and I look forward to the day when we can adopt completely verified implementations.\u201d<\/p>\n<h3>F*, Low*, and Vale<\/h3>\n<p>All Everest code is programmed and verified using <a class=\"msr-external-link glyph-append glyph-append-open-in-new-tab glyph-append-xsmall\" rel=\"noopener noreferrer\" target=\"_blank\" href=\"https:\/\/fstar-lang.org\/\">F*<span class=\"sr-only\"> (opens in new tab)<\/span><\/a>, a framework that brings together three strands of research in programming languages.<\/p>\n<ul>\n<li>F* is an effectful, general-purpose higher-order programming language in the tradition of languages like <a class=\"msr-external-link glyph-append glyph-append-open-in-new-tab glyph-append-xsmall\" rel=\"noopener noreferrer\" target=\"_blank\" href=\"https:\/\/fsharp.org\/\">F#<span class=\"sr-only\"> (opens in new tab)<\/span><\/a>, <a class=\"msr-external-link glyph-append glyph-append-open-in-new-tab glyph-append-xsmall\" rel=\"noopener noreferrer\" target=\"_blank\" href=\"https:\/\/ocaml.org\/\">OCaml<span class=\"sr-only\"> (opens in new tab)<\/span><\/a>, and <a class=\"msr-external-link glyph-append glyph-append-open-in-new-tab glyph-append-xsmall\" rel=\"noopener noreferrer\" target=\"_blank\" href=\"https:\/\/www.haskell.org\/\">Haskell<span class=\"sr-only\"> (opens in new tab)<\/span><\/a>, among others.<\/li>\n<li>\u00a0F* includes a full-fledged dependent type theory and tactic framework in the tradition of proof assistants like <a class=\"msr-external-link glyph-append glyph-append-open-in-new-tab glyph-append-xsmall\" rel=\"noopener noreferrer\" target=\"_blank\" href=\"https:\/\/coq.inria.fr\/\">Coq<span class=\"sr-only\"> (opens in new tab)<\/span><\/a> and <a class=\"msr-external-link glyph-append glyph-append-open-in-new-tab glyph-append-xsmall\" rel=\"noopener noreferrer\" target=\"_blank\" href=\"http:\/\/nuprl.org\/\">Nuprl<span class=\"sr-only\"> (opens in new tab)<\/span><\/a>, allowing nearly arbitrary expressive power for conducting formal mathematical proofs.<\/li>\n<li>Like other program verifiers, including <a href=\"https:\/\/www.microsoft.com\/en-us\/research\/project\/dafny-a-language-and-program-verifier-for-functional-correctness\/\">Dafny<\/a> and <a class=\"msr-external-link glyph-append glyph-append-open-in-new-tab glyph-append-xsmall\" rel=\"noopener noreferrer\" target=\"_blank\" href=\"http:\/\/why3.lri.fr\/\">Why3<span class=\"sr-only\"> (opens in new tab)<\/span><\/a>, F* is integrated with an automated theorem prover, <a class=\"msr-external-link glyph-append glyph-append-open-in-new-tab glyph-append-xsmall\" rel=\"noopener noreferrer\" target=\"_blank\" href=\"https:\/\/github.com\/Z3Prover\/z3\">Z3<span class=\"sr-only\"> (opens in new tab)<\/span><\/a>, which can automate many of the tedious, low-level proof steps necessary to prove programs correct.<\/li>\n<\/ul>\n<p>\u201cStarting from a language in my dissertation called Fable and a language developed at Microsoft Research Cambridge called <a href=\"https:\/\/www.microsoft.com\/en-us\/research\/project\/f7-refinement-types-for-f\/\">F7<\/a>, F* has evolved repeatedly over the course of almost a decade and is now developed by a large but closely knit team of people and has become a full-fledged proof assistant,\u201d Swamy says.<\/p>\n<p>\u201cF* is unique in its use of both automated and interactive proofs, and its primitive support for effects makes it well-suited for verifying real-world software that is inherently effectful,\u201d adds <a href=\"https:\/\/www.microsoft.com\/en-us\/research\/people\/aseemr\/\">Aseem Rastogi<\/a>, a researcher at Microsoft Research India and member of the Project Everest team.<\/p>\n<p>The following simple F* program, a functionally correct implementation of Quicksort on lists, is an example of how it operates. Given a list and total order on its elements, the type of <span style=\"color: #000000;\">quicksort <\/span>on the first line asserts that the function always returns a sorted permutation of the original list.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"227\" class=\"aligncenter size-large wp-image-559341\" src=\"https:\/\/www.microsoft.com\/en-us\/research\/wp-content\/uploads\/2019\/01\/Quicksort-1024x227.png\" alt=\"let rec quicksort (l:list a) (f:total_order a) : (m:list a{sorted f m \/\\ is_permutation l m}) = match l with | [] - srcset=\"https:\/\/www.microsoft.com\/en-us\/research\/wp-content\/uploads\/2019\/01\/Quicksort-1024x227.png 1024w, https:\/\/www.microsoft.com\/en-us\/research\/wp-content\/uploads\/2019\/01\/Quicksort-300x66.png 300w, https:\/\/www.microsoft.com\/en-us\/research\/wp-content\/uploads\/2019\/01\/Quicksort-768x170.png 768w, https:\/\/www.microsoft.com\/en-us\/research\/wp-content\/uploads\/2019\/01\/Quicksort.png 1026w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/> [] | pivot::tl -> let hi, lo = partition (f pivot) tl in quicksort lo f @ pivot :: quicksort hi f\" width=\"1024\" height=\"227\" \/><\/p>\n<p>While proving purely functional code, such as <span style=\"color: #000000;\">quicksort <\/span>above, is relatively straightforward, to achieve high performance, Everest code is also programmed in two domain-specific languages embedded in F*: Low* and Vale.<\/p>\n<h3>Verifying efficient low-level code in F*<\/h3>\n<p><a class=\"msr-external-link glyph-append glyph-append-open-in-new-tab glyph-append-xsmall\" rel=\"noopener noreferrer\" target=\"_blank\" href=\"https:\/\/fstarlang.github.io\/lowstar\/html\/\">Low*<span class=\"sr-only\"> (opens in new tab)<\/span><\/a> is a subset of F* geared toward low-level programming with explicit memory management. Low* programs are extracted to idiomatic C code by a tool called <a class=\"msr-external-link glyph-append glyph-append-open-in-new-tab glyph-append-xsmall\" rel=\"noopener noreferrer\" target=\"_blank\" href=\"https:\/\/github.com\/FStarLang\/kremlin\">KReMLin<span class=\"sr-only\"> (opens in new tab)<\/span><\/a> and run without garbage collection, reference counting, or any other automated memory management strategy. The HACL* library and Everest\u2019s <a class=\"msr-external-link glyph-append glyph-append-open-in-new-tab glyph-append-xsmall\" rel=\"noopener noreferrer\" target=\"_blank\" href=\"https:\/\/eprint.iacr.org\/2016\/1178\">verified implementation of the TLS-1.3 record layer<span class=\"sr-only\"> (opens in new tab)<\/span><\/a> are programmed and verified in Low*.<\/p>\n<p>For various cryptographic primitives, peak performance can only be obtained by going still lower level and programming in assembly language, often taking advantage of specialized hardware instructions, such as <a class=\"msr-external-link glyph-append glyph-append-open-in-new-tab glyph-append-xsmall\" rel=\"noopener noreferrer\" target=\"_blank\" href=\"https:\/\/software.intel.com\/en-us\/node\/256280\">Intel AES-NI<span class=\"sr-only\"> (opens in new tab)<\/span><\/a>. <a class=\"msr-external-link glyph-append glyph-append-open-in-new-tab glyph-append-xsmall\" rel=\"noopener noreferrer\" target=\"_blank\" href=\"https:\/\/github.com\/project-everest\/vale\">Vale<span class=\"sr-only\"> (opens in new tab)<\/span><\/a> stands for \u201cVerified Assembly Language for Everest\u201d and provides a domain-specific language for writing and verifying assembly programs targeting different platforms, like Windows, MacOS, and Linux, and architectures, like x86, x64, and ARM. It also supports multiple verification systems for carrying out proofs, including F* and Dafny.<\/p>\n<p>The <a class=\"msr-external-link glyph-append glyph-append-open-in-new-tab glyph-append-xsmall\" rel=\"noopener noreferrer\" target=\"_blank\" href=\"https:\/\/popl19.sigplan.org\/\">2019 Symposium on Principles of Programming Languages (POPL)<span class=\"sr-only\"> (opens in new tab)<\/span><\/a> features a <a href=\"https:\/\/www.microsoft.com\/en-us\/research\/publication\/a-verified-efficient-embedding-of-a-verifiable-assembly-language\/\">paper on Vale<\/a>. \u201cA Verified, Efficient Embedding of a Verifiable Assembly Language\u201d describes how the Everest team embedded Vale in F*, making use of F*\u2019s dependent type system and its computational capabilities to implement an efficient verification condition generator for embedded assembly programs. Using Vale in F*, the Everest team reports on the first provably correct implementation of <a class=\"msr-external-link glyph-append glyph-append-open-in-new-tab glyph-append-xsmall\" rel=\"noopener noreferrer\" target=\"_blank\" href=\"https:\/\/csrc.nist.gov\/publications\/detail\/sp\/800-38d\/final\">AES-GCM<span class=\"sr-only\"> (opens in new tab)<\/span><\/a>, a cryptographic routine used by 90 percent of secure internet traffic.<\/p>\n<h3>What\u2019s next?<\/h3>\n<p>In addition to the <a class=\"msr-external-link glyph-append glyph-append-open-in-new-tab glyph-append-xsmall\" rel=\"noopener noreferrer\" target=\"_blank\" href=\"https:\/\/github.com\/project-everest\">availability of Everest components on GitHub<span class=\"sr-only\"> (opens in new tab)<\/span><\/a>, the team is planning the first integrated release of Everest\u2019s verified stack, its libraries, and its verification tools for early summer 2019.<\/p>\n<p>\u201cWorking at the intersection of systems, networking, cryptography, programming languages, and program verification, Everest is unique in that it co-develops verified software with the tools and techniques needed to build it,\u201d says Swamy. \u201cBut we\u2019re also looking beyond our specific goals for TLS to apply our verification technology to other areas.\u201d<\/p>\n<p>For instance, the Everest team is also working on verifying implementations of <a href=\"https:\/\/www.microsoft.com\/en-us\/research\/blog\/cryptography-for-the-post-quantum-world-with-dr-brian-lamacchia\/\">post-quantum cryptography<\/a> and proving the security of key components used in high-assurance <a class=\"msr-external-link glyph-append glyph-append-open-in-new-tab glyph-append-xsmall\" rel=\"noopener noreferrer\" target=\"_blank\" href=\"https:\/\/azure.microsoft.com\/en-us\/blog\/announcing-microsoft-s-coco-framework-for-enterprise-blockchain-networks\/\">enterprise blockchains<span class=\"sr-only\"> (opens in new tab)<\/span><\/a>.<\/p>\n<p>Spanning four continents and 12 time zones, the Everest team works around the clock trying to build a more secure internet. There\u2019s still a long way to go to the summit, but halfway through the project, the team has learned a lot and has put down footholds to make it easier to build provably secure software at scale.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Project Everest is a multiyear collaborative effort focused on building a verified, secure communications stack designed to improve the security of HTTPS, a key internet safeguard. This post, about the verification tools and techniques the Everest team is using and developing, is the first in a series exploring the groundbreaking work, which is available on [&hellip;]<\/p>\n","protected":false},"author":37074,"featured_media":560244,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"msr-url-field":"","msr-podcast-episode":"","msrModifiedDate":"","msrModifiedDateEnabled":false,"ep_exclude_from_search":false,"_classifai_error":"","msr-author-ordering":[],"msr_hide_image_in_river":0,"footnotes":""},"categories":[194487,194489],"tags":[],"research-area":[13560],"msr-region":[],"msr-event-type":[],"msr-locale":[268875],"msr-post-option":[],"msr-impact-theme":[],"msr-promo-type":[],"msr-podcast-series":[],"class_list":["post-559317","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-privacy","category-security","msr-research-area-programming-languages-software-engineering","msr-locale-en_us"],"msr_event_details":{"start":"","end":"","location":""},"podcast_url":"","podcast_episode":"","msr_research_lab":[],"msr_impact_theme":[],"related-publications":[],"related-downloads":[],"related-videos":[],"related-academic-programs":[],"related-groups":[144812,144927,663087],"related-projects":[235367],"related-events":[558255],"related-researchers":[],"msr_type":"Post","featured_image_thumbnail":"<img width=\"960\" height=\"540\" src=\"https:\/\/www.microsoft.com\/en-us\/research\/wp-content\/uploads\/2019\/01\/Project_Everest_Blog_Site_1400x788-5c3cc1477b0f5.png\" class=\"img-object-cover\" alt=\"\" decoding=\"async\" loading=\"lazy\" srcset=\"https:\/\/www.microsoft.com\/en-us\/research\/wp-content\/uploads\/2019\/01\/Project_Everest_Blog_Site_1400x788-5c3cc1477b0f5.png 1400w, https:\/\/www.microsoft.com\/en-us\/research\/wp-content\/uploads\/2019\/01\/Project_Everest_Blog_Site_1400x788-5c3cc1477b0f5-300x169.png 300w, https:\/\/www.microsoft.com\/en-us\/research\/wp-content\/uploads\/2019\/01\/Project_Everest_Blog_Site_1400x788-5c3cc1477b0f5-768x432.png 768w, https:\/\/www.microsoft.com\/en-us\/research\/wp-content\/uploads\/2019\/01\/Project_Everest_Blog_Site_1400x788-5c3cc1477b0f5-1024x576.png 1024w, https:\/\/www.microsoft.com\/en-us\/research\/wp-content\/uploads\/2019\/01\/Project_Everest_Blog_Site_1400x788-5c3cc1477b0f5-1066x600.png 1066w, https:\/\/www.microsoft.com\/en-us\/research\/wp-content\/uploads\/2019\/01\/Project_Everest_Blog_Site_1400x788-5c3cc1477b0f5-655x368.png 655w, https:\/\/www.microsoft.com\/en-us\/research\/wp-content\/uploads\/2019\/01\/Project_Everest_Blog_Site_1400x788-5c3cc1477b0f5-343x193.png 343w\" sizes=\"auto, (max-width: 960px) 100vw, 960px\" \/>","byline":"","formattedDate":"January 14, 2019","formattedExcerpt":"Project Everest is a multiyear collaborative effort focused on building a verified, secure communications stack designed to improve the security of HTTPS, a key internet safeguard. This post, about the verification tools and techniques the Everest team is using and developing, is the first in&hellip;","locale":{"slug":"en_us","name":"English","native":"","english":"English"},"_links":{"self":[{"href":"https:\/\/www.microsoft.com\/en-us\/research\/wp-json\/wp\/v2\/posts\/559317","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.microsoft.com\/en-us\/research\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.microsoft.com\/en-us\/research\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.microsoft.com\/en-us\/research\/wp-json\/wp\/v2\/users\/37074"}],"replies":[{"embeddable":true,"href":"https:\/\/www.microsoft.com\/en-us\/research\/wp-json\/wp\/v2\/comments?post=559317"}],"version-history":[{"count":10,"href":"https:\/\/www.microsoft.com\/en-us\/research\/wp-json\/wp\/v2\/posts\/559317\/revisions"}],"predecessor-version":[{"id":576771,"href":"https:\/\/www.microsoft.com\/en-us\/research\/wp-json\/wp\/v2\/posts\/559317\/revisions\/576771"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.microsoft.com\/en-us\/research\/wp-json\/wp\/v2\/media\/560244"}],"wp:attachment":[{"href":"https:\/\/www.microsoft.com\/en-us\/research\/wp-json\/wp\/v2\/media?parent=559317"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.microsoft.com\/en-us\/research\/wp-json\/wp\/v2\/categories?post=559317"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.microsoft.com\/en-us\/research\/wp-json\/wp\/v2\/tags?post=559317"},{"taxonomy":"msr-research-area","embeddable":true,"href":"https:\/\/www.microsoft.com\/en-us\/research\/wp-json\/wp\/v2\/research-area?post=559317"},{"taxonomy":"msr-region","embeddable":true,"href":"https:\/\/www.microsoft.com\/en-us\/research\/wp-json\/wp\/v2\/msr-region?post=559317"},{"taxonomy":"msr-event-type","embeddable":true,"href":"https:\/\/www.microsoft.com\/en-us\/research\/wp-json\/wp\/v2\/msr-event-type?post=559317"},{"taxonomy":"msr-locale","embeddable":true,"href":"https:\/\/www.microsoft.com\/en-us\/research\/wp-json\/wp\/v2\/msr-locale?post=559317"},{"taxonomy":"msr-post-option","embeddable":true,"href":"https:\/\/www.microsoft.com\/en-us\/research\/wp-json\/wp\/v2\/msr-post-option?post=559317"},{"taxonomy":"msr-impact-theme","embeddable":true,"href":"https:\/\/www.microsoft.com\/en-us\/research\/wp-json\/wp\/v2\/msr-impact-theme?post=559317"},{"taxonomy":"msr-promo-type","embeddable":true,"href":"https:\/\/www.microsoft.com\/en-us\/research\/wp-json\/wp\/v2\/msr-promo-type?post=559317"},{"taxonomy":"msr-podcast-series","embeddable":true,"href":"https:\/\/www.microsoft.com\/en-us\/research\/wp-json\/wp\/v2\/msr-podcast-series?post=559317"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}