mercredi 5 décembre 2007

Vulgarisation de la Cryptographie


Différentes questions d'amis m'ont amené à faire un ensemble de réponses de vulgarisation, sur le sujet de la cryptographie ou plus précisément la sécurité des échanges numériques. Loin de moi, la prétention de donner des conseils sur un sujet aussi complexe, mais voici un ensemble de pointeurs vers des interlocuteurs et ressources traitant ce sujet.

Analogie :
Nous avons tous besoins de transmettre des messages vers nos amis et collaborateurs. Par exemple si j'achète une voiture d'occasion par correspondance, j'enverrai différents courriers postaux, dont le contrat qui me lie à cet achat.

Voici mes besoins :
  • Je préfère que le montant de cette transaction ne soit pas connu par les personnes chargées de transporter ce courrier. Il est donc nécessaire de mettre en place un mécanisme le protégeant d'individus susceptibles de le lire : chiffrement,
  • J'ai fait une proposition d'un montant d'achat pour cette voiture par courrier postal et ma plus grande phobie et de voir une personne aussi intéressée par ce véhicule, modifier la valeur inscrite sur mon courrier. Il est donc nécessaire de mettre en place un mécanisme indiquant à mon interlocuteur, le vendeur, que le message n'a pas été modifié, qu'il est intègre : signature,
  • Le vendeur va m'envoyer un courrier ou il est indiqué son accord de transaction, mais il est important pour moi de posséder un document ne pouvant être renié par cette personne. Il est donc nécessaire de mettre en place un mécanisme adéquat pour ne pas permettre au vendeur de répudier son accord ultérieurement(non répudiation) : signature.
Mécanismes :
Il m'est désormais nécessaire de trouver des machines conçues pour atteindre ces objectifs.

Signature :
Je sais signer à l’aide d’un crayon et mon interlocuteur comme tout être humain sait vérifier une signature visuellement. Mais ce n'est pas suffisant, car comment serais-je capable de signer une lettre avec un crayon et m’assurer qu’aucun caractère sera modifié lors du transport de la lettre. On pourrait essayer de signer en travers de la lettre en s’assurant que la signature touche tous les caractères, malheureusement l’opération est trop périlleuse. Alors la solution retenue consiste à laisser le contenu de la lettre intacte et ajouter en bas de celle-ci, une sorte de petit dessin représentant tous les caractères superposés puis de signer par-dessus ce dernier.
Conclusion pour signer une lettre, je prends le contenu, réalise un petit dessin qui est son image et signe par dessus. Mon interlocuteur, reçoit la lettre, prend les caractères, réalise aussi le dessin des caractères et vérifie que c’est bien moi qui l’ai signé.

Chiffrement :
Je dispose d'une sorte de mélangeur dans lequel j'insère mes lettres et des boites pour contenir et expédier le produit de papier brouillé résultant. Mon interlocuteur lui dispose d'une machine identique capable de reconstituer mes lettres dans leur format initial, à partir du brouillé fourni. Ces machines sont fabriquées à des milliers d'exemplaires et une seule pièce est interchangeable : la clé du mélangeur. La clé est une pièce que seuls mon interlocuteur et moi possédons et en conséquence, en utilisant une machine produite à des millions d'exemplaires, seuls lui et moi pouvons lire les messages échangés, c'est notre secret de chiffrement.

Cryptographes :
Les spécialistes en cryptographie nous offrent des expertises sur de telles machines, crayons et vérifieurs, mais transposées au monde numérique. Ils conçoivent les plans des machines et crayons numériques, nommés algorithme. Ils donnent aussi des conseils d'utilisation sur les algorithmes et préconisent les tailles de clés.
Enfin, ils élaborent, les principes de transport du mélange de papier (protocoles), pour éviter les erreurs grossières d'utilisation. Par exemple si vous utilisez la plus belle des machines (algorithme) et une très grosse clé, vous réduirez à néant votre investissement en indiquant sur l'étiquette d'expédition : Proposition d'achat de la voiture de Mx X pour un montant de xxxxx. Votre protocole de communication est dans ce cas de mauvaise conception.

Introduction aux fonctionnements numériques :
Chiffrement : Mon interlocuteur et moi pouvons échanger des documents protégés en confidentialité car ils sont chiffrés grâce à un algorithme et une clé de chiffrement secrète. Seuls lui et moi possédons la clé secrète et donc, aucune autre personne peut lire les documents.

Signature :
Je vais signer non pas à l’aide d’un crayon, mais d’une clé de signature que moi seul possède. Mon interlocuteur sait vérifier que c’est bien moi qui ai signé car je lui avais fourni auparavant une clé de vérification.
Pour signer ma lettre numérique, je prends le contenu, réalise un petit dessin numérique qui est son image (hachage) et le signe à l’aide de ma clé de signature. Mon interlocuteur, reçoit la lettre, prend les caractères, réalise le même hachage et vérifie avec la clé de vérification de signature que ce dessin est bien conforme au mien.
Je peux signer des documents, et mon correspondant peut vérifier à leurs réceptions, l’intégrité des documents, donc s’assurer qu’ils n’ont pas été corrompus sur leurs trajets et s’assurer que c'est moi qui les ai signés. Pour cela je possède une clé de signature nommée clé privée et mon interlocuteur possède la clé de vérification de mes signatures, que l’on nomme clé publique. Il n’y a pas de danger concernant ma clé publique et mon correspondant peut la donner à d’autres personnes, c’est d’ailleurs le principe. Généralement pour éviter les confusions, on attache à la clé publique une étiquette sur laquelle on marque à qui elle correspond. On nomme l’ensemble clé publique et étiquette, Certificat (X509).

