Aller au contenu principal
Cryptographie

Clé publique

La clé publique est dérivée de la clé privée par multiplication scalaire sur la courbe secp256k1. Elle peut être partagée sans risque pour recevoir des fonds. À partir d'elle, on calcule l'adresse Bitcoin. Elle ne révèle jamais la clé privée correspondante.

Définition cryptographique

Une clé publique sur Bitcoin est un point sur la courbe elliptique secp256k1, obtenu en multipliant le point générateur G par la clé privée :

P = sk · G

sk est la clé privée (256 bits), G le point générateur fixé dans le protocole, et P le résultat. Cette opération est triviale dans un sens (calcul de P depuis sk), mais inversement infaisable (retrouver sk depuis P revient au problème du logarithme discret, considéré comme cryptographiquement dur).

Format binaire

| Format | Taille | Préfixe | |--------|--------|---------| | Non compressé (legacy) | 65 octets | 0x04 + x (32) + y (32) | | Compressé | 33 octets | 0x02 ou 0x03 + x (32) | | x-only (Schnorr/Taproot) | 32 octets | x (32) seul |

Depuis Taproot, les clés sont stockées en format x-only, ce qui économise un octet et simplifie les signatures Schnorr. Tous les wallets modernes utilisent les versions compressées ou x-only.

Du pubkey à l'adresse

La clé publique n'est pas directement l'adresse Bitcoin. Plusieurs transformations interviennent selon le type d'adresse :

| Type | Construction | |------|-------------| | P2PKH (legacy 1...) | Base58(0x00 + RIPEMD160(SHA256(pubkey))) | | P2WPKH (bech32 bc1q...) | bech32(witness_v0_keyhash) | | P2TR (bech32m bc1p...) | bech32m(x-only pubkey tweaked) |

L'adresse est donc un hash (ou un encodage taproot) de la clé publique, jamais la clé brute. Cela renforce la confidentialité avant la première dépense et offre une protection partielle contre les attaques quantiques futures (post-Shor, le hash protège tant que l'adresse n'est pas dépensée).

Cas d'usage des clés publiques

| Usage | Détail | |-------|--------| | Recevoir | Adresse dérivée pour réception | | Vérifier signature | ECDSA ou Schnorr verify | | Multisig | Combinaison de plusieurs pubkeys | | MuSig2 | Agrégation cryptographique | | Dériver enfant | BIP-32 sur xpub | | Lightning | Identité de nœud (node_id) |

Pourquoi c'est sûr de partager

Donner sa clé publique ne donne pas plus que ce que le réseau Bitcoin sait déjà après une dépense : tout dépensé révèle sa pubkey via la signature. La clé publique en elle-même ne permet pas de signer, donc pas de voler. Ce qui doit rester secret, c'est la clé privée.

Risques résiduels

  • Une pubkey réutilisée révèle un identifiant constant (mauvais pour la confidentialité)
  • Une menace quantique future (Shor) pourrait permettre de retrouver sk depuis P
  • Les addresses non utilisées (jamais dépensées) sont mieux protégées car le pubkey n'est pas révélé

C'est pourquoi le « no address reuse » est une règle d'or, tout comme l'usage de chaque adresse une seule fois.

À retenir

La clé publique est l'élément que vous partagez (via une adresse) pour recevoir des bitcoins. Sa sécurité repose sur le problème du logarithme discret. Elle ne permet pas de signer, mais sa réutilisation casse la confidentialité.

Termes lies

← Retour au glossaire complet

Glossaire inspire du dictionnaire de Loic Morel sur Pandul.fr.