Cryptographie asymétrique
Dans cette leçon, nous allons explorer la cryptographie à clé asymétrique, qui constitue la base de nombreuses interactions réseau sécurisées aujourd'hui.
À la fin de cette leçon, nous aurons abordé :
- Ce qu'est la cryptographie à clé asymétrique
- Les usages de la cryptographie à clé asymétrique, notamment l'échange de clés et les signatures numériques
- La sécurité de la cryptographie à clé asymétrique en général
- Des détails supplémentaires sur les algorithmes RSA, DSA et les courbes elliptiques, et leur sécurité
- Des exemples de code Python montrant comment ces algorithmes fonctionnent en pratique
- Les menaces pesant sur ces algorithmes, tant du côté des ordinateurs classiques que quantiques
Introduction à la cryptographie asymétrique
Comme nous l'avons vu dans la leçon précédente, la cryptographie à clé symétrique est très rapide et efficace pour protéger les informations, mais elle présente quelques limitations :
- À mesure que le nombre de parties souhaitant échanger des informations en toute sécurité augmente, le nombre de clés nécessaires croît de manière combinatoire. Elle ne fournit aucun mécanisme pour distribuer ces clés de façon sécurisée entre expéditeurs et destinataires.
- Il n'existe aucune disposition pour la non-répudiation. N'importe quelle partie peut déchiffrer ou chiffrer des messages sans moyen de garantir qu'un message a été reçu ou d'où il provient.
La solution à ces deux problèmes est apportée par la cryptographie à clé asymétrique (AKC), également connue sous le nom de cryptographie à clé publique (PKC), qui constitue ainsi une pierre angulaire de la sécurité numérique moderne.
La cryptographie à clé asymétrique (AKC) implique l'utilisation d'une paire de clés — une publique, une privée. Les clés publique et privée sont liées cryptographiquement et généralement créées au même moment en tant que paire de clés via un algorithme mathématique spécialisé. La clé publique, comme son nom l'indique, est destinée à être librement distribuée, tandis que la clé privée est gardée secrète par la partie qui génère la paire de clés. La sécurité des communications utilisant des paires de clés asymétriques est assurée tant que la clé privée reste confidentielle.
Figure 1. Chiffrement à clé asymétrique
L'AKC offre plusieurs fonctions utiles, telles que :
- Chiffrement et déchiffrement pour assurer la confidentialité des communications.
- Signatures numériques pour garantir l'authenticité, l'intégrité et la non-répudiation.
- Échange de clés sécurisé pour faciliter l'utilisation ultérieure de cryptosystèmes symétriques.
Dans les applications modernes, l'AKC est principalement utilisée pour les signatures numériques et l'échange de clés sécurisé. Dans cette leçon, nous présentons ces deux fonctions clés, puis nous abordons plusieurs variantes de protocoles cryptographiques pour ces fonctions.
Échange de clés avec la cryptographie asymétrique
L'un des problèmes fondamentaux en cryptographie est l'échange de clés sécurisé. Par exemple, si deux parties veulent utiliser le chiffrement symétrique, les deux parties ont besoin de la même clé pour chiffrer et déchiffrer les messages. Mais comment échangent-elles la clé en toute sécurité ? La cryptographie à clé asymétrique répond à cela via des mécanismes d'échange de clés interactifs et non interactifs.
Échange de clés interactif
Un protocole d'échange de clés interactif désigne une méthode par laquelle deux parties collaborent pour créer une clé secrète partagée sur un canal de communication non sécurisé. Cette clé secrète partagée peut ensuite être utilisée pour les tâches de chiffrement et de déchiffrement symétriques.
Le plus connu de ces protocoles est l'algorithme Diffie-Hellman (DH), conçu spécifiquement pour faciliter l'échange de clés. Dans ce protocole, chaque partie génère une paire de clés (publique et privée) et diffuse sa clé publique. Chaque partie utilise ensuite sa propre clé privée et la clé publique de l'autre partie pour générer une clé secrète partagée. DH s'appuie sur les principes de l'arithmétique modulaire pour garantir que les deux parties obtiennent le même secret partagé, même si chaque partie n'a accès qu'à la clé publique de l'autre.
Les cryptosystèmes modernes basés sur la cryptographie sur les courbes elliptiques (ECC) étendent ce concept avec l'échange de clés Diffie-Hellman sur courbe elliptique (ECDH). L'ECDH fonctionne de façon similaire au DH mais utilise les propriétés des courbes elliptiques, ce qui donne un système plus sécurisé et plus efficace.
Figure 2. Protocole d'échange de clés
Échange de clés non interactif
Contrairement aux protocoles d'échange de clés comme DH et ECDH, qui sont interactifs et nécessitent des échanges aller-retour pour décider de la clé symétrique, l'AKC offre aussi des moyens non interactifs d'établir une clé secrète partagée. Dans ces schémas, une partie génère une paire de clés (publique et privée) et partage la clé publique avec l'autre partie. Cette seconde partie génère alors une clé symétrique aléatoire, la chiffre avec la clé publique reçue et la renvoie à la première partie. La première partie utilise sa clé privée pour déchiffrer le message reçu, obtenant ainsi la clé symétrique partagée. Ce schéma est non interactif en ce sens que la clé symétrique est déterminée par une partie et simplement communiquée de manière sécurisée à l'autre partie sous forme chiffrée.
Une considération importante dans l'échange de clés non interactif concerne la différence de longueur en bits entre la clé symétrique que les parties souhaitent échanger et les tailles de messages recommandées en AKC. En général, les clés symétriques modernes ont une longueur comprise entre 128 et 256 bits, tandis que les cryptosystèmes à clé asymétrique comme RSA travaillent avec des tailles de messages d'environ 1024 à 4096 bits. Par conséquent, lors de l'utilisation de l'AKC pour transmettre une clé symétrique, celle-ci doit néanmoins être encodée dans un message plus long de 1024 à 4096 bits pour des raisons de sécurité. Cela peut être réalisé via deux approches :
-
Échange de clés basé sur le rembourrage : Dans cette approche, la clé symétrique plus courte (128-256 bits) est générée en premier, puis un schéma de rembourrage réversible convenu, tel que OAEP, est utilisé pour l'intégrer dans un message plus long (1024-4096 bits). Ce message plus long est chiffré via l'AKC et diffusé comme texte chiffré. Le destinataire déchiffre d'abord le texte chiffré, puis supprime le rembourrage pour extraire la clé symétrique plus courte.
-
Mécanismes d'encapsulation de clés (KEMs) : Avec l'échange de clés basé sur les KEM, un message aléatoire en clair long (1024-4096 bits) est d'abord généré, à partir duquel une clé symétrique plus courte (128-256 bits) peut être extraite via une fonction de dérivation de clé (KDF) convenue. Le texte en clair plus long est chiffré via l'AKC et diffusé au destinataire sous forme de texte chiffré. Le destinataire décode le texte chiffré à l'aide de sa clé privée, puis utilise la KDF pour extraire la clé symétrique plus courte (128-256 bits). Des cryptosystèmes populaires comme RSA, avec leur capacité à chiffrer directement des données, peuvent être utilisés pour implémenter des KEMs.
Figure 3. Mécanisme d'encapsulation de clé
Signatures numériques avec la cryptographie asymétrique
Les signatures numériques sont une autre application puissante de la cryptographie à clé asymétrique. Elles offrent l'authentification, l'intégrité et la non-répudiation, rendues possibles par le fait que dans l'AKC, les entités possèdent des clés privées uniques. L'idée de base des protocoles de signature est que les expéditeurs de messages sécurisés signent numériquement les messages en utilisant leur clé privée unique. Le destinataire vérifie ensuite la signature numérique à l'aide de la clé publique de l'expéditeur. Dans l'AKC, les signatures numériques peuvent être mises en œuvre à l'aide d'algorithmes spécifiquement conçus à cet effet ou à l'aide de cryptosystèmes génériques.
Figure 4. Signatures numériques avec la cryptographie asymétrique
Algorithmes de signature numérique dédiés
Actuellement, la norme de traitement de l'information fédérale américaine (FIPS) pour les signatures numériques est un schéma dédié simplement intitulé l'Algorithme de signature numérique (DSA). De façon assez similaire au protocole Diffie-Hellman, le DSA utilise les propriétés algébriques de l'exponentiation modulaire et des inverses multiplicatifs pour la génération et la vérification des signatures.
L'algorithme de signature numérique sur courbe elliptique (ECDSA) est une variante ECC du DSA, offrant les mêmes fonctionnalités mais avec des clés nettement plus courtes. Cela se traduit par une efficacité accrue, ce qui en fait un choix populaire pour les systèmes avec des contraintes de ressources.
DSA et ECDSA seront illustrés plus en détail par la suite.
Schémas de signature numérique utilisant des cryptosystèmes génériques
En plus des algorithmes dédiés, les signatures numériques peuvent également être générées à l'aide de cryptosystèmes asymétriques génériques, tels que RSA.
RSA, qui sera discuté en détail dans une section ultérieure, exploite également les inverses multiplicatifs modulaires et l'exponentiation modulaire comme opérations fondamentales, mais les combine dans une séquence différente de celle du DSA. Dans RSA, le signataire crée généralement un hachage du message puis chiffre ce hachage avec sa clé privée, créant ainsi la signature numérique. N'importe quelle partie peut alors vérifier cette signature en la déchiffrant avec la clé publique du signataire et en la comparant au message haché.
Applications de la cryptographie asymétrique
La cryptographie à clé asymétrique est omniprésente dans les applications technologiques numériques modernes. Les fonctionnalités de base de l'AKC décrites ci-dessus constituent les briques de construction de nombreux protocoles d'application de plus haut niveau, notamment :
-
Communication sur Internet : La communication sécurisée sur Internet, telle que HTTPS, repose fortement sur la cryptographie à clé asymétrique. Le protocole TLS (Transport Layer Security) et son prédécesseur, SSL (Secure Sockets Layer), utilisent la cryptographie à clé asymétrique lors du processus initial de poignée de main pour établir une clé symétrique, qui est ensuite utilisée pour le reste de la session de communication.
-
Authentification : La cryptographie à clé asymétrique est utilisée pour créer des signatures numériques, permettant à une entité d'authentifier un document ou un message numérique comme provenant d'un expéditeur spécifique. Cela est utilisé dans de nombreux scénarios, de la vérification des mises à jour logicielles aux contrats numériques légalement contraignants.
-
Chiffrement des e-mails : Les protocoles de chiffrement des e-mails tels que PGP (Pretty Good Privacy) et son alternative open source GPG (GNU Privacy Guard) utilisent la cryptographie à clé asymétrique pour garantir que seul le destinataire prévu peut lire le contenu de l'e-mail.
-
Shell sécurisé (SSH) : SSH est un protocole permettant la connexion à distance sécurisée et d'autres services réseau sécurisés sur un réseau non sécurisé. Il utilise la cryptographie à clé asymétrique pour authentifier le serveur auprès du client et, éventuellement, le client auprès du serveur.
-
VPN (réseau privé virtuel) : Le chiffrement à clé asymétrique est utilisé pour établir des connexions sécurisées dans les VPN, garantissant une communication sécurisée sur des réseaux publics.
-
Blockchain et cryptomonnaies : Les technologies blockchain, notamment Bitcoin et Ethereum, utilisent la cryptographie à clé asymétrique. Par exemple, la propriété des bitcoins est établie grâce à des signatures numériques utilisant la cryptographie à clé asymétrique.
-
Autorités de certification : La cryptographie à clé asymétrique est utilisée par les autorités de certification (CA) pour émettre et signer des certificats numériques, utilisés dans les communications TLS, la signature de code, le chiffrement des e-mails, et plus encore. Un certificat numérique associe une clé publique à une entité spécifique (par exemple, une personne ou un serveur).
Figure 5. Émission et signature de certificats numériques avec la cryptographie asymétrique
Sécurité de la cryptographie asymétrique
Plusieurs notions cryptographiques se combinent pour permettre une cryptographie à clé asymétrique sécurisée, notamment :
Confidentialité de la clé privée : L'exigence de sécurité la plus fondamentale de l'AKC est que la clé privée reste secrète. Cependant, puisque la clé privée doit être mathématiquement liée à la clé publique, la confidentialité de la clé privée exige également qu'il soit computationnellement infaisable de dériver la clé privée à partir de la connaissance de la clé publique. Les schémas de génération de clés dans l'AKC s'appuient sur des problèmes mathématiques computationnellement difficiles pour faciliter cette exigence.
Fonctionnalité à trappe Dans l'AKC, les opérations de chiffrement et de déchiffrement impliquent différentes clés complémentaires d'une même paire de clés. Le texte chiffré généré par le chiffrement à l'aide de l'une des clés (par exemple la clé publique) doit être impénétrable pour les tiers, tout en étant facilement déchiffrable par le détenteur de la clé complémentaire (dans ce cas la clé privée). Autrement dit, le chiffrement doit ressembler à une fonction à sens unique avec trappe telle que les tiers ne puissent pas inverser l'opération et récupérer le texte en clair, mais que la clé privée fournisse une trappe secrète permettant une inversion facile. Les algorithmes AKC populaires utilisent l'exponentiation modulaire pour mettre en place un comportement de fonction à sens unique avec trappe.
Aléatoire : Le processus de génération de clés doit également exploiter l'aléatoire pour garantir que les clés sont imprévisibles, car tout motif ou toute prévisibilité dans la génération de clés pourrait être exploité par un attaquant. L'aléatoire est également utilisé pour le rembourrage lors du chiffrement afin de générer des textes chiffrés sémantiquement sécurisés et dans les schémas de signature numérique pour produire des signatures uniques, même lorsque le même message est signé plusieurs fois. Pour cette raison, l'utilisation de générateurs de nombres aléatoires forts est un aspect important de l'AKC.
Grande taille de clé : Comme dans le cas du SKC, de grandes tailles de clés assurent une protection contre les attaques par force brute. Cependant, comme de grandes tailles de clés augmentent également le coût computationnel du processus de chiffrement et de déchiffrement, une solution optimale doit équilibrer les considérations de sécurité et d'efficacité. Le tableau suivant montre les tailles de clés typiques pour divers protocoles et applications de cryptographie à clé asymétrique :
| Protocole | Tailles de clés typiques (en bits) | Application |
|---|---|---|
| RSA | 1024 (obsolète), 2048, 3072, 4096 | Chiffrement, signatures numériques |
| DSA | 1024 (obsolète), 2048, 3072 | Signatures numériques |
| DH | 2048, 3072, 4096 | Échange de clés |
| ECDH | 224, 256, 384, 521 | Échange de clés |
| ECDSA | 224, 256, 384, 521 | Signatures numériques |
Infrastructure à clé publique : Dans l'AKC, les clés privées doivent être gardées secrètes par leurs propriétaires tandis que les clés publiques sont partagées. Il doit exister un mécanisme sécurisé pour gérer et distribuer ces clés publiques entre les utilisateurs. L'infrastructure à clé publique (PKI) fournit un moyen de le faire en utilisant des certificats numériques. Un certificat numérique fournit une preuve d'identité du propriétaire de la clé publique et est émis par une autorité de confiance comme une autorité de certification (qui fait partie d'une PKI). Ainsi, la PKI joue un rôle intégral dans la sécurité des applications modernes utilisant l'AKC en permettant une gestion des clés à grande échelle (en créant, gérant, distribuant et révoquant des certificats numériques).
Risques de sécurité pour la cryptographie asymétrique
Comme indiqué dans le tableau ci-dessus, les algorithmes à clé asymétrique modernes tels que RSA emploient généralement des tailles de clés beaucoup plus grandes que leurs homologues à clé symétrique couramment utilisés, comme AES-128. Même les protocoles basés sur ECC (ECDH et ECDSA) qui ont des tailles de clés plus petites emploient un minimum d'au moins 224 bits pour les clés. Cela implique à son tour qu'une attaque par force brute impliquant une recherche exhaustive de l'espace de clés privées pour identifier la clé correcte est computationnellement intraitable dans un avenir prévisible. Cela reste vrai même si des ordinateurs quantiques étaient déployés pour cette tâche. Par conséquent, les attaques contre l'AKC se concentrent généralement sur l'exploitation d'autres faiblesses potentielles de cryptosystèmes spécifiques. Certains modes d'attaque bien documentés ciblent :
-
La faiblesse algorithmique en utilisant des moyens mathématiques et computationnels sophistiqués pour saper les hypothèses de difficulté utilisées pour formuler les algorithmes à clé asymétrique. Par exemple, la sécurité de RSA repose sur la difficulté de factoriser de grands nombres premiers, et des avancées computationnelles récentes ont permis la factorisation réussie de clés RSA de 829 bits. Par conséquent, RSA 1024 bits est actuellement obsolète. Comme cela sera discuté plus tard, le principal risque posé par les ordinateurs quantiques à l'AKC entre également dans cette catégorie.
-
L'aléatoire imparfait, qui peut conduire à une faiblesse dans le processus de génération de clés. Par exemple, si le générateur de nombres aléatoires utilisé pour créer les clés est défectueux et génère des clés qui ne sont pas vraiment aléatoires, un attaquant pourrait être en mesure de prédire les clés.
-
Les failles d'implémentation telles que des erreurs dans l'implémentation des algorithmes cryptographiques qui révèlent par inadvertance des informations sur les clés. Par exemple, un rembourrage incorrect peut potentiellement révéler des détails sur les clés.
-
Les canaux auxiliaires qui désignent la fuite d'informations depuis le système physique qui effectue la cryptographie. Ces fuites pourraient prendre la forme d'informations de synchronisation, de consommation d'énergie, ou même de son, qui peuvent être exploitées dans ce qu'on appelle une attaque par canal auxiliaire. Par exemple, analyser la durée des opérations cryptographiques pourrait révéler le nombre de '1' dans une clé binaire. Cette fuite apparemment innocente réduit considérablement l'espace de recherche, dévoilant des solutions potentielles à des problèmes qui semblaient initialement insurmontables.
-
L'échange de clés en interceptant les clés pendant leur échange, comme dans une attaque de l'homme du milieu (MITM). Le protocole DH est susceptible aux attaques MITM si des étapes d'authentification supplémentaires ne sont pas incorporées.
-
Le stockage des clés en visant à voler les clés depuis des stockages mal sécurisés. Cela inclut les attaques physiques telles que la manipulation ou le vol de dispositifs de stockage.
Sécuriser les cryptosystèmes à clé asymétrique contre la variété des attaques possibles est donc une tâche importante impliquant des considérations mathématiques, matérielles, logicielles, logistiques et juridiques.
RSA
L'algorithme RSA (Rivest-Shamir-Adleman) est l'un des premiers cryptosystèmes à clé publique et est largement utilisé pour la transmission sécurisée de données. C'est un cryptosystème polyvalent en ce sens qu'il fournit les opérations nécessaires pour permettre le chiffrement, le déchiffrement, les signatures numériques et l'échange de clés dans un cadre commun.
Dans cette section, nous allons illustrer la cryptographie à clé asymétrique (AKC) en utilisant RSA à travers des exemples simples.
Nous utiliserons le scénario standard de deux parties, Alice et Bob, qui souhaitent communiquer de manière sécurisée à l'aide de l'AKC.
L'algorithme RSA
L'algorithme RSA de base implique quatre opérations : la génération de clés, la distribution de clés, le chiffrement et le déchiffrement :
-
Génération de clés :
Les clés publique et privée sont générées sur la base de principes mathématiques autour des nombres premiers, où les calculer est facile, mais l'inverse est difficile.
Nous allons y faire référence ainsi :
- Clé publique :
- Clé privée :
Remarque : est commun à la clé publique et à la clé privée, et est connu comme le modulus. Nous devrons l'utiliser plus tard.
Détail mathématique
- Choisis deux nombres premiers distincts, et .
- choisis aléatoirement (pour la sécurité).
- Ils doivent être de grandeurs similaires, mais différer en longueur de quelques chiffres, pour rendre la factorisation plus difficile.
- Les nombres premiers peuvent être choisis efficacement à l'aide d'un test de primalité.
- Calcule .
- est le modulus pour les deux clés publique et privée.
- Calcule la fonction indicatrice d'Euler .
- L'indicatrice est censée rester secrète et est généralement supprimée après la génération de clés.
- Choisis un entier tel que et .
- c'est-à-dire que et doivent être coprimes.
- Ce nombre constitue l'exposant de la clé publique et est généralement choisi comme un petit nombre pour l'efficacité computationnelle.
- Le nombre premier est souvent utilisé.
- Calcule pour satisfaire la relation de congruence .
- C'est-à-dire que est l'inverse multiplicatif de modulo .
- Cela est plus efficacement calculé à l'aide de l'algorithme euclidien étendu.
- Ce nombre est l'exposant de la clé privée.
- La clé publique est constituée de , et la clé privée est .
-
Distribution de clés :
- La clé publique est rendue publique à ceux qui souhaitent envoyer un message
- La clé privée est gardée secrète.
-
Chiffrement :
- Alice souhaite envoyer un message à Bob. Dans ce cas, un simple entier
- Alice utilise la clé publique de Bob pour chiffrer le message en texte chiffré
Détail mathématique
- est un