Leçons 1/4 · 15 min
Une paire de clés : un secret et sa preuve publique
La question de départ
Vous envoyez 5 000 FCFA par monnaie mobile. L'opérateur vous demande votre code PIN. Il vérifie que le code est le bon : pour cela, il doit connaître le secret (ou en détenir de quoi le contrôler). Si quelqu'un de l'opérateur est malhonnête, votre secret est en danger.
Sur un réseau ouvert, il n'y a pas d'opérateur de confiance. Il faut un moyen de prouver « c'est bien moi » sans jamais donner le secret à celui qui vérifie. C'est le but d'une paire de clés.
Le concept
Une paire de clés se compose de deux nombres liés :
- la clé privée : un nombre secret, tiré au hasard. Elle fait 32 octets (256 bits) pour les courbes elliptiques courantes comme P-256 ou Ed25519 ;
- la clé publique : calculée à partir de la clé privée par une opération à sens unique. On peut la publier.
« À sens unique » signifie : aller de la clé privée à la clé publique est rapide ; revenir en arrière est, d'après l'état actuel des connaissances, infaisable pour des clés bien choisies. Ce n'est pas une preuve mathématique absolue : c'est une hypothèse de difficulté (le logarithme discret sur courbe elliptique) que tous les experts testent depuis des décennies. Un ordinateur quantique assez grand casserait cette hypothèse ; on n'en dispose pas aujourd'hui, mais c'est une limite connue.
Combien de clés privées possibles ?
Une clé privée de 256 bits peut prendre environ 2^256 ≈ 1,16 × 10^77 valeurs. Deux personnes qui tirent au hasard ne tomberont pas sur la même, à condition que le hasard soit de qualité cryptographique. Un générateur faible (par exemple la fonction Math.random d'un navigateur) rend la clé devinable. Votre navigateur utilise pour cela le générateur du système, pas Math.random.
Deux familles d'algorithmes dans cet atelier
| ECDSA P-256 | Ed25519 | |
|---|---|---|
| Clé privée | 32 octets | 32 octets (graine) |
| Signature (forme brute) | 64 octets | 64 octets |
| Utilisé ici | outil du navigateur | laboratoire autonome |
Le catalogue du cours cite ed25519 pour le laboratoire local ; l'outil du navigateur, lui, utilise ECDSA sur la courbe P-256 parce que c'est ce que l'API de chiffrement du navigateur (WebCrypto) offre partout. Les idées sont les mêmes : une clé privée signe, une clé publique vérifie. Bitcoin utilise une autre courbe (secp256k1) ; Ethereum aussi. Les concepts transfèrent, les octets non.
À vous
Ouvrez l'outil ci-dessous et générez une paire de clés. Notez que la clé privée n'est jamais affichée : elle reste dans la mémoire de votre navigateur. Exportez la clé publique : c'est du texte en base64 que vous pourriez envoyer à n'importe qui.
Ce que cela ne garantit pas
Avoir une paire de clés ne dit rien de qui vous êtes. N'importe qui peut en générer mille en une seconde. Une clé publique n'est qu'un nombre ; l'associer à une personne ou une entreprise demande autre chose (voir la leçon suivante).
En bref
- La clé privée est un grand nombre aléatoire secret ; la clé publique s'en déduit à sens unique.
- Ce sens unique est une hypothèse de difficulté, pas une preuve absolue.
- Une paire de clés ne prouve aucune identité par elle-même.
Outil interactif
Signature ECDSA P-256
Générez une paire de clés dans votre navigateur, signez un message, puis vérifiez la signature.
La clé privée est créée avec extractable: false : le navigateur la garde en mémoire sans jamais permettre de l'exporter, et elle n'est ni affichée ni stockée. Elle ne vit que dans cet onglet : recharger la page la perd.
Clé publique (SPKI, base64)
Aucune clé pour l'instant. Générez une paire pour signer.Signature (base64, format P1363 : r ‖ s, 64 octets)
…ECDSA avec SHA-256 sur la courbe P-256. WebCrypto renvoie r et s concaténés (32 + 32 octets), pas l'encodage DER.
