Vérification formelle de logiciels de sécurité à haute assurance en FStar: Application aux protocoles de communication et aux primitives cryptographiques

Abstract

The security of the modern Internet relies on cryptographic protocols such as TLS or Signal. However, the design and implementations of these protocols can have serious bugs which break their expected security guarantees. In this thesis, we will describe a novel class of statemachine attacks on TLS implementations which was hidden for years. The discovery of these attacks resulted in updates to all major web browsers and TLS implementations, but there are many other vulnerabilities which remain to be discovered. The central question we ask in this thesis is whether it is possible to design and implement cryptographic protocols in a way that is provably secure. Following a long line prior work, we advocate the use of formal verification to build high-assurance cryptographic software that systematically prevents such attacks. Existing methodologies include the analysis of high-level protocol models and verification of their reference implementations. However, there is a significant gap between existing verified code and efficient implementations. In this work, we propose to close this gap by developing verified cryptographic software in F* and compiling it to C. We develop reusable verified libraries that can be used by any project to build cryptographic software. We present HACL*, the first formally verified library providing a large panel of modern and performant cryptographic primitives in C. HACL* provides implementations of primitives that are proven memory-safe, functionally correct with respect to a formal specification, and offer protection against timing side-channels. We leverage our experience with HACL* to design LibSignal*, a verified implementation of Signal in WebAssembly. We relate LibSignal* to a model written in ProVerif through a weak syntacticargument in order to show that our implementation inherits security from the symbolic proof. Finally, we present the first formally verified specification and security proof in the Dolev-Yao model of TreeKEM, a new Tree-based Group Key Agreement used as part of the Messaging Layer Security (MLS) protocol at the IETF. HACL* is currently used within Mozilla Firefox,at Microsoft and in many other products, and our work on MLS has been instrumental in the IETF documents which we are co-authoring.La sécurité de l'Internet moderne se fonde sur des protocoles cryptographiques tels que Transport Layer Security (TLS). Laconception et les implémentations de tels protocoles sont cependant complexes et peuvent présenter de sérieux bugs qui détruisent leurs garanties de sécurité. Dans cette thèse, nous commençons, par exemple, par décrire une nouvelle classe d'attaques qui est restée cachée dans les implémentations de TLS pendant des années. La découverte de ces attaques aengendré une mise à jour majeure des navigateurs Web et des implémentations de TLS. Il est, malheureusement, certain que d'autres vulnérabilités restent à découvrir dans ces implémentations. Nous poursuivons une longue ligne de travaux qui encouragent l'utilisation de la vérification formelle pour prévenir ces attaques. Les méthodologies existantes incluent les analyses de modèles de protocoles ou la vérification formelle d'implémentations de référence. Il reste cependant un large fossé entre le code vérifié existant et des implémentations performantes. Par ces travaux, nous proposons de réduire cet espace en développant des composants cryptographiques en F* et en les compilant vers du code C. Nous développonsdes bibliothèques vérifiées en F* qui peuvent être utilisables pour construire de nombreux composants logiciels pour la cryptographie. Nous présentons HACL*, la première bibliothèque cryptographique performante contenant un large panel de primitives vérifiées en C. HACL* fourni du code garantissant sureté mémoire, correction fonctionnelle vis-à-vis d'une spécification formelle et un degré de résistance contre certaines attaques par canaux auxiliaires. En utilisant l'expérience acquise pendant le développement de HACL*, nous avons conçu LibSignal*, une implémentation formellement vérifiée du protocole Signal écrite en F* et synthétisant du WebAssembly. Nous relions LibSignal* avec un modèle ProVerif de Signal à l'aide d'un argument syntaxique informel pour montrer que notre implementation hérite de la preuve de sécurité symbolique fournie par ProVerif. De plus, nous présentons une formalisation en F* d'un ensemble de de mécanismes d'établissement de clé basés sur une structure en arbre binaire que nous appelons des "Tree-based Group Key Agreement" (TGKA). Pourfinir, nous proposons la première formalisation du protocole de communication de groupe, sécurisé, Messaging Layer Security (MLS) développé à l'IETF. HACL* est actuellement utilisé dans de nombreux produits, y compris le navigateur Web Mozilla Firefox. Notre travail sur MLS a quant à lui été instrumental dans les travaux de l'IETF et nous participons activement à l'écriture du standard

    Similar works

    Full text

    thumbnail-image