Signez sans connaître la clé privée dans ECDSA

Cet article a été publié pour la première fois sur Medium.
Nous montrons comment générer une signature valide sans connaître la clé privée à l’aide de l’algorithme de signature numérique à courbe elliptique (ECDSA).

Signature ECDSA

Alice possède donc une clé privée (d) et une clé publique (Q = dG). Elle signe un message (m) avec les étapes suivantes :

  • Hachez le message : h = HASH(m)
  • Créez un nombre aléatoire k et calculez R = kG. Trouvez la coordonnée x de R r
  • Calculez s = (h + rd)/k
  • La signature est le couple (r, s). R et s ne sont que des nombres scalaires.

    Signer sans connaître la clé privée

    Classiquement, Alice doit connaître une clé privée pour générer une signature valide par rapport à sa clé publique. Remarquablement, une signature valide peut être générée sans connaître la clé privée comme suit :

  • Générez un nombre aléatoire r. S'il n'y a pas de point R sur la courbe avec r comme coordonnée x, essayez simplement une autre valeur de r
  • Générez un nombre aléatoire s
  • Résolvez la clé publique sous la forme Q = (sR – hG)/r
  • (r, s) est une signature valide pour la clé publique Q et le message m. Pour comprendre pourquoi, nous pouvons déduire Q comme suit :
    s = (h + rd)/k
    sk = h + rd
    skG = hG + rdG
    sR = hG + rQ
    Q = (sR – hG)/r
    Nous appelons Q a sans clé clé publique, car elle n’est pas dérivée d’une clé privée connue. Dans le contrat, appelons une clé publique à clé s'il est dérivé d'une clé privée connue, comme cela se fait généralement.
    Notez qu'une signature est générée en premier avant une clé publique est dérivée, ce qui est à l'opposé d'une signature ECDSA classique.

    Conséquences

    Si une clé publique est générée sans clé, seule la personne qui la génère peut produire une signature valide dessus, avec la signature et le message avec hachage h. La signature et le message font ici ensemble office de clé privée, qui existe mais est inconnu. Notez que le hachage h du message est utilisé et donc validé dans le calcul de Q, ce qui signifie que la signature est valable uniquement pour m, mais pas pour tout autre message. La signature et le message sont nécessaires pour que la signature soit vérifiée par rapport à la clé publique.

    Clé sans clé ou clé à clé

    La clé privée d'une clé publique avec clé est connue, tandis que celle d'une clé sans clé est inconnue. Dans un scénario avec clé, la clé publique est connue avant la signature, alors que c'est l'inverse dans un scénario sans clé.
    En regardant une clé publique seulil est impossible de déterminer s'il est sans clé ou avec clé.
    Même si une signature est révélée pour un message, il est impossible de décider si la clé publique est keyless ou non puisque la signature peut provenir d'une clé privée ou générée à l'avance.
    Cependant, si Alice peut signer sur un message choisi par Bob, il est très probable qu'elle connaisse la clé privée puisqu'elle ne connaît pas à l'avance le message commis dans la clé publique et ne peut pas générer une signature valide.
    S'il existe des signatures pour deux messages différents, même tous deux choisis par Alice, nous pouvons être sûrs que la clé publique est saisie.

    Utilisation dans Bitcoin

    Il est allégué que la clé publique (notée Q₀) dans la transaction Genesis Coinbase de Bitcoin est sans clé. Si tel est le cas, celui qui possède la signature peut signer un message, celui utilisé pour calculer Q₀. Il ne peut signer aucun autre message.
    Cependant, la signature n'est valable que hors chaîne, mais pas en chaîne. Les pièces envoyées à ce Q₀ ne peuvent pas être dépensées avec une telle signature, y compris celles envoyées après le bloc Genesis¹. Pour voir pourquoi, nous devons regarder quel message m est signé lors de la création d'une transaction. Cela comprend essentiellement les dépenses courantes ainsi que la production dépensée. La sortie contient Q₀ dans sa partie script, ce qui signifie que m dépend de Q₀. Cependant, Q₀ lui-même dépend du hachage de h, m. Cette dépendance circulaire (pour obtenir Q₀, il faut d’abord m ; mais pour obtenir m, il faut d’abord Q₀), semblable à une signature qui ne peut pas se signer dans Bitcoin, empêche de générer Q₀.
    Notez que cela s'applique à n'importe quelle clé publique dans Bitcoin, pas seulement à Q₀.

    Mise en œuvre

    Vous trouverez ci-dessous un exemple fonctionnel complet dans lequel une signature est générée sans connaître la clé privée.
    N’importe qui peut l’exécuter et le vérifier indépendamment. Un test est présenté ci-dessous.

    Les références

  • Blake, IF, Seroussi, G. et Smart, NP (éd.) (2005) Advances in Elliptic Curve Cryptography. Cambridge : Cambridge University Press (série de notes de cours de la London Mathematical Society)
  • Crédit graphique : Buchanan, William J (2024). Algorithme de signature numérique à courbe elliptique (ECDSA). Asecuritysite.com. https://asecuritysite.com/ecdsa/ecdsa2
  • ***
    La sortie Coinbase dans le bloc Genesis ne peut pas être dépensée même si la clé publique qu'il contient est saisie, car elle n'est pas incluse dans l'ensemble UTXO. https://gist.github.com/msinkec/5eaf5aa97ed0f5e8d66e7e32fd8b1a0a
    Regarder : L'identité numérique et les actifs numériques permettent le Web3
    Nouveau sur la blockchain ? Consultez la section Blockchain pour les débutants de CoinGeek, le guide de ressources ultime pour en savoir plus sur la technologie blockchain.