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 ?
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.
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
Étape 1. Question. L’appelant demande si le solde atteint au moins le milieu de la plage possible.
- Question L’appelant demande si le solde atteint au moins le milieu de la plage possible.
- Réponse L’interface (API) répond oui ou non, en clair. La moitié de la plage est écartée.
- 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.
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
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 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.
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 besoinSuivre les notes techniques
Recevez les nouveaux articles sur l’IA en production et les smart contracts par email.