/ home / newsletters /
Bulletin Hebdomadaire Bitcoin Optech #322
Le bulletin de cette semaine expose une vulnérabilité corrigée affectant les anciennes versions de Bitcoin Core, fournit une mise à jour sur l’atténuation du brouillage de canaux hybrides, résume un article sur la validation côté client plus efficace et privée, et annonce une proposition de mise à jour du processus BIP. On y trouvera également nos rubriques habituelles avec des questions et réponses populaires de la communauté Bitcoin Stack Exchange, des annonces de nouvelles versions et versions candidates, ainsi que les changements apportés aux principaux logiciels d’infrastructure Bitcoin.
Actualités
-
● Divulgation d’une vulnérabilité affectant les versions de Bitcoin Core antérieures à 24.0.1 : Antoine Poinsot a publié sur la liste de diffusion Bitcoin-Dev un lien vers l’annonce d’une vulnérabilité affectant les versions de Bitcoin Core qui sont obsolètes depuis au moins décembre 2023. Cela fait suite à des divulgations précédentes de vulnérabilités plus anciennes (voir les Bulletins #310 et #314).
La nouvelle divulgation discute d’une méthode connue depuis longtemps pour faire planter les nœuds complets Bitcoin Core : leur envoyer de longues chaînes d’en-têtes de blocs qui seront stockées en mémoire. Chaque en-tête de bloc fait 80 octets et, s’il n’y avait pas de protections, on pourrait en créé avec la difficulté minimale du protocole, ce qui permettrait à un attaquant disposant d’ASIC modernes de produire des millions par seconde. Bitcoin Core dispose depuis de nombreuses années d’une protection résultant indirectement des points de contrôle ajoutés dans une version antérieure : cela empêchait un attaquant de pouvoir créer les blocs initiaux dans une chaîne d’en-têtes à la difficulté minimale, le forçant à effectuer un travail de preuve significatif pour laquelle il pourrait être payé s’il créait des blocs valides.
Cependant, le dernier point de contrôle a été ajouté il y a plus de 10 ans et les développeurs de Bitcoin Core ont été réticents à ajouter de nouveaux points de contrôle, car cela donne l’impression erronée que la finalité des transactions dépend finalement des développeurs créant des points de contrôle. Avec l’amélioration de l’équipement des mineurs et l’augmentation de la puissance de hachage du réseau, le coût de création d’une fausse chaîne d’en-têtes a diminué. À mesure que le coût diminuait, les chercheurs David Jaenson et Braydon Fuller ont divulgué de manière responsable l’attaque aux développeurs de Bitcoin Core. Les développeurs ont répondu que le problème leur était connu et ont encouragé Fuller à publier publiquement son article à ce sujet en 2019.
En 2022, le coût de l’attaque ayant encore diminué, un groupe de développeurs a commencé à travailler sur une solution qui n’utilisait pas de points de contrôle. Le PR #25717 de Bitcoin Core (voir le Bulletin #216) était le résultat de ce travail. Plus tard, Niklas Gögge a découvert un bug dans la logique du #25717 et a ouvert le PR #26355 pour le corriger. Les deux PR ont été fusionnés et Bitcoin Core 24.0.1 a été publié avec la correction.
-
● Tests et changements de mitigation du brouillage hybride : Carla Kirk-Cohen a publié sur Delving Bitcoin des détails sur diverses tentatives visant à contrecarrer une implémentation de l’atténuation du brouillage de canaux initialement proposée par Clara Shikhelman et Sergei Tikhomirov. L’atténuation du brouillage hybride implique une combinaison d’approbation de HTLC et d’une petite upfront fee qui est payée inconditionnellement, que le paiement réussisse ou échoue.
Plusieurs développeurs ont été invités à tenter de brouiller un canal pendant une heure, avec Kirk-Cohen et Shikhelman développant les attaques qui semblaient prometteuses. La plupart des attaques ont échoué : soit l’attaquant dépensait plus pour son attaque qu’une autre attaque connue, soit le nœud cible gagnait plus de revenus pendant l’attaque qu’il n’aurait gagné à travers le trafic de transfert normal sur le réseau simulé.
Une attaque a réussi : une sink attack qui “vise à diminuer la réputation des pairs d’un nœud ciblé en créant des chemins plus courts/moins chers dans le réseau, et en sabotant les paiements transférés à travers ses canaux pour diminuer la réputation de tous les nœuds le précédant dans l’itinéraire.” Pour contrer l’attaque, Kirk-Cohen et Shikhelman ont introduit la réputation bidirectionnelle dans la manière dont l’approbation de HTLC est considéré. Quand Bob reçoit un paiement d’Alice à transférer à Carol, par exemple
A -> B -> C
, Bob considère à la fois si Alice a tendance à transférer des HTLCs qui sont rapidement réglés (comme avec l’approbation du HTLC précédemment) et si Carol a tendance à accepter des HTLCs qui sont rapidement réglés (c’est une nouveauté). Maintenant, quand Bob reçoit une approbation d’HTLC d’Alice :-
Si Bob pense que Alice et Carol sont fiables, il transférera et approuvera l’HTLC d’Alice à Carol.
-
Si Bob pense qu’Alice seulement est fiable, il ne transférera pas un HTLC approuvé par Alice. Il le rejettera immédiatement, permettant à l’échec de se propager jusqu’à l’expéditeur initial, qui pourra rapidement le renvoyer en utilisant un itinéraire différent.
-
Si Bob pense que Carol seulement est fiable, il acceptera un HTLC approuvé d’Alice quand il a une capacité supplémentaire, mais il ne l’approuvera pas lors du transfert à Carol.
Étant donné le changement de la proposition, Kirk-Cohen et Shikhelman planifient des expériences supplémentaires pour s’assurer que cela fonctionne comme prévu. Ils ont également créé un lien vers un message d’une liste d’emails de Jim Posen datant de mai 2018 qui décrit un système de réputation bidirectionnelle pour prévenir les attaques de brouillage (alors appelées loop attacks), un exemple de réflexion parallèle antérieure sur la résolution de ce problème.
-
-
● Validation côté client protégée (CSV) : Jonas Nick, Liam Eagen, et Robin Linus ont posté à la liste de diffusion Bitcoin-Dev un article sur un nouveau protocole de validation côté client. La validation côté client permet au transfert de jetons d’être protégé par la preuve de travail de Bitcoin sans révéler publiquement aucune information sur ces jetons ou transferts. La validation côté client est un composant clé de protocoles tels que RGB et Taproot Assets.
L’un des inconvénients des protocoles existants est que la quantité de données qui doit être validée par un client lors de la réception d’un jeton est, dans le pire des cas, aussi importante que l’historique de transfert de ce jeton et de chaque jeton associé. En d’autres termes, pour un ensemble de jetons aussi fréquemment échangés que les bitcoins, un client aurait besoin de valider une histoire presque aussi grande que la blockchain Bitcoin entière. En plus du coût de bande passante pour transférer ces données et du coût CPU pour les valider, transférer l’historique complet affaiblit la confidentialité des récepteurs précédents du jeton. En comparaison, Shielded CSV utilise des preuves à divulgation nulle de connaissance pour permettre la vérification avec une quantité fixe de ressources et sans révéler les transferts précédents.
Un autre inconvénient des protocoles existants est que chaque transfert d’un jeton nécessite d’inclure des données dans une transaction Bitcoin. Shielded CSV permet de combiner plusieurs transferts ensemble dans la même mise à jour de 64 octets. Cela peut permettre de confirmer des milliers de transferts de jetons chaque fois qu’un nouveau bloc Bitcoin est trouvé en confirmant seulement une transaction Bitcoin avec un ajout de données de 64 octets.
Le document entre dans les détails. Nous avons trouvé particulièrement intéressante l’idée de transférer de manière fiable des bitcoins de la blockchain principale vers un Shielded CSV (et inversement) sans changements de consensus en utilisant BitVM, l’utilisation de comptes (section 2), la discussion sur l’effet de la réorganisation de la blockchain sur les comptes et les transferts (également section 2), la discussion connexe sur la dépendance aux transactions non confirmées (section 5.2), et la liste des extensions possibles (annexe A).
-
● Brouillon de processus BIP mis à jour : Mark “Murch” Erhardt a publié sur la liste de diffusion Bitcoin-Dev pour annoncer la disponibilité d’un PR pour un brouillon de BIP qui décrit un processus mis à jour pour le dépôt BIP. Toute personne intéressée est encouragée à examiner le brouillon et à laisser des commentaires. Si la communauté trouve la version finale du brouillon acceptable, elle deviendra le processus utilisé par les éditeurs de BIP.
Questions et réponses sélectionnées de Bitcoin Stack Exchange
Bitcoin Stack Exchange est l’un des premiers endroits où les contributeurs d’Optech cherchent des réponses à leurs questions - ou quand nous avons quelques moments libres pour aider les utilisateurs curieux ou confus. Dans cette rubrique mensuelle, nous mettons en lumière certaines des questions et réponses les plus votées publiées depuis notre dernière mise à jour.
-
● Quelles vérifications spécifiques sont effectuées sur une nouvelle transaction Bitcoin et dans quel ordre ? Murch énumère les vérifications de validité effectuées par Bitcoin Core sur une nouvelle transaction lorsqu’elle est soumise à la mempool, y compris les vérifications effectuées dans les fonctions
CheckTransaction
,PreChecks
,AcceptSingleTransaction
, et fonctions associées. -
● Pourquoi mon répertoire bitcoin est-il plus grand que mon paramètre de limite de données de pruning ? Pieter Wuille note que bien que l’option
prune
limite la taille des données de la blockchain de Bitcoin Core, l’état de la chaîne, les index, la sauvegarde du mempool, les fichiers de portefeuille et d’autres fichiers ne sont pas soumis à la limiteprune
et peuvent augmenter en taille indépendamment. -
● Que dois-je avoir configuré pour que
getblocktemplate
fonctionne ? L’utilisateur CoinZwischenzug pose également une question connexe sur la façon de calculer la racine de Merkle et la transaction coinbase pour un bloc. Les réponses à ces deux questions (de Vojtěch Strnad, RedGrittyBrick et Pieter Wuille) indiquent de manière similaire que, bien que legetblocktemplate
de Bitcoin Core puisse construire des blocs candidats de transactions et des informations d’en-tête de bloc, lors du minage sur des réseaux non-test, les transactions coinbase sont créées par des logiciels de minage ou de pool minier. -
● Peut-on forcer brutalement l’adresse d’un paiement silencieux? Josie, en référence à BIP352, décrit les étapes pour dériver une adresse de paiement silencieux, concluant qu’il est infaisable d’utiliser des techniques de force brute pour compromettre les avantages de confidentialité du paiement silencieux.
-
● Pourquoi une tx échoue au
testmempoolaccept
pour un remplacement BIP125 mais est acceptée parsubmitpackage
? Ava Chow souligne quetestmempoolaccept
évalue uniquement les transactions individuellement et, en conséquence, l’exemple RBF du guide de test de Bitcoin Core 28.0 bcc testing rbf indique un rejet. Cependant, puisquesubmitpackage
évalue à la fois les transactions parente et enfant ensemble comme un package, les deux sont acceptées. -
● Comment l’algorithme de score de bannissement calcule-t-il un score de bannissement pour un pair? Brunoerg fait référence à Bitcoin Core #29575 qui a ajusté le score de mauvaise conduite des pairs pour certains comportements, qu’il a ensuite énumérés.
Mises à jour et versions candidates
Nouvelles mises-à-jours et candidates pour des projets d’infrastructure Bitcoin populaires. Veuillez envisager de mettre à niveau vers les nouvelles mises-à-jour ou d’aider à tester les versions candidates.
-
● BDK 1.0.0-beta.4 est une version candidate de cette bibliothèque pour construire des portefeuilles et d’autres applications activées par Bitcoin. Le paquet Rust original
bdk
a été renommée enbdk_wallet
, et des modules de couche inférieure ont été extraits dans leurs propres paquets, incluantbdk_chain
,bdk_electrum
,bdk_esplora
, etbdk_bitcoind_rpc
. Le paquetbdk_wallet
“est la première version à offrir une API stable 1.0.0.” -
● Bitcoin Core 28.0rc2 est un candidat à la sortie pour la prochaine version majeure de l’implémentation de nœud complet prédominante. Un guide de test est disponible.
Changements notables dans le code et la documentation
Changements récents notables dans Bitcoin Core, Core Lightning, Eclair, LDK, LND, libsecp256k1, Hardware Wallet Interface (HWI), Rust Bitcoin, BTCPay Server, BDK, Bitcoin Improvement Proposals (BIPs), Lightning BOLTs, Lightning BLIPs, Bitcoin Inquisition, et BINANAs.
-
● Eclair #2909 ajoute un paramètre
privateChannelIds
à la commande RPCcreateinvoice
pour ajouter des indices de recherche de chemin pour les canaux privés aux factures BOLT11. Cela corrige un bug qui empêchait les nœuds n’ayant que des canaux privés de recevoir des paiements. Pour éviter de divulguer le point de sortie du canal,scid_alias
devrait être utilisé. -
● LND #9095 et LND #9072 introduisent des changements au modificateur de facture HTLC, au financement et à la clôture de canaux auxiliaires, et intègrent des données personnalisées dans le RPC/CLI dans le cadre de l’initiative de canaux personnalisés pour améliorer le support de LND pour les actifs taproot. Cette PR permet d’inclure des données spécifiques aux actifs personnalisés dans les commandes RPC et prend en charge la gestion des canaux auxiliaires via l’interface de ligne de commande.
-
● LND #8044 ajoute de nouveaux types de messages
announcement_signatures_2
,channel_announcement_2
etchannel_update_2
pour le nouveau protocole de gossip v1.75 (voir le Bulletin #261) qui permet aux nœuds d’annoncer et de vérifier les canaux taproot. De plus, certaines modifications sont apportées aux messages existants tels quechannel_ready
etgossip_timestamp_range
pour améliorer l’efficacité et la sécurité du gossiping avec les canaux taproot.