<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1 plus MathML 2.0 plus SVG 1.1//EN" "http://www.w3.org/2002/04/xhtml-math-svg/xhtml-math-svg.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
  <head>
    <meta http-equiv="Content-Type" content="application/xhtml+xml; charset=utf-8"/>
    <title>Project-Team:PROSECCO</title>
    <link rel="stylesheet" href="../static/css/raweb.css" type="text/css"/>
    <meta name="description" content="Research Program - Symbolic verification of cryptographic applications"/>
    <meta name="dc.title" content="Research Program - Symbolic verification of cryptographic applications"/>
    <meta name="dc.subject" content=""/>
    <meta name="dc.publisher" content="INRIA"/>
    <meta name="dc.date" content="(SCHEME=ISO8601) 2017-01"/>
    <meta name="dc.type" content="Report"/>
    <meta name="dc.language" content="(SCHEME=ISO639-1) en"/>
    <meta name="projet" content="PROSECCO"/>
    <script type="text/javascript" src="https://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-MML-AM_CHTML">
      <!--MathJax-->
    </script>
  </head>
  <body>
    <div class="tdmdiv">
      <div class="logo">
        <a href="http://www.inria.fr">
          <img style="align:bottom; border:none" src="../static/img/icons/logo_INRIA-coul.jpg" alt="Inria"/>
        </a>
      </div>
      <div class="TdmEntry">
        <div class="tdmentete">
          <a href="uid0.html">Project-Team Prosecco</a>
        </div>
        <span>
          <a href="uid1.html">Personnel</a>
        </span>
      </div>
      <div class="TdmEntry">Overall Objectives<ul><li><a href="./uid3.html">Programming securely
with cryptography</a></li></ul></div>
      <div class="TdmEntry">Research Program<ul><li class="tdmActPage"><a href="uid10.html&#10;&#9;&#9;  ">Symbolic verification of cryptographic applications</a></li><li><a href="uid17.html&#10;&#9;&#9;  ">Computational verification of cryptographic applications</a></li><li><a href="uid18.html&#10;&#9;&#9;  ">F*: A Higher-Order Effectful Language Designed for Program Verification</a></li><li><a href="uid19.html&#10;&#9;&#9;  ">Efficient Formally Secure Compilers to a Tagged Architecture</a></li><li><a href="uid20.html&#10;&#9;&#9;  ">Provably secure web applications</a></li><li><a href="uid21.html&#10;&#9;&#9;  ">Design and Verification of next-generation protocols: identity, blockchains, and messaging</a></li></ul></div>
      <div class="TdmEntry">Application Domains<ul><li><a href="uid23.html&#10;&#9;&#9;  ">Cryptographic Protocol Libraries</a></li><li><a href="uid24.html&#10;&#9;&#9;  ">Hardware-based security APIs</a></li><li><a href="uid25.html&#10;&#9;&#9;  ">Web application security</a></li></ul></div>
      <div class="TdmEntry">
        <a href="./uid27.html">Highlights of the Year</a>
      </div>
      <div class="TdmEntry">New Software and Platforms<ul><li><a href="uid37.html&#10;&#9;&#9;  ">Cryptosense Analyzer</a></li><li><a href="uid41.html&#10;&#9;&#9;  ">CryptoVerif</a></li><li><a href="uid46.html&#10;&#9;&#9;  ">F*</a></li><li><a href="uid50.html&#10;&#9;&#9;  ">miTLS</a></li><li><a href="uid54.html&#10;&#9;&#9;  ">ProVerif</a></li><li><a href="uid59.html&#10;&#9;&#9;  ">HACL*</a></li></ul></div>
      <div class="TdmEntry">New Results<ul><li><a href="uid63.html&#10;&#9;&#9;  ">Verification of Security
