Mise en gage
En cryptologie, la mise en gage (en anglais : commitment scheme) est un processus qui permet à une personne de « mettre en gage » une valeur (ou un énoncé) tout en la maintenant cachée aux autres, avec la possibilité de révéler cette valeur plus tard en prouvant que c'est bien la valeur qui avait été mise en gage[1]. La mise en gage est conçue de telle sorte que la personne est liée à la valeur mise en gage.
Les mises en gage ont des applications importantes dans un certain nombre de protocoles cryptographiques, y compris le jeu de pile ou face sécurisé, les preuves à divulgation nulle de connaissance, les signatures numériques et les calculs sécurisés à plusieurs participants.
Concept, historique et terminologie
modifierLe concept de mise en gage a été formalisé par Gilles Brassard, David Chaum et Claude Crépeau en 1988[2], mais le concept avait été utilisé sans être traité formellement avant cela[3],[4]. La notion de mise en gage est mentionnée dans les travaux de Manuel Blum[5], Shimon Even[6] et Shamir et coll[7]. Le terme anglais commitment scheme semble avoir été créé par Blum[4].
Description
modifierEn pratique, la mise en gage se fait en calculant une valeur de mise en gage à partir de la valeur que l'on veut cacher et en communiquant cette valeur de mise en gage à un destinataire. Par la suite, lorsque la valeur originellement cachée sera communiquée au destinataire, celui-ci pourra vérifier que la valeur qui lui a été révélée est bien la valeur qui a servi à calculer la valeur de mise en gage. Plus formellement, la mise en gage transforme une valeur en une paire de telle façon que 1) ne révèle aucune information sur , mais que, 2) ensembles, et permettent de révéler , et que 3) il est impossible de trouver tel que révèle .
Illustration
modifierUne façon de visualiser un système de mise en gage est de penser à un expéditeur qui met un message dans un coffre-fort fermé à clé et qui donne le coffre-fort à un destinataire. Le message dans le coffre-fort est caché au destinataire qui ne peut pas ouvrir la serrure. Étant donné que le destinataire est en possession du coffre-fort, le message à l'intérieur du coffre-fort ne peut pas être changé. Par contre, le message peut être révélé au destinataire si l'expéditeur choisit de lui donner la clé à un moment donné.
Implantation
modifierLes interactions dans un système de mise en gage se déroulent en deux phases :
- la phase de mise en gage au cours de laquelle une valeur (ou un énoncé) est mise en gage (c'est-à-dire mise dans le coffre-fort fermé à clé de l'exemple précédent) ;
- la phase de révélation au cours de laquelle la valeur (ou l'énoncé) est révélée et vérifiée.
Dans les protocoles simples, la phase de mise en gage est constituée d'un seul message de l'expéditeur au destinataire. Ce message est appelé la mise en gage (ou l'engagement). Ce message est en fait une valeur que l'expéditeur a calculée à partir du message caché. Il est essentiel que la valeur mise en gage ne puisse pas être calculée par le destinataire à partir de la mise en gage (cette propriété est appelée la dissimulation - en anglais : hiding property). Une phase de révélation simple consisterait en un seul message, la révélation de la valeur originellement cachée, de l'expéditeur au destinataire, suivie d'une vérification effectuée par le récepteur. Il est important que l'expéditeur ne puisse pas calculer une autre valeur qui donnerait la même valeur de mise en gage que sa valeur cachée originale (cette propriété est appelée la liaison - en anglais : binding property).
Applications
modifierUn jeu de pile ou face sécurisé à distance
modifierSupposons qu'Alice et Bob veulent résoudre un certain différend en tirant à pile ou face. S'ils sont physiquement au même endroit, une procédure typique pourrait être :
- Alice choisit pile ou face et annonce son choix ;
- Bob lance une pièce de monnaie ;
- si Alice a prédit le résultat obtenu par Bob, elle gagne, sinon Bob gagne.
Si Alice et Bob ne sont pas au même endroit, un problème se pose. Une fois qu'Alice a fait et annoncé son choix, Bob peut annoncer le résultat qui l'avantage sans qu'Alice puisse vérifier s'il dit vrai. De même, si Alice fait son choix et ne l'annonce pas, après que Bob ait lancé la pièce de monnaie et annoncé le résultat, Alice peut annoncer le résultat qui l'avantage sans que Bob puisse vérifier si elle dit vrai.
Alice et Bob peuvent utiliser la mise en gage pour contourner ce problème :
- Alice choisit pile ou face, mais communique uniquement la valeur de mise en gage de son choix ;
- Bob lance la pièce et annonce le résultat ;
- Alice révèle son choix (à ce point, Alice et Bob connaissent le gagnant probable, mais Bob n'est pas certain qu'Alice a dit vrai) ;
- Bob vérifie que la valeur de mise en gage de son choix correspond à son choix (à ce point, Bob sait si Alice a dit vrai et le gagnant est connu avec certitude).
Pour que Bob puisse fausser le résultat en sa faveur, il doit être capable de calculer le choix d'Alice à partir de la valeur de mise en gage. Si l'algorithme de mise en gage est de bonne qualité, Bob ne peut faire ce calcul et, conséquemment, il ne peut fausser le résultat en sa faveur. De même, Alice ne peut pas influer sur le résultat, car un algorithme de bonne qualité ne lui permet pas de trouver un autre choix qui aurait la même valeur de mise en gage que celle qu'elle a annoncée[3],[5].
Preuves à divulgation nulle de connaissance
modifierUne preuve à divulgation nulle de connaissance (Zero Knowledge Interactive proof ou ZKIP en anglais, parfois simplement ZKP) est un protocole cryptographique permettant l'authentification sécurisée d'informations. Dans le cadre de ce protocole, une entité, nommée « fournisseur de preuve » ou prouveur peut démontrer à une autre partie, appelée le vérificateur, qu'une déclaration est vraie, sans révéler aucune information supplémentaire à son sujet. Ces preuves jouent un rôle essentiel dans la garantie de la confidentialité et de la sécurité de divers systèmes cryptographiques modernes.
En pratique, ces schémas se présentent souvent sous la forme de protocoles de type « défi/réponse » (challenge-response)[8]. Le vérificateur et le fournisseur de preuve s'échangent des informations et le vérificateur contrôle si la réponse finale est positive ou négative. Il existe également des variantes sans interaction (non-interactive zero-knowledge proof)[9] qui peuvent être construites dans le modèle de l'oracle aléatoire par l'heuristique de Fiat-Shamir.
Les preuves à divulgation nulle reposent sur trois propriétés fondamentales :
- Complétude : si la déclaration est vraie et que le prouveur suit le protocole, le vérificateur sera convaincu.
- Robustesse : si la déclaration est fausse, un prouveur malveillant ne pourra pas convaincre un vérificateur honnête.
- Zéro-connaissance : le vérificateur n'acquiert aucune information supplémentaire sur la déclaration, au-delà de sa véracité.
Les ZKP peuvent être utilisées pour cacher des informations dans un registre distribué (comme une blockchain), tout en permettant la validation de ces informations. Cela est particulièrement utile dans des systèmes où les parties n'ont pas totalement confiance les unes envers les autres, tout en évitant la nécessité d'une tierce partie de confiance.
Signatures numériques
modifierLa signature numérique ou signature électronique est un mécanisme permettant d'authentifier l'auteur d'un document électronique et d'en garantir la non-répudiation, par analogie avec la signature manuscrite d'un document papier.
Elle se différencie de la signature écrite par le fait qu'elle n'est pas visuelle, mais correspond à une suite de caractères. Elle ne doit pas être confondue avec la signature électronique manuscrite.
Secrets répartis vérifiables
modifierLe secret réparti ou le partage de secret consiste à distribuer un secret, par exemple une clé ou un mot de passe, entre plusieurs dépositaires. Le secret ne peut être découvert que si un nombre suffisant de dépositaires mettent en commun les informations qu'ils ont reçues. En revanche, un nombre inférieur de dépositaire n’apporte aucune information sur le secret.
Le secret réparti a été inventé indépendamment par Adi Shamir[10] et George Blakley[11] en 1979.
Notes et références
modifier- ↑ (en) Oded Goldreich, Foundations of Cryptography: vol. 1, Basic Tools, (draft available from author's site). Cambridge University Press, 2001 (ISBN 0-521-79172-3). (voir aussi https://www.wisdom.weizmann.ac.il/~oded/foc-book.html) p. 224
- ↑ (en) Gilles Brassard, David Chaum, et Claude Crepeau, Minimum Disclosure Proofs of Knowledge, Journal of Computer and System Sciences, vol. 37, pp. 156–189, 1988.
- 1 2 (en) Moni Naor, Bit Commitment Using Pseudorandomness [réf. obsolète], Journal of Cryptology 4: 2 pp. 151–158, 1991.
- 1 2 Claude Crépeau, Commitment [PDF], MCgill, accessed April 11, 2008
- 1 2 (en) Manuel Blum, Coin Flipping by Telephone, Proceedings of CRYPTO 1981, pp. 11–15, 1981, reprinted in SIGACT News vol. 15, pp. 23–27, 1983.
- ↑ (en) Shimon Even. Protocol for signing contracts. In Allen Gersho, ed., Advances in Cryptography (proceedings of CRYPTO '82), pp. 148–153, Santa Barbara, CA, USA, 1982.
- ↑ (en) A. Shamir, R. L. Rivest, et L. Adleman, Mental Poker. In D. Klarner, ed., The Mathematical Gardner, pp. 37–43. Wadsworth, Belmont (Californie), 1981.
- ↑ Damgård 2010.
- ↑ Groth et Sahai 2008.
- ↑ Adi Shamir, « How to Share a Secret », Commun. ACM, vol. 22, , p. 612–613 (ISSN 0001-0782, DOI 10.1145/359168.359176, lire en ligne, consulté le )
- ↑ (en) G. Blakley, « Safeguarding cryptographic keys », Proc. of the National Computer Conference,