Thèse soutenue

Construction d'une bibliothèque cryptographique multi-plateformes formellement vérifiée à haute performance en F*

FR  |  
EN
Auteur / Autrice : Marina Polubelova
Direction : Karthikeyan Bhargavan
Type : Thèse de doctorat
Discipline(s) : Informatique
Date : Soutenance le 17/01/2022
Etablissement(s) : Université Paris sciences et lettres
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, Peter Schwabe, Paul Zimmermann, Jonathan Protzenko, Manuel Bernardo Martins Barbosa
Rapporteurs / Rapporteuses : Peter Schwabe, Paul Zimmermann

Mots clés

FR  |  
EN

Mots clés contrôlés

Résumé

FR  |  
EN

Beaucoup de logiciels critiques d'un point de vue sécurité ont besoin d'implémentations d'algorithmes cryptographiques sûres et performantes. Pour répondre à ce besoin, des bibliothèques cryptographiques généralistes comme OpenSSL incluent des douzaines d'implémentations hybrides C/Assembleurs pour chaque primitive, chacune de ces implémentations étant spécialisée et optimisée pour une plateforme répandue. La plupart des optimisations présentes dans ces implémentations exploitent le parallélisme Single Instruction, Multiple Data (SIMD) qui nécessite de changer de manière significative la structure du code, de telle sorte qu'il ne ressemble plus que très peu à l'algorithme scalaire originel. Cependant, et malgré des années de conception et d'implémentation méticuleuse, des bugs et attaques continuent d'être trouvées dans ces bases de code optimisées. Ces bugs et attaques incluent des erreurs de sûreté mémoire, des fuites d'information par attaque temporelle et des bugs de correction fonctionnelle. La probabilité de détecter ces bugs par des méthodes de test est extrêmement faible, mais ils peuvent quand même être exploités pour conduire une attaque. Nous défendons l'utilisation de méthodes formelles afin de prouver mathématiquement l'absence de tels bugs dans les implémentations. À l'inverse d'autres approches comme le test ou l'audit, l'utilisation de méthodes formelles apporte des garanties forte concernant la sûreté mémoire du code, sa correction fonctionnelle par rapport à une spécification hautniveau, et enfin son indépendance par rapport aux données secrètes (constant-time) qui protège contre certaines attaques temporelles par canaux auxiliaires. Le défi est ici de vérifier des centaines de milliers de lignes de code extrêmement optimisées ; nous avons donc besoin d'une approche systématique à ce problème. Cette dissertation présente une nouvelle approche pour la construction d'une bibliothèque cryptographique multiplateforme formellement vérifiée qui compile du code générique vérifié écrit en F? vers du code C optimisé pour différentes plateformes, que l'on peut également composer avec de l'assembleur vérifiée. Notre approche réduit l'effort de programmation et de vérification en partageant le code entre les implémentations d'un même algorithme pour différentes plateformes, et entre les implémentations de primitives cryptographiques différentes. Notre bibliothèque incorpore les résultats de trois projets qui sont chacun décrit dans leur propre chapitre. Premièrement, nous montrons comment écrire des implémentations de la courbe elliptique Curve25519 en C pur (pour la portabilité) et en un mélange de C et d'assembleur. Deuxièmement, nous montrons comment écrire des implémentations vérifiées et vectorisées de l'algorithme de chiffrement Chacha20, de l'algorithme d'authentification à usage unique Poly13015, et des familles d'algorithmes de hash SHA-2 et Blake2, pour des plateformes qui supportent des vecteurs SIMD de 128, 256 et 512 bits. Troisièmement, nous montrons comment écrire des implémentations vérifiées en C pur (pour la portabilité) pour les schémas de signature RSA-PSS et Ed25519 pour l'échange de clés en champ fini Diffie-Hellman sur des groupes standards. Ainsi, nous développons une nouvelle version de la bibliothèque cryptographique open-source HACL?, qui inclue par exemple désormais les premières implémentations vérifiées de RSA-PSS et les premières implémentations vectorisées vérifiées sur ARM Neon et AVX512.