Aller au contenu
Blockchain Association of Cameroon
BAC-L0-FOUND-1053 h

Clés publiques, clés privées, signatures

La cryptographie asymétrique comme mécanisme d'autorité : ce que prouve une signature, qui peut la produire, et pourquoi la clé privée est l'identité elle-même.

  • Générer une paire de clés et signer un message vérifiable par un tiers
  • Expliquer la différence entre signer et chiffrer
  • Décrire ce qui se passe, irrémédiablement, quand une clé privée fuit

Dans un réseau où personne ne connaît personne, une seule question compte : qui a le droit de dire « ce transfert est autorisé » ? La cryptographie asymétrique y répond avec deux clés mathématiquement liées : une clé privée que vous gardez, une clé publique que vous montrez à tout le monde. Dans cet atelier, vous générez une paire de clés dans votre navigateur, vous signez un message, vous le faites vérifier, puis vous cassez la signature pour voir ce qu'elle protège vraiment. Vous apprendrez aussi ce qu'une signature ne prouve pas, pourquoi signer n'est pas chiffrer, et pourquoi une fuite de clé privée ne se répare pas.

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-256Ed25519
Clé privée32 octets32 octets (graine)
Signature (forme brute)64 octets64 octets
Utilisé icioutil du navigateurlaboratoire 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.

Vérifier une signature

Leçons 2/4 · 20 min

Signer et vérifier : ce que la signature prouve

La question de départ

Aminata reçoit un message : « Payer 5 000 FCFA à Didier ». Une signature est jointe. Que sait-elle exactement, si la vérification réussit ?

Le concept

Il existe deux opérations :

  • signer(clé_privée, message) → une signature (64 octets en forme brute pour ECDSA P-256 ou Ed25519) ;
  • vérifier(clé_publique, message, signature) → vrai ou faux, rien d'autre.

En pratique, la signature porte sur l'empreinte du message (voir l'atelier 104) : ECDSA signe une empreinte du message (l'outil de la page utilise SHA-256 ; ECDSA lui-même ne l'impose pas), Ed25519 intègre son propre hachage. C'est pourquoi on peut signer un fichier de 1 Go aussi vite qu'un SMS.

Exemple détaillé avec l'outil

Signez dans l'outil le texte Payer 5000 FCFA a Didier, puis faites cinq vérifications :

Message vérifiéSignatureClé publiqueRésultat
Payer 5000 FCFA a Didierla vôtrela vôtrevrai
Payer 5001 FCFA a Didierla vôtrela vôtrefaux (un caractère change)
Payer 5000 FCFA a Didierune signature modifiéela vôtrefaux
Payer 5000 FCFA a Didierla vôtreclé publique d'une autre pairefaux
Payer 5000 FCFA a Didierla vôtre, envoyée une seconde foisla vôtrevrai (!)

La dernière ligne est la plus instructive. Voyons ce que l'on peut conclure.

Ce que la signature prouve (sous hypothèses)

Si la vérification réussit, et si la clé privée n'a pas fuité et si le schéma est sûr :

  1. Authenticité de la clé : le message a été signé par quelqu'un qui détient la clé privée correspondant à cette clé publique.
  2. Intégrité : le message n'a pas été modifié d'un seul bit depuis la signature.

Ce que la signature ne prouve pas

  • Pas l'identité d'une personne. Elle prouve l'usage d'une clé. Qui détient cette clé ? Pour un site web, une autorité de certification signe un document liant un nom de domaine à une clé publique ; sur une blockchain, on suit simplement la clé comme un pseudonyme.
  • Pas la vérité du contenu. On peut signer un mensonge très proprement.
  • Pas la fraîcheur. Une signature ne porte pas la date. Le rejeu (cinquième ligne) reste valide : c'est pourquoi les transactions des chaînes à comptes (Ethereum, et notre réseau d'entraînement) signent aussi un nonce (compteur propre au compte) et un identifiant de chaîne, comme dans l'exercice bac-practice|chain=…|nonce=… ci-dessous. Bitcoin, lui, n'a ni nonce de compte ni identifiant de chaîne dans ses transactions : la signature porte sur la sortie précise qui est dépensée, et une sortie déjà dépensée ne peut plus l'être, ce qui joue un rôle comparable contre le rejeu.
  • Pas l'intention. Une clé a signé ; un humain a-t-il voulu signer ? Un logiciel malveillant qui utilise la clé produit des signatures parfaitement valides.
  • Pas la confidentialité. Le message reste lisible par tous.

