Implémentations cryptographiques sures, performantes et vérifiées : une approche passant à l'échelle
Auteur / Autrice : | Jean-Karim Zinzindohoué-Marsaudon |
Direction : | Karthikeyan Bhargavan |
Type : | Thèse de doctorat |
Discipline(s) : | Informatique |
Date : | Soutenance le 03/07/2018 |
Etablissement(s) : | Paris Sciences et Lettres (ComUE) |
Ecole(s) doctorale(s) : | École doctorale Sciences mathématiques de Paris centre (Paris ; 2000-....) |
Partenaire(s) de recherche : | Laboratoire : Institut national de recherche en informatique et en automatique (France). Centre de recherche de Paris (Paris) |
établissement de préparation de la thèse : École normale supérieure (Paris ; 1985-....) | |
Jury : | Président / Présidente : Véronique Cortier |
Examinateurs / Examinatrices : Karthikeyan Bhargavan, Véronique Cortier, Pierre-Alain Fouque, Peter Schwabe, Cédric Fournet, Pierre-Yves Strub | |
Rapporteur / Rapporteuse : Véronique Cortier, Pierre-Alain Fouque |
Mots clés
Résumé
La sécurité des applications sur le web est totalement dépendante de leur design et de la robustesse de l'implémentation des algorithmes et protocoles cryptographiques sur lesquels elles s'appuient. Cette thèse présente une nouvelle approche, applicable à de larges projets, pour vérifier l'état de l'art des algorithmes de calculs sur les grands nombres, tel que rencontrés dans les implémentations de référence. Le code et les preuves sont réalisés en F*, un langage orienté preuve et qui offre un système de types riche et expressif. L'implémentation et la vérification dans un langage d'ordre supérieur permet de maximiser le partage de code mais nuit aux performances. Nous proposons donc un nouveau langage, Low*, qui encapsule un sous ensemble de C en F* et qui compile vers C de façon sûre. Low* conserve toute l'expressivité de F* pour les spécifications et les preuves et nous l'utilisons pour implémenter de la cryptographie, en y intégrant les optimisations des implémentations de référence. Nous vérifions ce code en termes de sûreté mémoire, de correction fonctionnelle et d'indépendance des traces d'exécution vis à vis des données sensibles. Ainsi, nous présentons HACL*, une bibliothèque cryptographique autonome et entièrement vérifiée, dont les performances sont comparables sinon meilleures que celles du code C de référence. Plusieurs algorithmes de HACL* font maintenant partie de la bibliothèque NSS de Mozilla, utilisée notamment dans Firefox et dans RedHat. Nous appliquons les mêmes concepts sur miTLS, une implémentation de TLS vérifiée et montrons comment étendre cette méthodologie à des preuves cryptographiques, du parsing de message et une machine à état.