Les signatures de cercle expliquées : comment une crypto cache l'expéditeur

· 7 min de lecture

Une signature de cercle vous permet de signer au nom d’un groupe : n’importe qui peut vérifier que la signature vient de l’une des clés du groupe, mais personne ne peut dire laquelle. Cet article explique le fonctionnement des signatures de cercle, de l’article de 2001 qui les a introduites jusqu’aux images de clé et à CLSAG, et montre comment Blocknet utilise un cercle de 16 pour garder confidentiel l’expéditeur de chaque paiement.

Qu’est-ce qu’une signature de cercle ?

Réponse courte

Une signature de cercle est une signature numérique produite avec une clé privée et un ensemble de clés publiques d’autres personnes. Un vérificateur peut confirmer que le détenteur de l’une de ces clés a signé, mais pas dire lequel. Le signataire choisit le groupe sur le moment, sans mise en place ni coopération des autres membres.

Une signature numérique ordinaire relie un message à une seule clé publique. Une signature de cercle le relie à un ensemble de clés publiques, appelé le cercle (ring). Le signataire n’a besoin que de sa propre clé privée ; les autres membres n’apportent rien d’autre que des clés publiques qu’ils ont déjà publiées. Pour un observateur extérieur, chaque membre du cercle est un signataire tout aussi plausible.

D’où viennent les signatures de cercle ?

Ron Rivest, Adi Shamir et Yael Tauman ont présenté les signatures de cercle à ASIACRYPT 2001 dans un article intitulé « How to Leak a Secret » (Comment divulguer un secret). Leur exemple est celui d’un membre du gouvernement qui veut divulguer une information à un journaliste en prouvant qu’elle vient du gouvernement, sans révéler quel membre parle. Il signe avec sa propre clé et les clés publiques des autres membres du gouvernement, et le journaliste peut vérifier la signature sans apprendre qui l’a écrite.

Deux propriétés ont fait ressortir l’idée. Il n’y a aucun gestionnaire de groupe capable de démasquer le signataire, ce qui distingue les signatures de cercle des signatures de groupe, plus anciennes. Et le cercle est spontané : le signataire peut l’assembler à partir de n’importe quelles clés publiées au moment de signer. Les auteurs ont choisi ce nom parce que « les anneaux sont des régions géométriques à la périphérie uniforme et sans centre » : chaque membre se trouve sur le bord, et personne ne commande. L’algorithme de signature a la même forme, une chaîne de calculs qui se referme sur elle-même.

Comment fonctionne une signature de cercle ?

Les schémas modernes utilisés dans les cryptomonnaies construisent cette boucle à partir de hachages et de clés sur courbe elliptique. Voici l’idée en étapes simples pour un cercle de 16 clés publiques :

  1. Partir de votre propre emplacement. Le signataire choisit un nombre secret aléatoire et le hache avec le message. Ce hachage devient le défi de l’emplacement suivant du cercle.
  2. Simuler une réponse pour chaque autre emplacement. Pour chacun des 15 autres membres, le signataire choisit une réponse aléatoire et la combine avec la clé publique de ce membre et le défi courant pour calculer le défi de l’emplacement suivant.
  3. Refermer le cercle. Après un tour complet, la chaîne revient à l’emplacement du signataire. Seul quelqu’un qui détient la clé privée de cet emplacement peut calculer l’unique réponse qui ramène la chaîne exactement à son point de départ.

La signature se compose du défi de départ et des 16 réponses. Un vérificateur part de n’importe où, fait le tour du cercle en recalculant chaque défi à partir des clés publiques et des réponses, et vérifie que la boucle se referme. Chaque emplacement a le même aspect : une clé publique et une réponse d’apparence aléatoire. Rien n’indique où le signataire a commencé : le vérificateur apprend qu’une clé privée a refermé le cercle, et rien sur laquelle.

Comment les images de clé empêchent-elles la double dépense ?

Une simple signature de cercle laisse une faille pour la monnaie : si chaque dépense se cache parmi d’autres sorties, le réseau ne peut pas voir que les mêmes coins ont été dépensés deux fois. Les signatures de cercle liables corrigent cela. Joseph Liu, Victor Wei et Duncan Wong ont décrit le premier schéma de ce type, LSAG, à ACISP 2004 (ePrint 2004/027). Deux signatures produites avec la même clé privée peuvent être reliées entre elles, tandis que le signataire reste caché dans le cercle.

La conception CryptoNote de 2013 en a fait l’image de clé. Pour une sortie de clé privée x et de clé publique P, le portefeuille calcule I = x · Hp(P), où Hp hache la clé publique vers un point de la courbe. La signature prouve que I appartient au membre du cercle qui a signé, sans dire lequel. Comme l’image de clé dépend uniquement de la sortie dépensée, dépenser à nouveau cette sortie produit toujours le même I. Chaque nœud tient une liste des images de clé déjà vues et rejette toute transaction qui en répète une.

De MLSAG à CLSAG

Les cryptomonnaies qui cachent aussi les montants ont besoin que la signature de cercle prouve un second fait : que le montant caché de l’entrée correspond à ce que la transaction dépense. L’article de Shen Noether de 2015, « Ring Signature Confidential Transactions for Monero » (RingCT), y parvenait avec MLSAG, une signature de cercle portant sur deux ensembles de clés, l’un pour la propriété et l’autre pour les engagements de montant.