Une différence avec le HMAC

Dans l'atelier 104 vous avez vu qu'un HMAC authentifie un message avec un secret partagé. Le destinataire, qui connaît ce secret, pourrait donc fabriquer lui-même un HMAC valide. Avec une signature, le vérificateur n'a que la clé publique : il peut vérifier, il ne peut pas signer. C'est ce qui permet à un tiers de trancher un désaccord.

En bref

  • vérifier répond vrai ou faux pour trois objets : message, signature, clé publique.
  • Vrai = « cette clé a signé ces octets », sous hypothèse que la clé est restée secrète.
  • Ni identité, ni vérité, ni fraîcheur, ni intention.

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.

Vérifier une signature

Leçons 3/4 · 15 min

Signer n'est pas chiffrer

La question de départ

On entend souvent : « signer, c'est chiffrer avec sa clé privée ». C'est faux pour les schémas de cet atelier, et cette phrase cause de vraies erreurs. Voyons pourquoi.

Deux buts différents

ChiffrerSigner
Butconfidentialité : seul le bon destinataire litauthenticité et intégrité : tout le monde vérifie
Qui fait quoichiffre avec la clé publique du destinataire, déchiffre avec sa clé privéesigne avec sa propre clé privée, vérifie avec la clé publique du signataire
Le message aprèsillisible sans la cléreste lisible
Sortie utileun texte chiffréune signature de 64 octets, jointe au message

Dans une signature, le sens est donc inverse de celui du chiffrement : le secret sert à produire, le public sert à contrôler.

Pourquoi la formule « chiffrer avec la clé privée » est trompeuse

  • ECDSA et Ed25519 ne sont pas des algorithmes de chiffrement. Ils ne savent faire que signer et vérifier : on ne peut pas « déchiffrer » une signature pour en tirer le message.
  • Même pour RSA, où l'image existe historiquement, les implémentations sûres ajoutent un remplissage spécifique à la signature, différent de celui du chiffrement. Utiliser une primitive pour l'autre mène à des failles.
  • Bonne pratique : une clé pour un seul usage. Ne réutilisez pas une clé de signature pour chiffrer, ni l'inverse.

Exemple détaillé : ce qu'un observateur voit

Aminata envoie à Didier, sur un réseau public :

  1. Message signé, non chiffré : l'observateur lit « Payer 5000 FCFA à Didier » ; il ne peut pas le modifier sans casser la signature ; il peut le copier et le rejouer (leçon précédente).
  2. Message chiffré, non signé : l'observateur ne lit rien ; mais n'importe qui connaît la clé publique de Didier et a donc pu écrire ce message. Didier ne sait pas qui l'a envoyé.
  3. Les deux : on obtient confidentialité et authenticité, avec deux opérations et, de préférence, deux paires de clés.

Dans une blockchain publique, les transactions sont signées mais non chiffrées : tout le monde doit pouvoir les vérifier. Le chiffrement n'y est pas le mécanisme de base.

À vous

Dans l'outil HMAC, calculez le HMAC d'un message avec la clé secret1, puis vérifiez que quiconque connaît secret1 peut produire la même valeur. Comparez avec l'outil de signature : ici, la vérification n'exige pas de connaître le secret de signature.

Ce que cela ne garantit pas

Signer ne cache rien. Chiffrer ne prouve pas qui a écrit. Ni l'un ni l'autre ne protège de la perte de la clé privée.

En bref

  • Chiffrer = confidentialité ; signer = authenticité et intégrité.
  • ECDSA et Ed25519 ne chiffrent pas.
  • Un message signé reste lisible.

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.

Vérifier une signature

Outil interactif

HMAC

