ALLER AU CONTENU
TOKENISATION7 minStandards en production / Ép. 5 · Niveau 5-2

Soldes cachés : ce qu’un transfert raté peut trahir

Un token cache votre solde, puis un transfert échoue en public ou un contrôle public répond oui ou non. Qu’avez-vous laissé filer ?

XIN

EN 30 SECONDES

Un revert est un échec qui annule les changements d’un appel ; si rien ne l’intercepte, toute la transaction échoue, en public. Si l’échec vient d’une comparaison secrète, il peut en révéler le résultat. On voit ici ce que peuvent trahir un transfert raté, une question oui ou non répétée et un nombre de détenteurs.

À RETENIR · 3

  • Un échec public causé par une comparaison secrète peut en révéler le résultat. Le brouillon ERC-7984 autorise pourtant le revert : c’est une question de confidentialité, pas une interdiction.
  • Une réponse publique par oui ou par non sur un secret peut le trahir. Reconstituer un solde à force de questions demande des conditions précises, comme un accès répété et un solde qui ne bouge pas.
  • On peut compter les détenteurs sans déchiffrer chaque solde. Savoir qui connaît ce total relève d’un choix de politique distinct.
Sur cette page

Pourquoi un transfert refusé peut trahir un secret

EN BREF Si un transfert échoue en public à cause d’une comparaison secrète, l’échec peut révéler le résultat de cette comparaison.

LES MOTS À CONNAÎTRE

Revert
Un échec qui annule les changements d’un appel. Si rien ne l’intercepte, toute la transaction échoue en public (les frais restent dus).
Prévalidation
Un appel qui demande si un transfert passerait, avant son envoi.
Oracle
Ici, toute interface qui répond à des questions sur un secret.
Preuve à divulgation nulle de connaissance
Une preuve qu’un fait est vrai, sans montrer les données qui le fondent.

Prenons un contrat qui Revert Un échec qui annule les changements d’un appel. Si rien ne l’intercepte, toute la transaction échoue en public (les frais restent dus). Voir le glossaire, c’est-à-dire qui annule la transaction en public, dès que le solde caché est trop faible. Quiconque peut relier l’échec à ce contrôle apprend alors un fait : le solde libre était inférieur à ce montant.

CE QUE LE PUBLIC APPREND
Décision : Un transfert dépasse le solde libre. Que voit un observateur ?Arbre de décision : Un transfert dépasse le solde libre. Que voit un observateur ? Si L’implémentation déclenche un revert (le brouillon ERC-7984 l’autorise), alors Le revert peut révéler que le solde libre était trop faible. Si L’implémentation choisit zéro (OpenZeppelin v0.5.0), alors Une réussite, montant caché. Si Une autre erreur : autorisation absente, entrée invalide, alors Un revert public reste possible.DÉCISIONUn transfert dépasse le soldelibre. Que voit unobservateur ?Si l’implémentationdéclenche un revert (lebrouillon ERC-7984l’autorise)Le revert peutrévéler que le soldelibre était tropfaibleSi l’implémentation choisitzéro (OpenZeppelin v0.5.0)Une réussite, montantcachéSi une autre erreur :autorisation absente,entrée invalideUn revert publicreste possible
Les deux premières branches sont des choix de conception, pas des règles communes à tous les tokens confidentiels.

Un revert qui trahit une comparaison pose une question de confidentialité. Les reverts ne sont pas interdits pour autant.

Le brouillon ERC-7984 dit en toutes lettres qu’un transfert peut déclencher un revert si le solde ne suffit pas.

Dans la section suivante : Et si personne n’envoyait rien, mais que chacun pouvait demander si un transfert passerait ?

Quand une prévalidation devient un oracle

EN BREF Un oui ou non public sur un solde secret, posé encore et encore, peut cerner ce solde.

Une Prévalidation Un appel qui demande si un transfert passerait, avant son envoi. Voir le glossaire demande « ce transfert passerait-il ? » avant tout envoi. ERC-3643, standard au statut Final, en a une pour la conformité. Ici, un Oracle Ici, toute interface qui répond à des questions sur un secret. Voir le glossaire désigne toute interface qui répond à des questions sur un secret.

ORACLE HYPOTHÉTIQUE

Diagramme de séquence : 2 participants : Appelant, Comparateur publicDiagramme de séquence : 2 participants : Appelant, Comparateur public. Étape 1 : Appelant vers Comparateur public, Le solde atteint-il au moins le milieu ?. Étape 2 : Comparateur public vers Appelant, Oui ou non, en clair. Étape 3 : Appelant vers Comparateur public, Répéter sur la plage restante.APPELANT > COMPARATEUR PUBLICLe solde atteint-il au moinsle milieu ?COMPARATEUR PUBLIC > APPELANTOui ou non, en clairRévèle un fait, sous lesconditions indiquéesAPPELANT > COMPARATEUR PUBLICRépéter sur la plage restante

Étape 1. Question. L’appelant demande si le solde atteint au moins le milieu de la plage possible.