Protocols in the Symbolic Model</a></li><li><a href="uid64.html&#10;&#9;&#9;  ">Symbolic and Computational Verification of Signal</a></li><li><a href="uid65.html&#10;&#9;&#9;  ">Symbolic and Computational Verification of TLS 1.3</a></li><li><a href="uid66.html&#10;&#9;&#9;  ">Verification of Avionic Security Protocols</a></li><li><a href="uid67.html&#10;&#9;&#9;  ">Design and Verification of next-generation protocols: identity, blockchains, and messaging</a></li><li><a href="uid68.html&#10;&#9;&#9;  ">The F* programming language</a></li><li><a href="uid69.html&#10;&#9;&#9;  ">Micro-Policies</a></li><li><a href="uid70.html&#10;&#9;&#9;  ">HACL*: A Verified Modern Cryptographic Library</a></li><li><a href="uid71.html&#10;&#9;&#9;  ">miTLS: A Verified TLS Implementation</a></li><li><a href="uid72.html&#10;&#9;&#9;  ">A Cryptographic Analysis of Content Delivery of TLS</a></li></ul></div>
      <div class="TdmEntry">Partnerships and Cooperations<ul><li><a href="uid74.html&#10;&#9;&#9;  ">National Initiatives</a></li><li><a href="uid97.html&#10;&#9;&#9;  ">European Initiatives</a></li><li><a href="uid116.html&#10;&#9;&#9;  ">International Initiatives</a></li><li><a href="uid131.html&#10;&#9;&#9;  ">International Research Visitors</a></li></ul></div>
      <div class="TdmEntry">Dissemination<ul><li><a href="uid157.html&#10;&#9;&#9;  ">Promoting Scientific Activities</a></li><li><a href="uid203.html&#10;&#9;&#9;  ">Teaching - Supervision - Juries</a></li><li><a href="uid222.html&#10;&#9;&#9;  ">Popularization</a></li></ul></div>
      <div class="TdmEntry">
        <div>Bibliography</div>
      </div>
      <div class="TdmEntry">
        <ul>
          <li>
            <a id="tdmbibentmajor" href="bibliography.html">Major publications</a>
          </li>
          <li>
            <a id="tdmbibentyear" href="bibliography.html#year">Publications of the year</a>
          </li>
          <li>
            <a id="tdmbibentfoot" href="bibliography.html#References">References in notes</a>
          </li>
        </ul>
      </div>
    </div>
    <div id="main">
      <div class="mainentete">
        <div id="head_agauche">
          <small><a href="http://www.inria.fr">
	    
	    Inria
	  </a> | <a href="../index.html">
	    
	    Raweb 
	    2017</a> | <a href="http://www.inria.fr/en/teams/prosecco">Presentation of the Project-Team PROSECCO</a> | <a href="http://prosecco.inria.fr">PROSECCO Web Site
	  </a></small>
        </div>
        <div id="head_adroite">
          <table class="qrcode">
            <tr>
              <td>
                <a href="prosecco.xml">
                  <img style="align:bottom; border:none" alt="XML" src="../static/img/icons/xml_motif.png"/>
                </a>
              </td>
              <td>
                <a href="prosecco.pdf">
                  <img style="align:bottom; border:none" alt="PDF" src="IMG/qrcode-prosecco-pdf.png"/>
                </a>
              </td>
              <td>
                <a href="../prosecco/prosecco.epub">
                  <img style="align:bottom; border:none" alt="e-pub" src="IMG/qrcode-prosecco-epub.png"/>
                </a>
              </td>
            </tr>
            <tr>
              <td/>
              <td>PDF
</td>
              <td>e-Pub
</td>
            </tr>
          </table>
        </div>
      </div>
      <!--FIN du corps du module-->
      <br/>
      <div class="bottomNavigation">
        <div class="tail_aucentre">
          <a href="./uid3.html" accesskey="P"><img style="align:bottom; border:none" alt="previous" src="../static/img/icons/previous_motif.jpg"/> Previous | </a>
          <a href="./uid0.html" accesskey="U"><img style="align:bottom; border:none" alt="up" src="../static/img/icons/up_motif.jpg"/>  Home</a>
          <a href="./uid17.html" accesskey="N"> | Next <img style="align:bottom; border:none" alt="next" src="../static/img/icons/next_motif.jpg"/></a>
        </div>
        <br/>
      </div>
      <div id="textepage">
        <!--DEBUT2 du corps du module-->
        <h2>Section: 
      Research Program</h2>
        <h3 class="titre3">Symbolic verification of cryptographic applications</h3>
        <p>Despite decades of experience, designing and implementing
