Sciences du logiciel - Xavier Leroy

Écrire un petit programme informatique est facile. Concevoir et réaliser un logiciel complet qui soit fiable, pérenne et résistant aux attaques reste extraordinairement difficile. C'est le but des sciences du logiciel que de concevoir et développer les principes, les formalismes mathématiques, les techniques empiriques et les outils informatiques nécessaires pour concevoir, programmer et vérifier des logiciels fiables et sécurisés. L'enseignement de la chaire Sciences du logiciel vise à explorer cette problématique et à présenter la recherche contemporaine dans ce domaine. Le cours privilégie les approches dites « formelles », par opposition à l'empirisme souvent de mise en génie logiciel. Ces approches s'appuient sur des fondements mathématiquement rigoureux, connus ou en émergence : sémantiques formelles, logiques de programmes, systèmes déductifs, équivalences de programmes, calculs de processus… Historiquement, ces concepts ont émergé de considérations de programmation très terre-à-terre avant de se parer de rigueur mathématique. Le cours s'efforce de retracer ce cheminement des idées en partant de l'intuition du programmeur et en allant jusqu'à la mécanisation de ces approches formelles. Les premières années de cet enseignement auraient pu s'intituler « Programmer, démontrer », car ils ont exploré plusieurs modes d'interaction entre la programmation de logiciels et la démonstration d'énoncés mathématiques : programmer puis démontrer, comme dans les logiques de programmes pour la vérification déductive ; programmer pour démontrer, comme dans les logiques constructives et l'assistant à la démonstration Coq ; enfin, programmer égale démontrer, comme dans la féconde correspondance de Curry-Howard, objet de la première année du cours. La recherche de la chaire Sciences du logiciel s'effectue dans le cadre de l'équipe-projet Cambium, commune avec l'Inria. Les travaux de l'équipe visent à améliorer la fiabilité, la sûreté et la sécurité du logiciel en faisant progresser les langages de programmation et les méthodes de vérification formelle de programmes. Les principaux thèmes de recherche sont les systèmes de types et les algorithmes d'inférence de types, la vérification déductive de programmes, le parallélisme à mémoire partagée, et les modèles mémoires faiblement cohérents. L'équipe conçoit et développe deux grands logiciels de recherche qui intègrent et font passer dans la pratique bon nombre de ses résultats : OCaml, un langage de programmation fonctionnel statiquement typé et son implémentation, et CompCert, un compilateur formellement vérifié pour logiciels embarqués critiques.

  1. 11/27/2025

    04 - Le calcul sécurisé : calculer sur des données chiffrées ou privées : Calcul multipartite sécurisé : partager des secrets

    Xavier Leroy Chaire Sciences du logiciel Collège de France Année 2025-2026 04 - Le calcul sécurisé : calculer sur des données chiffrées ou privées : Calcul multipartite sécurisé : partager des secrets Résumé Ce cours est le premier d'une série de deux cours consacrés au calcul multipartite sécurisé (en anglais : Multi-Party Computation, MPC), un mode de calcul sécurisé dans lequel plusieurs participants coopèrent pour calculer une fonction de leurs données privées, sans jamais les révéler aux autres participants. À la différence de l'approche du chiffrement homomorphe étudiée dans les deux cours précédents, l'approche multipartite sécurisée repose sur des algorithmes distribués mettant en œuvre des protocoles interactifs. Nous avons étudié plusieurs schémas de partage de données secrètes entre plusieurs participants : le schéma GMW (Goldreich-Micali-Wigderson) pour partager des bits entre deux participants ; le partage additif complet, qui généralise GMW à un nombre quelconque de participants ; le partage répliqué « deux parmi trois », qui résiste à la panne d'un des participants au prix d'un doublement de la taille des données ; et enfin le partage de Shamir, qui résiste à la panne de plusieurs participants et permet également de détecter voire de corriger les erreurs commises par certains participants. Ces différents schémas sont des instances d'une classe générale de partages linéaires de secrets (Linear Secret Sharing Scheme, LSSS) qui s'expriment élégamment en termes d'algèbre linéaire. Pour ces différents schémas, nous avons vu comment partager un secret en plusieurs parts (une par participant), comment révéler un secret partagé, et comment effectuer des opérations arithmétiques ou logiques sur les secrets partagés de manière distribuée. Si les opérations linéaires (addition, multiplication par une constante) sont simples et peuvent être effectuées de manière locale par chaque participant, la multiplication de deux secrets partagés est plus complexe et nécessite un échange d'informations entre les participants. Enfin, nous avons étudié la sécurité passive ou active de ces schémas de partage de secrets, c'est-à-dire leur capacité à résister à des attaques menées par un participant malveillant ou une collusion de plusieurs participants malveillants. En particulier, les capacités de détection et de correction d'erreurs des codes de Reed-Solomon sur lesquels repose le partage de Shamir permettent, sous certaines hypothèses, de se prémunir contre des attaques actives où les participants malveillants ne suivent pas le protocole et injectent des valeurs incorrectes dans le calcul.

    1h 25m

About

Écrire un petit programme informatique est facile. Concevoir et réaliser un logiciel complet qui soit fiable, pérenne et résistant aux attaques reste extraordinairement difficile. C'est le but des sciences du logiciel que de concevoir et développer les principes, les formalismes mathématiques, les techniques empiriques et les outils informatiques nécessaires pour concevoir, programmer et vérifier des logiciels fiables et sécurisés. L'enseignement de la chaire Sciences du logiciel vise à explorer cette problématique et à présenter la recherche contemporaine dans ce domaine. Le cours privilégie les approches dites « formelles », par opposition à l'empirisme souvent de mise en génie logiciel. Ces approches s'appuient sur des fondements mathématiquement rigoureux, connus ou en émergence : sémantiques formelles, logiques de programmes, systèmes déductifs, équivalences de programmes, calculs de processus… Historiquement, ces concepts ont émergé de considérations de programmation très terre-à-terre avant de se parer de rigueur mathématique. Le cours s'efforce de retracer ce cheminement des idées en partant de l'intuition du programmeur et en allant jusqu'à la mécanisation de ces approches formelles. Les premières années de cet enseignement auraient pu s'intituler « Programmer, démontrer », car ils ont exploré plusieurs modes d'interaction entre la programmation de logiciels et la démonstration d'énoncés mathématiques : programmer puis démontrer, comme dans les logiques de programmes pour la vérification déductive ; programmer pour démontrer, comme dans les logiques constructives et l'assistant à la démonstration Coq ; enfin, programmer égale démontrer, comme dans la féconde correspondance de Curry-Howard, objet de la première année du cours. La recherche de la chaire Sciences du logiciel s'effectue dans le cadre de l'équipe-projet Cambium, commune avec l'Inria. Les travaux de l'équipe visent à améliorer la fiabilité, la sûreté et la sécurité du logiciel en faisant progresser les langages de programmation et les méthodes de vérification formelle de programmes. Les principaux thèmes de recherche sont les systèmes de types et les algorithmes d'inférence de types, la vérification déductive de programmes, le parallélisme à mémoire partagée, et les modèles mémoires faiblement cohérents. L'équipe conçoit et développe deux grands logiciels de recherche qui intègrent et font passer dans la pratique bon nombre de ses résultats : OCaml, un langage de programmation fonctionnel statiquement typé et son implémentation, et CompCert, un compilateur formellement vérifié pour logiciels embarqués critiques.

More From Collège de France