CLSAG, de Brandon Goodell, Sarang Noether et Arthur Blue (ePrint 2019/654), prouve les deux mêmes faits de façon plus compacte. Monero est passé de MLSAG à CLSAG lors de sa mise à niveau d’octobre 2020. La documentation de Monero fait état d’une vérification environ 20 % plus rapide, et d’une transaction typique à deux entrées et deux sorties qui passe d’environ 2,5 kB à 1,9 kB.

Que signifie la taille du cercle pour la confidentialité ?

Réponse courte

La taille du cercle est le nombre de sorties dans chaque cercle : la vraie plus les leurres. Un cercle de 16 signifie qu’un observateur voit 16 candidats tout aussi valides pour chaque entrée. Une taille fixe compte autant qu’une grande taille, car lorsque chaque entrée utilise la même taille, la taille elle-même ne révèle rien sur l’auteur de la transaction.

Les leurres sont de vraies sorties de la chaîne : chacun pourrait donc réellement être le coin dépensé. Si les cercles pouvaient varier, un portefeuille qui choisirait une taille inhabituelle signalerait ses propres transactions. Monero a porté sa taille de cercle de 11 à 16 lors de sa mise à niveau d’août 2022, et Blocknet utilise 16 par consensus pour chaque entrée.

Comment Blocknet utilise les signatures de cercle

Chaque entrée Blocknet est signée avec CLSAG et RingCT sur un cercle d’exactement 16 sorties. Les règles sont imposées par le consensus : aucun portefeuille ne peut s’en dispenser.

Le format de transaction n’a pas de mode transparent : chaque paiement de la chaîne comporte donc des cercles comme ceux-ci. Les signatures de cercle cachent l’expéditeur ; les adresses furtives à usage unique cachent le destinataire, et les engagements de Pedersen avec Bulletproofs cachent le montant. Comment Blocknet garde les paiements confidentiels passe en revue chacune de ces couches et ce qu’elles signifient quand vous payez quelqu’un.

Ce qu’apporte ensuite la mise à niveau Faraday

Blocknet prévoit une mise à niveau du réseau appelée Faraday, dont l’activation est prévue vers le 16 février 2027 selon blocknetcrypto.com. Selon les termes du site : « Aujourd’hui, une dépense se cache parmi 16 sorties. Après Faraday, elle se cachera parmi toutes les sorties de la chaîne. » Faraday apportera aussi de nouvelles preuves de dépense, que le site décrit comme « conçues pour qu’un ordinateur quantique ne puisse pas falsifier une dépense ». La conception, les tests et la revue adverse sont en cours, et les dates sont prévisionnelles, pas définitives.

Obtenir des BNT à envoyer en toute confidentialité

Un moyen simple d’obtenir des coins qui utilisent ces cercles est de les miner. Le mineur seine est gratuit, open source et se dimensionne selon votre ordinateur, et bntpool.com est son pool par défaut : vous pouvez miner en quelques minutes. Le guide de minage explique l’installation, et vous pouvez miner directement vers votre adresse ou vers un nom Blocknet ID.

Questions fréquentes

Quelle est la différence entre une signature de cercle et une signature de groupe ?

Une signature de groupe nécessite un gestionnaire qui constitue le groupe à l'avance et peut révéler qui a signé. Une signature de cercle n'a ni gestionnaire ni mise en place : le signataire choisit sur le moment n'importe quel ensemble de clés publiques, et personne, pas même les personnes dont les clés ont été utilisées, ne peut ensuite prouver quel membre a produit la signature.

Qu'est-ce qu'une image de clé dans une signature de cercle ?

Une image de clé (key image) est une valeur calculée à partir de la clé privée de la sortie dépensée. La même sortie produit toujours la même image de clé, si bien que le réseau rejette une seconde dépense de cette sortie, sans que l'image de clé révèle quel membre du cercle est le vrai. Elle fait d'une signature de cercle une signature de cercle liable qui empêche la double dépense.

Qu'est-ce que CLSAG ?

CLSAG est un schéma de signature de cercle liable décrit par Brandon Goodell, Sarang Noether et Arthur Blue en 2019. Il prouve que le signataire possède une sortie du cercle et que les montants s'équilibrent, avec une image de clé pour bloquer les doubles dépenses. Monero l'a adopté en octobre 2020, et Blocknet signe chaque entrée avec CLSAG et RingCT.

Quelle taille de cercle Blocknet utilise-t-il ?

Blocknet utilise un cercle d'exactement 16 membres pour chaque entrée : la vraie sortie plus 15 leurres, chacun étant une vraie sortie déjà présente sur la chaîne. Le consensus rejette toute autre taille. Comme chaque entrée utilise la même taille, la taille du cercle ne peut jamais distinguer une transaction, et la vraie sortie occupe une position aléatoire dans le cercle.

Les signatures de cercle cachent-elles le montant d'un paiement ?

Non. Une signature de cercle cache quelle sortie a payé. Les montants sont cachés par une couche distincte : les engagements de Pedersen, qui fixent un nombre sans le montrer, et les preuves d'intervalle Bulletproofs, qui prouvent que chaque montant est valide. Blocknet utilise tout cela ensemble sur chaque transaction, avec des adresses furtives à usage unique qui cachent le destinataire.