Code d'authentification de message : une empreinte qui dépend d'un secret partagé. Sans la clé, impossible de la recalculer.

Format de clé
Format de message

HMAC (hexadécimal)

…

Une clé vide est acceptée (elle équivaut à une clé de zéros).

Leçons 4/4 · 20 min

Quand la clé privée fuit : un dommage irréversible

La question de départ

Un employé colle sa clé privée dans un groupe de discussion, puis supprime le message trente secondes plus tard. A-t-il réglé le problème ?

Non. Pour comprendre pourquoi, il faut voir ce que le réseau peut, et ne peut pas, distinguer.

Pourquoi c'est irréversible

La vérification ne teste qu'une chose : « cette signature correspond-elle à cette clé publique ? ». Elle n'a aucun moyen de savoir qui tient la clé privée. Après une fuite :

  1. Le voleur produit des signatures valides, indiscernables des vôtres.
  2. Sur une blockchain, il peut vider le compte d'un seul message. Les transactions confirmées ne s'annulent pas.
  3. Il n'y a, en règle générale, pas d'autorité à qui demander de « révoquer » une clé : c'est le principe même du système. Votre seule défense est de déplacer les fonds vers une nouvelle clé avant le voleur, et c'est une course.
  4. Les signatures déjà faites restent valides. Sans horodatage fiable, il devient difficile de dire si un vieux document a été signé avant ou après la fuite.

Supprimer le message n'efface pas les copies : un robot a pu l'avoir lu en une seconde. Une clé qui a été visible est à considérer comme compromise pour toujours.

Une autre façon de perdre la clé : un nonce raté

ECDSA utilise, à chaque signature, un nombre secret à usage unique k (un « nonce » au sens ECDSA, à ne pas confondre avec le nonce de compte). Si deux signatures utilisent le même k, la clé privée d se calcule à partir des deux. Voici le principe, sur un modèle jouet : un petit nombre premier n = 23. Dans le vrai ECDSA, n est d'environ 2^256 et r vient d'un calcul sur courbe ; ici r est simplement donné, car seule l'algèbre compte.

La signature est : s = k⁻¹ · (z + r·d) mod n, où z est l'empreinte du message, r est identique pour les deux signatures (même k) et d est la clé privée.

Exemple : d = 9 (secret), k = 5 (réutilisé), r = 7.

  • Message 1 : z₁ = 10, donc s₁ = 5⁻¹ · (10 + 7·9) = 14 · 73 mod 23 = 10 (car 5⁻¹ = 14 mod 23, et 73 mod 23 = 4, 14·4 = 56 = 10 mod 23).
  • Message 2 : z₂ = 3, donc s₂ = 14 · (3 + 63) = 14 · 66 mod 23 ; 66 mod 23 = 20 ; 14·20 = 280 mod 23 = 4. Donc s₂ = 4.

L'observateur ne voit que (r, s₁, z₁), (r, s₂, z₂). Il calcule :

  • k = (z₁ − z₂) · (s₁ − s₂)⁻¹ = 7 · 6⁻¹ mod 23 = 7 · 4 = 28 = 5 ✔
  • d = (s₁·k − z₁) · r⁻¹ = (50 − 10) · 7⁻¹ = 40 · 10 mod 23 = 400 mod 23 = 9 ✔