Choisissez une étape pour la voir bouger
  1. Question L’appelant demande si le solde atteint au moins le milieu de la plage possible.
  2. Réponse L’interface (API) répond oui ou non, en clair. La moitié de la plage est écartée.
  3. Répétition L’appelant repose la question sur la moitié restante. Chaque tour peut encore diviser la plage par deux, autant que les requêtes et la précision le permettent.
Un raisonnement sur une interface envisagée, pas une attaque observée ni une API FHE de déchiffrement exécutable.

Dans le scénario illustré, le raisonnement ne tient que si ces quatre conditions sont réunies :

  • la plage est connue et finie ;
  • l’appelant choisit les montants et peut reposer la question encore et encore, avec un accès public ou seulement autorisé ;
  • la réponse ne bascule qu’une fois quand le montant monte ;
  • le solde reste stable assez longtemps.

La prévalidation de conformité d’ERC-3643 n’impose pas, à elle seule, de laisser n’importe qui tester le solde secret d’un expéditeur. Ses contrôles sur qui peut détenir le token peuvent s’en tenir à des règles publiques.

D’autres conceptions peuvent passer par des droits d’accès, un résultat chiffré ou des preuves qui ne livrent qu’une réponse autorisée, oui ou non. Chacune déplace la limite de ce qui est montré, et chacune demande sa propre analyse.

OBJET OBTENU

Examinez chaque oui ou non public

Examinez chaque oui ou non public sur un secret : qui peut le demander, combien de fois et sur quoi.

Dans la section suivante : Alors, une règle qui a besoin des soldes, comme un plafond du nombre de détenteurs, peut-elle encore marcher ?

Compter les détenteurs sans révéler chaque solde

EN BREF On peut compter les détenteurs au solde non nul sans déchiffrer chaque solde. Savoir qui voit ce total est un autre choix.

EN CLAIR

Certaines règles plafonnent le nombre de détenteurs. Il faut alors compter les soldes non nuls, pas les lire.

UNE CONCEPTION POSSIBLE
Diagramme en couches : 3 niveaux, de haut en basDiagramme en couches : 3 niveaux, de haut en bas. Niveau 1, CHAQUE DÉTENTEUR : Solde chiffré, Indicateur chiffré : non nul ou nul. Niveau 2, LE CONTRAT : Compteur chiffré, mis à jour à chaque changement. Niveau 3, QUI VOIT LE TOTAL : Un choix de politique : personne, l’émetteur, un auditeur ou le public.CHAQUE DÉTENTEURSolde chiffréIndicateur chiffré : non nulou nulLE CONTRATCompteur chiffré, mis à jourà chaque changementQUI VOIT LE TOTALUn choix de politique :personne, l’émetteur, unauditeur ou le public
Une possibilité d’architecture, pas une mesure de performance ni un module prêt à l’emploi démontré ici.

Une conception peut garder un indicateur chiffré par détenteur et un compteur chiffré. Ou passer par des Preuve à divulgation nulle de connaissance Une preuve qu’un fait est vrai, sans montrer les données qui le fondent. Voir le glossaire, qui prouvent un fait sans montrer les données.

Le plus dur, c’est de tomber juste. Il faut compter chaque passage de zéro à positif, et l’inverse, sans jamais compter deux fois. Il faut aussi couvrir l’émission (mint), la destruction (burn), la récupération et le transfert forcé.

ATTENTION

Un total publié, croisé avec d’autres indices, peut encore trahir des choses.

Sources : ERC-7984 (brouillon), ERC-3643, OpenZeppelin ERC7984Freezable v0.5.0.

FAQ

Non : le brouillon ERC-7984 autorise un revert quand le solde est insuffisant. ERC7984Freezable v0.5.0 d’OpenZeppelin transfère plutôt un zéro chiffré quand le solde libre ne suffit pas, et d’autres erreurs peuvent toujours provoquer un revert. Vérifiez la version et le résultat réel.

NIVEAU TERMINÉ

Ce que vous savez maintenant

  • Pourquoi un échec public lié à une comparaison secrète peut révéler le résultat de cette comparaison.
  • Quelles hypothèses il faut pour qu’une question oui ou non répétée cerne un solde caché.

Vérifiez par vous-même

Touchez ou cliquez une question pour voir la réponse.

Une équipe affirme : « Notre prévalidation ne répond que oui ou non, elle ne peut donc pas trahir un solde. » Est-ce sûr ?

Pas forcément. Dans une plage connue, si n’importe qui peut reposer la question sur des montants de son choix pendant que le solde ne bouge pas, ces réponses peuvent le cerner. Regardez donc qui peut demander, et combien de fois.

Niveau suivant :Qui peut voir quels montants, et que vérifier avant d’intégrer un token confidentiel ?7 min
Adam Boudjemaa
Adam Boudjemaa

Ancien CTO d’Integra. Auteur nommé (1 sur 5) d’ERC-3643, premier auteur d’ERC-6960, co-auteur d’ERC-7410 et co-auteur d’ERC-8203, encore à l’état de brouillon. Conçoit des systèmes d’IA en production et des systèmes Web3 régulés.

Un projet à livrer ou un poste à pourvoir ?

Parlons de votre besoin
Suivre les notes techniques

Recevez les nouveaux articles sur l’IA en production et les smart contracts par email.