cryptographic applications remains dangerously error-prone, even for experts. This is partly because cryptographic security is an inherently hard problem, and partly because automated verification tools require carefully-crafted inputs and are not widely applicable. To take just the example of TLS, a widely-deployed and well-studied cryptographic protocol designed, implemented, and verified by security experts, the lack of a formal proof about all its details has regularly led to the discovery of major attacks (including several in 2014) on both the protocol and its implementations, after many years of unsuspecting use.</p>
        <p>As a result, the automated verification for cryptographic applications is an active area of research, with a wide variety of tools being employed for verifying different kinds of applications.</p>
        <p>In previous work, the we have developed the following three approaches:</p>
        <ul>
          <li>
            <p class="notaparagraph"><a name="uid11"> </a>ProVerif: a symbolic prover for cryptographic protocol models</p>
          </li>
          <li>
            <p class="notaparagraph"><a name="uid12"> </a>Tookan: an attack-finder for PKCS#11 hardware security devices</p>
          </li>
          <li>
            <p class="notaparagraph"><a name="uid13"> </a>F*: a dependent type system that enables the verification of cryptographic applications</p>
          </li>
        </ul>
        <a name="uid14"/>
        <h4 class="titre4">Verifying cryptographic protocols with ProVerif</h4>
        <p>Given a model of a cryptographic protocol, the problem is to verify that an active attacker, possibly with access to some cryptographic keys but unable to guess other secrets, cannot thwart security goals such as authentication and secrecy  <a href="./bibliography.html#prosecco-2017-bid0">[59]</a>; it has motivated a serious research effort on the formal analysis of cryptographic protocols, starting with  <a href="./bibliography.html#prosecco-2017-bid1">[57]</a> and eventually leading to effective verification tools, such as our tool ProVerif.</p>
        <p>To use ProVerif, one encodes a protocol model in a formal language, called the applied pi-calculus,
and ProVerif abstracts it to a set of generalized Horn clauses.
This abstraction is a small approximation: it just ignores the number of repetitions of each action, so ProVerif is still very precise, more precise than, say, tree automata-based techniques. The price to pay for this precision is that ProVerif does not always terminate; however, it terminates in most cases in practice, and it always terminates on the interesting class of <i>tagged protocols</i>  <a href="./bibliography.html#prosecco-2017-bid2">[54]</a>. ProVerif also distinguishes itself from other tools by the variety of cryptographic primitives it can handle, defined by rewrite rules or by some equations, and the variety of security properties it can prove: secrecy  <a href="./bibliography.html#prosecco-2017-bid3">[52]</a>, <a href="./bibliography.html#prosecco-2017-bid4">[43]</a>, correspondences (including authentication)  <a href="./bibliography.html#prosecco-2017-bid5">[53]</a>, and observational equivalences  <a href="./bibliography.html#prosecco-2017-bid6">[51]</a>. Observational equivalence means that an adversary cannot distinguish two processes (protocols); equivalences can be used to formalize a wide range of properties, but they are particularly difficult to prove. Even if the class of equivalences that ProVerif can prove is limited to equivalences between processes that differ only by the terms they contain, these equivalences are useful in practice and ProVerif is the only tool that proves equivalences for an unbounded number of sessions.</p>
        <p>Using ProVerif, it is now possible to verify large parts of industrial-strength protocols,