Deux signatures, une clé privée. Ce défaut a été exploité dans de vrais produits à cause de générateurs aléatoires défaillants ; Ed25519 le prévient en dérivant k de façon déterministe de la clé et du message (c'est une propriété de conception de ce schéma) ; l'ECDSA déterministe de la RFC 6979 fait de même. Dans notre outil de navigateur, le générateur d'aléa du système fait ce travail : sa qualité compte.

Ce que cela ne garantit pas

Une sauvegarde de la clé (une phrase de récupération, par exemple) protège contre la perte, mais augmente le risque de fuite : chaque copie est une cible. Il faut arbitrer, pas cocher une case.

En bref

  • Le réseau ne distingue pas le propriétaire du voleur : il ne voit que des signatures valides.
  • Une clé exposée est compromise pour toujours ; on déplace les fonds, on ne « révoque » pas.
  • Un nonce ECDSA réutilisé révèle la clé privée.

Laboratoire guidé

Dans ce laboratoire, vous utilisez l'outil de signature de votre navigateur (ECDSA P-256, courbe NIST ; le laboratoire autonome utilisera ed25519). Votre clé privée est générée dans la page et ne quitte jamais votre navigateur : elle n'est ni affichée, ni envoyée au serveur. Le serveur ne reçoit que la clé publique et la signature, qu'il vérifie lui-même. Le réseau de pratique du BAC est une simulation : aucune valeur réelle.

Le navigateur ne remplace pas un vrai terminal : ce laboratoire entraîne la lecture et le raisonnement ; la pratique réelle est dans le laboratoire autonome.

Un compte certifié est nécessaire

Les activités notées enregistrent des résultats à votre nom et servent de base à un titre. Elles exigent donc un dossier certifiant complet et un consentement en vigueur. Remplir le dossier ne vérifie pas votre identité ; le Secrétariat peut ensuite la vérifier (badge « Vérifié »).

  1. 1.Construire, signer et soumettre

    Lisez l'énoncé généré : solde, nonce, destinataire, frais minimum. Choisissez des frais valides, puis construisez exactement le texte à signer. Dans l'outil, générez une paire de clés, signez ce texte, exportez la clé publique et la signature, et collez-les dans les champs. Une seule virgule de différence dans le texte invalide la signature : vérifiez d'abord dans l'outil qu'il répond « Signature VALIDE ».

    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.

    Vérifier une signature

  2. 2.Falsifier et observer l'échec

    Dans l'outil, signez Payer 100 FCFA a Didier. Vérifiez : « Signature VALIDE ». Remplacez 100 par 900 sans toucher à la signature et vérifiez à nouveau. Puis générez une seconde paire de clés, gardez la même signature et le message d'origine, mais vérifiez avec la clé publique de la seconde paire. Notez les trois résultats, puis répondez à la question de contrôle.

    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.

    Vérifier une signature

  3. 3.Pourquoi le nonce est signé

    Reprenez le texte de l'étape 1 : bac-practice|chain=…|to=…|amount=…|fee=…|nonce=…. Imaginez maintenant une variante sans nonce ni chain. Une signature valide de cette variante, envoyée deux fois, resterait valide les deux fois (vous l'avez constaté dans la leçon 2). Répondez à la question de contrôle sur le rôle de ces champs.

Exercice de sécurité — Deux signatures, un nonce : retrouver la clé

Un petit portefeuille jouet utilise ECDSA sur un modèle jouet avec le nombre premier n = 23 (le vrai n fait environ 2^256 ; ici seule l'algèbre est réelle, et r est donné). Son générateur aléatoire est défaillant : il a produit le même k pour deux signatures.

Vous observez, publiquement :

Signaturerz (empreinte)s
11184
211192

Formules (voir la leçon 4) : k = (z₁ − z₂) · (s₁ − s₂)⁻¹ mod 23, puis d = (s₁·k − z₁) · r⁻¹ mod 23.

Table des inverses modulo 23 (à utiliser telle quelle) :

a1234567891011
a⁻¹1128614410318721

Pour un nombre négatif, ajoutez 23 d'abord (par exemple −11 devient 12).

Calculez la clé privée d du portefeuille jouet et saisissez-la. Puis demandez-vous : que doit faire son propriétaire, maintenant, et que ne peut-il pas faire ?

Questionnaire de l'atelier

Huit questions tirées d'une réserve plus large, seuil de réussite 70 %. Il s'ouvre quand tous les points de contrôle du laboratoire sont réussis. Vous pouvez le repasser : le tirage change.

Un compte certifié est nécessaire

Les activités notées enregistrent des résultats à votre nom et servent de base à un titre. Elles exigent donc un dossier certifiant complet et un consentement en vigueur. Remplir le dossier ne vérifie pas votre identité ; le Secrétariat peut ensuite la vérifier (badge « Vérifié »).

Laboratoire autonome (hors du site)

Non noté en ligne : à réaliser sur votre machine et à publier sur votre dépôt Git.

À faire sur votre machine, hors du site, avec un dépôt Git. Objectif : vérifier une signature sans réutiliser le code de la démonstration, puis la mettre à l'épreuve.

  1. Avec OpenSSL (version 3 ou plus récente), générez une clé ed25519 d'essai (openssl genpkey -algorithm ed25519), exportez sa clé publique, signez un petit fichier de test. Vous trouverez les options exactes avec openssl pkeyutl -help (la signature d'un message brut demande une option dédiée).
  2. En Python, avec la bibliothèque cryptography, écrivez un script verify.py qui prend en arguments un fichier de clé publique, un message et une signature, et affiche VALIDE ou INVALIDE. N'importez pas le code de l'atelier.
  3. Testez votre vérificateur sur : (a) une signature correcte ; (b) un message modifié d'un octet ; (c) une signature modifiée d'un octet ; (d) la clé publique d'une autre paire ; (e) les vecteurs de test publiés dans la norme RFC 8032 pour Ed25519.
  4. Dans un court fichier NOTES.md, écrivez en quelques phrases ce que votre vérificateur prouve et ce qu'il ne prouve pas (identité, fraîcheur, intention).