Implémentation informatique :
La dernière question est : pourquoi faut-il autant de clés ? On pourrait très bien utiliser le mécanisme de clé publique et privée pour signer et crypter, alors pourquoi en plus avoir une clé secrète de chiffrement ?
Vous venez de toucher du doigt la limite d’une analogie et en réalité les mécanismes mis en œuvre ont des coûts de calcul informatique différents. Le chiffrement avec une clé secrète dit chiffrement symétrique et très rapide et peut coûteux, mais vous comprendrez qu’il est assez dangereux d’avoir un mécanisme basé sur une clé partagée (secret partagé) entre deux personnes. Pour cette raison le chiffrement symétrique est utilisé pour sa performance mais la durée de vie des clés secrètes est courte.
Le mécanisme de cryptographie asymétrique avec une paire de clés, c'est à dire une clé publique (contenue dans un certificat X509) et une clé privée (gardée très précieusement dans un fichier avec mot de passe (pkcs#12) ou dans une carte à puce) est pérenne, mais a le désavantage d’être très coûteux en calcul informatique.
Vous pouvez aussi utiliser une clé publique et une clé privée pour respectivement chiffrer et déchiffrer un document, mais il faut toujours éviter d’utiliser une paire de clés à plusieurs effets. Il ne faut pas utiliser une paire de clés pour faire du chiffrement et de la signature, c’est une mauvaise pratique car ceci à pour effet d’affaiblir le mécanisme cryptographique.

Formation :
Des cours en français (Ars Cryptographica, Cryptotpe, Bibmath , etc.) sont à votre disposition et des ouvrages de références [1,2] peuvent vous permettre d'aller plus loin dans la compréhension de cette spécialité. Mais le plus simple, si vous comprenez la langue anglaise, sera de visualiser un cours en ligne comme celui de Stephen Weis [1,2] dans la collection Theory and Practice of Cryptography, Suresh Ramasamy ou autres vidéos. Et puis, si un jour vous vous sentez l'âme d'un héros, essayez de lire les publications disponibles sur le site Web Cryptology ePrint Archive.

Les préconisations :
Algorithme, taille de clé, protocole.
Le TRES lisible site Keylength nous offre une synthèse des données préconisées par les organismes offrant des recommandations à travers le monde. On retrouve en autres, les données proposées par l'organisme européen Ecrypt (ECRYPT Yearly Report on Algorithms and Keysizes) et français DCSSI (Mécanismes cryptographiques).
Enfin, les protocoles cryptographiques sont standardisés et plusieurs implémentations gratuites sont disponibles comme OpenSSL pour SSL/TLS. Alors si vous avez un besoin dans ce domaine ne vous avisez pas de le réaliser vous-même, ceci n'a aucun intérêt.

Le cauchemar :
Le sujet est complexe et même les personnes les plus averties arrivent à réaliser des produits logiciels audités, vérifiés, mais malgré tout non parfait. Par exemple le mois dernier Adi Shamir expliquait pourquoi un bug de processeur électronique réduisait à néant les implémentations de l'algorithme RSA, s'ils ne réalisaient pas une vérification de résultat.

Ressources :
Wikipedia : Cryptographie
Wikipedia : Chiffrement
Wikipedia : Signature
Wikipedia : Protocole Cryptographique
Wikipedia : X509
Wikipedia : Hachage
Wikipedia : PKCS
Wikipedia : Carte à puce
Wikipedia : Confidentialité
Wikipedia : Intégrité
Wikipedia : Cryptographie Symétrique
Wikipedia : Cryptographies Asymètrique
Wikipedia : TLS/SSL Transport Layer Security
OpenSSL : Implémentation OpenSource de TLS/SSL
Google University : Stephen Weis Part1- Part2 et la suite de Theory and Practice of Cryptography
HITBSecConf2004 : Suresh Ramasamy - Cryptography Demystified
Bibmath.net : La Cryptographie expliquée!
Cryptotpe : TPE Cours cryptographie
Apprendre-en-ligne : Ars Cryptographica
Uwaterloo.ca : Hand Book of Applied Cryptography
USCD : Introduction to Modern Cryptography : Mihir Bellare and Phillip Rogaway
Cryptology ePrint Archive : Cryptology ePrint Archive
Computer History Museum : Where computer History Lives
Keylength : Cryptographique Key Length Recommendation
Ecrypt European Information Society Technologies : Network of Excellence in Cryptology
DCSSI : Direction centrale de la sécurité des systèmes d'information
Cryptome : Adi Shamir Research Announcement: Microprocessor Bugs Can Be Security Disasters
Wikipedia : Adi Shamir
Crypto++ : Wei Dai

1 commentaire:

Unknown a dit…

Merci pour cette synthèse Franck.

Pour completer ton article et pour ceux qui voudrait privilegier un aspect ludique à leur découverte de la cryptographie, je leur recommande "les 9 couronnes" de Didier Muller
Laurent