such as TLS  <a href="./bibliography.html#prosecco-2017-bid7">[48]</a>, JFK  <a href="./bibliography.html#prosecco-2017-bid8">[44]</a>, and Web Services Security  <a href="./bibliography.html#prosecco-2017-bid9">[50]</a>, against powerful adversaries that can run an unlimited number of protocol sessions, for strong security properties expressed as correspondence queries or equivalence assertions. ProVerif is used by many teams at the international level, and has been used in more than 30 research papers (references available at <a href="http://proverif.inria.fr/proverif-users.html">http://proverif.inria.fr/proverif-users.html</a>).</p>
        <a name="uid15"/>
        <h4 class="titre4">Verifying security APIs using Tookan</h4>
        <p>Security application programming interfaces (APIs) are interfaces that
provide access to functionality while also enforcing a security policy,
so that even if a malicious program makes calls to the interface,
certain security properties will continue to hold. They are used, for
example, by cryptographic devices such as smartcards and Hardware
Security Modules (HSMs) to manage keys and provide access to
cryptographic functions whilst keeping the keys secure. Like security
protocols, their design is security critical and very difficult to get
right. Hence formal techniques have been adapted from security
protocols to security APIs.</p>
        <p>The most widely used standard for cryptographic APIs is RSA
PKCS#11, ubiquitous in devices from smartcards to HSMs. A 2003 paper
highlighted possible flaws in PKCS#11  <a href="./bibliography.html#prosecco-2017-bid10">[55]</a>, results
which were extended by formal analysis work using a Dolev-Yao style
model of the standard  <a href="./bibliography.html#prosecco-2017-bid11">[56]</a>. However at this point it was
not clear to what extent these flaws affected real commercial devices,
since the standard is underspecified and can be implemented in many
different ways. The Tookan tool, developed by Steel in collaboration
with Bortolozzo, Centenaro and Focardi, was designed to address this
problem. Tookan can reverse engineer the particular configuration of
PKCS#11 used by a device under test by sending a carefully designed
series of PKCS#11 commands and observing the return codes. These
codes are used to instantiate a Dolev-Yao model of the device's
API. This model can then be searched using a security protocol model
checking tool to find attacks. If an attack is found, Tookan converts
the trace from the model checker into the sequence of PKCS#11 queries
needed to make the attack and executes the commands directly on the
device. Results obtained by Tookan are remarkable: of 18 commercially available
PKCS#11 devices tested, 10 were found to be susceptible to at least
one attack.</p>
        <a name="uid16"/>
        <h4 class="titre4">Verifying cryptographic applications using F*</h4>
        <p>Verifying the implementation of a protocol has traditionally been considered
much harder than verifying its model. This is mainly because implementations
have to consider real-world details of the protocol, such as message formats,
that models typically ignore. This leads to a situation that a protocol may
have been proved secure in theory, but its implementation may be buggy
and insecure. However, with recent advances in both program verification
and symbolic protocol verification tools, it has become possible to verify fully
functional protocol implementations in the symbolic model.</p>
        <p>One approach is to extract a symbolic protocol model from an implementation
and then verify the model, say, using ProVerif. This approach has been quite successful,
yielding a verified implementation of TLS in F#  <a href="./bibliography.html#prosecco-2017-bid7">[48]</a>.
However, the generated models are typically quite large and whole-program
symbolic verification does not scale very well.</p>
        <p>An alternate approach is to develop a verification method directly for implementation code,
using well-known program verification techniques such as typechecking.
F7  <a href="./bibliography.html#prosecco-2017-bid12">[46]</a> is a refinement typechecker for F#, developed jointly at
Microsoft Research Cambridge and Inria. It implements a dependent type-system that
allows us to specify security assumptions and goals as first-order logic annotations
directly inside the program. It has been used for the modular verification of large
web services security protocol implementations  <a href="./bibliography.html#prosecco-2017-bid13">[49]</a>.
F* (see below) is an extension of F7 with higher-order kinds and
a certifying typechecker.
The cryptographic protocol implementations verified
using F7 and F* already represent the largest verified cryptographic applications
to our knowledge.</p>
      </div>
      <!--FIN du corps du module-->
      <br/>
      <div class="bottomNavigation">
        <div class="tail_aucentre">
          <a href="./uid3.html" accesskey="P"><img style="align:bottom; border:none" alt="previous" src="../static/img/icons/previous_motif.jpg"/> Previous | </a>
          <a href="./uid0.html" accesskey="U"><img style="align:bottom; border:none" alt="up" src="../static/img/icons/up_motif.jpg"/>  Home</a>
          <a href="./uid17.html" accesskey="N"> | Next <img style="align:bottom; border:none" alt="next" src="../static/img/icons/next_motif.jpg"/></a>
        </div>
        <br/>
      </div>
    </div>
  </body>
</html>