Ne versez jamais une clé privée dans l'historique Git, même d'essai : ajoutez-la à .gitignore dès la création. Livrable : verify.py, vos cas de test, NOTES.md.

À retenir

  • Une paire de clés se compose d'une clé privée secrète et d'une clé publique qui s'en déduit à sens unique.
  • Une signature valide prouve « cette clé a signé exactement ces octets », rien de plus : ni identité, ni vérité, ni fraîcheur, ni intention.
  • Signer garantit authenticité et intégrité sans rien cacher ; chiffrer garantit la confidentialité. Ce sont deux usages, deux clés.
  • Une clé privée exposée est compromise pour toujours : le réseau ne distingue pas le voleur du propriétaire.
  • Un nonce ECDSA réutilisé suffit à révéler la clé privée ; la qualité du hasard fait partie de la sécurité.

Idées fausses courantes

  • Idée reçue : « Une signature valide prouve que le message vient de la personne dont c'est la clé. »

    En réalité : Elle prouve qu'une clé privée précise a été utilisée. Savoir à qui appartient cette clé, et si elle n'a pas fuité, est une question séparée.

  • Idée reçue : « Signer, c'est chiffrer avec la clé privée : le message est donc protégé. »

    En réalité : Un message signé reste lisible par tous. Ed25519 et ECDSA ne chiffrent pas du tout ; pour la confidentialité, on utilise un chiffrement distinct.

  • Idée reçue : « Si ma clé privée fuit, je la révoque auprès du réseau et tout rentre dans l'ordre. »

    En réalité : Sur une blockchain publique, il n'y a en général rien à révoquer : la seule parade est de déplacer les fonds vers une nouvelle clé avant le voleur.

  • Idée reçue : « Une signature valide ne peut pas être réutilisée par quelqu'un d'autre. »

    En réalité : Elle peut être rejouée telle quelle. C'est pourquoi les transactions des chaînes à comptes (Ethereum, notre réseau d'entraînement) signent aussi un nonce de compte et un identifiant de chaîne ; Bitcoin obtient un effet comparable parce qu'une sortie ne se dépense qu'une fois.

Glossaire

Clé privée
Nombre secret tiré au hasard (32 octets pour P-256 et Ed25519) qui permet de produire des signatures. Ne doit jamais être partagé.
Clé publique
Valeur calculée à partir de la clé privée par une opération à sens unique ; elle sert à vérifier les signatures et peut être publiée.
Signature
Valeur (64 octets en forme brute pour ECDSA P-256 et Ed25519) produite avec la clé privée sur un message ; n'importe qui la vérifie avec la clé publique.
Rejeu
Renvoi d'un message signé valide, tel quel, à un autre moment. La signature seule ne l'empêche pas.
Nonce (ECDSA)
Nombre secret à usage unique k, utilisé à chaque signature ECDSA. Le réutiliser ou le rendre prévisible révèle la clé privée.