|
| 1 | +--- |
| 2 | +title: 'Bulletin Hebdomadaire Bitcoin Optech #314' |
| 3 | +permalink: /fr/newsletters/2024/08/02/ |
| 4 | +name: 2024-08-02-newsletter-fr |
| 5 | +slug: 2024-08-02-newsletter-fr |
| 6 | +type: newsletter |
| 7 | +layout: newsletter |
| 8 | +lang: fr |
| 9 | +--- |
| 10 | +Le bulletin de cette semaine annonce la divulgation de deux vulnérabilités affectant les anciennes |
| 11 | +versions de Bitcoin Core et résume une approche proposée pour optimiser la sélection des |
| 12 | +transactions par les mineurs lorsque le cluster de mempool est utilisé. Sont également incluses nos sections habituelles avec |
| 13 | +des annonces de mises à jour et versions candidates, ainsi que les changements |
| 14 | +apportés aux principaux logiciels d'infrastructure Bitcoin. |
| 15 | + |
| 16 | +## Nouvelles |
| 17 | + |
| 18 | +- **Divulgation de vulnérabilités affectant les versions de Bitcoin Core antérieures à 0.21.0 :** |
| 19 | + Niklas Gögge a [publié][goegge disclosure] sur la liste de diffusion Bitcoin-Dev un lien vers les |
| 20 | + annonces de |
| 21 | + deux vulnérabilités affectant des versions de Bitcoin Core qui sont |
| 22 | + dépassées depuis au moins octobre 2022. Cela fait suite à une |
| 23 | + divulgation précédente le mois dernier de vulnérabilités plus anciennes (voir le |
| 24 | + [Bulletin #310][news310 disclosure]). Nous résumons ci-dessous les divulgations : |
| 25 | + |
| 26 | + - [Crash à distance en envoyant des messages `addr` excessifs][] : avant |
| 27 | + Bitcoin Core 22.0 (sorti en septembre 2021), un nœud qui était informé de |
| 28 | + plus de 2<sup>32</sup> autres nœuds possibles se crasherait en raison de |
| 29 | + l'épuisement d'un compteur 32 bits. Cela pourrait être accompli par un |
| 30 | + attaquant envoyant un grand nombre de messages P2P `addr` (au moins 4 |
| 31 | + millions de messages). Eugene Siegel a [divulgué de manière responsable][topic responsible |
| 32 | + disclosures] |
| 33 | + la vulnérabilité et un correctif a été inclus dans Bitcoin Core 22.0. Voir le |
| 34 | + [Bulletin #159][news159 bcc22387] pour notre résumé du correctif, |
| 35 | + qui a été écrit sans savoir qu'il corrigeait une |
| 36 | + vulnérabilité. |
| 37 | + |
| 38 | + - [Crash à distance sur le réseau local lorsque UPnP est activé][] : avant Bitcoin Core |
| 39 | + 22.0, les nœuds qui activaient [UPnP][] pour configurer automatiquement [NAT |
| 40 | + traversal][] (désactivé par défaut en raison de vulnérabilités précédentes, |
| 41 | + voir le [Bulletin #310][news310 miniupnpc]) étaient vulnérables à un |
| 42 | + dispositif malveillant sur le réseau local envoyant à plusieurs reprises des variantes |
| 43 | + d'un message UPnP. Chaque message pourrait entraîner l'allocation de |
| 44 | + mémoire supplémentaire jusqu'à ce que le nœud se crashe ou soit arrêté par le |
| 45 | + système d'exploitation. Un bug de boucle infinie dans la dépendance de Bitcoin Core |
| 46 | + miniupnpc a été signalé au projet miniupnpc par Ronald Huveneers, |
| 47 | + avec Michael Ford découvrant et divulguant de manière responsable comment il |
| 48 | + pourrait être utilisé pour crasher Bitcoin Core. Un correctif a été inclus dans Bitcoin |
| 49 | + Core 22.0. |
| 50 | + |
| 51 | + Des vulnérabilités supplémentaires affectant les versions ultérieures de Bitcoin Core |
| 52 | + devraient être divulguées dans quelques semaines. |
| 53 | + |
| 54 | +- **Optimisation de la construction de blocs avec le cluster de mempool :** Pieter Wuille |
| 55 | + a [posté][wuille selection] sur Delving Bitcoin concernant l'assurance que |
| 56 | + les modèles de blocs des mineurs peuvent inclure le meilleur ensemble de transactions lorsque |
| 57 | + le [cluster de mempool][topic cluster mempool] est utilisé. Dans la conception pour |
| 58 | + le cluster de mempool, les _clusters_ de transactions liées sont divisés en |
| 59 | + une liste ordonnée de _morceaux_, chaque morceau respectant deux contraintes : |
| 60 | + |
| 61 | + 1. Si des transactions au sein du segment dépendent d’autres transactions non confirmées, |
| 62 | + ces autres transactions doivent soit faire partie de ce segment, |
| 63 | + soit apparaître dans un segment antérieur dans la liste ordonnée des segments. |
| 64 | + |
| 65 | + 3. Chaque segment doit avoir un taux de frais égal ou supérieur à celui des segments |
| 66 | + qui le suivent dans la liste ordonnée. |
| 67 | + |
| 68 | + Cela permet de placer chaque segment de chaque cluster dans le mempool dans une seule liste, classée |
| 69 | + par taux de frais---du plus élevé au plus bas. Avec un mempool segmenté classé par taux de frais, un |
| 70 | + mineur peut construire un modèle de bloc en itérant simplement sur chaque segment et en l'incluant |
| 71 | + dans son modèle jusqu'à ce qu'il atteigne un segment qui ne rentre pas dans le poids maximal |
| 72 | + souhaité pour le bloc (qui est généralement un peu en dessous de la limite de 1 million de vbytes |
| 73 | + pour laisser de la place à la transaction coinbase du mineur). |
| 74 | + |
| 75 | + Cependant, les clusters et les segment varient en taille, avec une limite supérieure par défaut |
| 76 | + pour un cluster dans Bitcoin Core attendue à environ 100 000 vbytes. Cela signifie qu'un mineur |
| 77 | + construisant un modèle de bloc ciblant 998 000 vbytes, et qui a déjà 899 001 vbytes remplis, peut |
| 78 | + rencontrer un segment de 99 000 vbytes qui ne rentre pas, laissant environ 10% de l'espace de son |
| 79 | + bloc inutilisé. Ce mineur ne peut pas simplement sauter ce segment de 99 000 vbytes et essayer |
| 80 | + d'inclure le segment suivant car il pourrait inclure une transaction qui dépend du |
| 81 | + segment de 99 000 vbytes. Si un mineur échoue à inclure une transaction dépendante dans son modèle |
| 82 | + de bloc, tout bloc qu'il produit à partir de ce modèle sera invalide. |
| 83 | + |
| 84 | + Pour contourner ce problème de cas limite, Wuille décrit comment de grands segment peuvent être |
| 85 | + décomposés en plus petits _sous-segments_ qui peuvent être envisagés pour l'inclusion dans l'espace |
| 86 | + restant du bloc en fonction de leurs taux de frais. Un sous-segment peut être créé en retirant |
| 87 | + simplement la dernière transaction dans n'importe quel segment ou sous-segment existant qui a deux |
| 88 | + transactions ou plus. Cela produira toujours au moins un sous-segment plus petit que son segment |
| 89 | + original et cela peut parfois résulter en plusieurs sous-segments. Wuille démontre que le nombre de |
| 90 | + segments et de sous-segments équivaut au nombre de transactions, chaque transaction appartenant à un |
| 91 | + segment ou sous-segment unique. Cela rend possible de précalculer le segment ou sous-segment de |
| 92 | + chaque transaction, appelé son _ensemble d'absorption_, et d'associer cela à la transaction. Wuille |
| 93 | + montre comment l'algorithme de morcellement existant calcule déjà l'ensemble d'absorption de chaque |
| 94 | + transaction. |
| 95 | + |
| 96 | + Lorsqu'un mineur a rempli un modèle avec tous les segments complets possibles, il peut prendre les |
| 97 | + ensembles d'absorption précalculés pour toutes les transactions pas encore incluses dans le bloc et |
| 98 | + les considérer dans l'ordre des taux de frais. Cela ne nécessite qu'une seule opération de tri sur |
| 99 | + une liste avec le même nombre d'éléments qu'il y a de transactions dans le mempool (presque toujours |
| 100 | + moins d'un million avec les paramètres actuels). Les ensembles d'absorption avec les meilleurs taux |
| 101 | + de frais (segments et sous-segments) peuvent ensuite être utilisés pour remplir l'espace restant du |
| 102 | + bloc. Cela nécessite de suivre le nombre de transactions d'un cluster qui ont été incluses jusqu'à |
| 103 | + présent et de sauter tout sous-segment qui ne rentre pas ou dont certaines transactions ont déjà été |
| 104 | + incluses. |
| 105 | + |
| 106 | + Cependant, bien que les segments puissent être comparés les uns aux autres pour fournir le meilleur |
| 107 | + ordre pour l'inclusion dans le bloc, l'ordre individuel des transactions au sein d'un segment ou |
| 108 | + sous-segment n'ont pas la garantie d’être dans le meilleur ordre pour n’inclure |
| 109 | + que certaines de ces transactions. Cela peut conduire à une sélection non optimale lorsque un |
| 110 | + bloc est presque plein. Par exemple, lorsqu'il ne reste que 300 vbytes, l'algorithme pourrait |
| 111 | + sélectionner une transaction de 200 vbytes à 5 sats/vbyte (1 000 sats au total) au lieu de deux |
| 112 | + transactions de 150 vbytes à 4 sats/vbyte (1 200 sats au total). |
| 113 | + |
| 114 | + Wuille décrit comment les ensembles d'absorption précalculés sont particulièrement utiles dans ce |
| 115 | + cas : parce qu'ils ne nécessitent que le suivi du nombre de transactions de chaque cluster qui ont |
| 116 | + été incluses jusqu'à présent, ils facilitent la restauration à un état antérieur dans l'algorithme |
| 117 | + de remplissage du modèle et le remplacement du choix précédemment effectué par une alternative pour |
| 118 | + voir si cela résulte en la collecte de frais totaux plus élevés. Cela permet de mettre en œuvre une |
| 119 | + recherche [branch-and-bound][] qui peut essayer de nombreuses combinaisons de remplissage du dernier |
| 120 | + bit d'espace de bloc dans l'espoir de trouver un meilleur résultat que l'algorithme simple. |
| 121 | + |
| 122 | +- **Simulateur d'événements réseau Hyperion pour le réseau P2P Bitcoin :** |
| 123 | + Sergi Delgado [a posté][delgado hyperion] sur Delving Bitcoin à propos de [Hyperion][], un |
| 124 | + simulateur de réseau qu'il a écrit qui suit comment les données se propagent à travers un réseau |
| 125 | + Bitcoin simulé. Le travail est initialement motivé par le désir de comparer la méthode actuelle de |
| 126 | + Bitcoin pour relayer les annonces de transactions (messages d'inventaire `inv`) à la méthode |
| 127 | + proposée [Erlay][topic erlay]. |
| 128 | + |
| 129 | +## Mises à jour et versions candidates |
| 130 | + |
| 131 | +*Nouvelles sorties et candidats à la sortie pour les projets d'infrastructure Bitcoin populaires. |
| 132 | +Veuillez envisager de passer aux nouvelles versions ou d'aider à tester les candidats à la sortie.* |
| 133 | + |
| 134 | +- [BDK 1.0.0-beta.1][] est un candidat à la sortie pour "la première version bêta de `bdk_wallet` |
| 135 | + avec une API stable 1.0.0". |
| 136 | + |
| 137 | +### Changements notables dans le code et la documentation |
| 138 | + |
| 139 | +_Changes récents notables dans [Bitcoin Core][bitcoin core repo], [Core Lightning][core lightning |
| 140 | +repo], [Eclair][eclair repo], [LDK][ldk repo], [LND][lnd repo], [libsecp256k1][libsecp256k1 repo], |
| 141 | +[Interface de Portefeuille Matériel (HWI)][hwi repo], [Rust Bitcoin][rust bitcoin repo], [Serveur |
| 142 | +BTCPay][btcpay server repo], [BDK][bdk repo], [Propositions d'Amélioration de Bitcoin (BIPs)][bips |
| 143 | +repo], [Lightning BOLTs][bolts repo], [Lightning BLIPs][blips repo], [Inquisition Bitcoin][bitcoin |
| 144 | +inquisition repo], et [BINANAs][binana repo]._ |
| 145 | + |
| 146 | +- [Bitcoin Core #30515][] ajoute le hash du bloc UTXO et le nombre de confirmations comme champs |
| 147 | + supplémentaires à la réponse de la commande RPC `scantxoutset`. Cela fournit un identifiant plus |
| 148 | + fiable pour le bloc UTXO que juste la hauteur du bloc, surtout puisque des réorganisations de la |
| 149 | + chaîne peuvent se produire. |
| 150 | + |
| 151 | +- [Bitcoin Core #30126][] introduit une fonction de [linéarisation de cluster][wuille cluster] |
| 152 | + `Linearize` qui opère sur des clusters de transactions liées pour créer ou améliorer des |
| 153 | + linéarisations, dans le cadre du projet de [cluster de mempool][topic cluster mempool]. Les linéarisations |
| 154 | + de cluster suggèrent un ordre maximisant les frais dans lequel les transactions d'un cluster |
| 155 | + pourraient être ajoutées aux modèles de blocs (ou un ordre de perte de frais minimaux dans lequel |
| 156 | + elles peuvent être évacuées d'un mempool plein). Ces fonctions |
| 157 | + ne sont pas encore intégrés dans le mempool, donc il n'y a pas de changement de comportement dans |
| 158 | + cette PR. |
| 159 | + |
| 160 | +- [Bitcoin Core #30482][] améliore la validation des paramètres pour le point d'accès REST |
| 161 | + `getutxos` en rejetant les txids tronqués ou trop grands et en lançant une erreur de parse |
| 162 | + `HTTP_BAD_REQUEST`. Auparavant, cela échouait également, mais était géré silencieusement. |
| 163 | + |
| 164 | +- [Bitcoin Core #30275][] change le mode par défaut de la commande RPC `estimatesmartfee` de |
| 165 | + conservateur à économique. Ce changement est basé sur les observations des utilisateurs et des |
| 166 | + développeurs selon lesquelles le mode conservateur conduit souvent à un paiement excessif des frais |
| 167 | + de transaction car il est moins réactif aux baisses à court terme du marché des frais que le mode |
| 168 | + économique lors de [l'estimation des frais][topic fee estimation]. |
| 169 | + |
| 170 | +- [Bitcoin Core #30408][] remplace l'utilisation de l'expression "public key script" par "output |
| 171 | + script" pour faire référence à un `scriptPubKey` dans le texte d'aide pour les commandes RPC |
| 172 | + suivantes `decodepsbt`, `decoderawtransaction`, `decodescript`, `getblock` (si verbosity=3), |
| 173 | + `getrawtransaction` (si verbosity=2,3), et `gettxout`. C'est la même formulation utilisée dans le |
| 174 | + BIP proposé pour la terminologie des transactions (Voir le Bulletin [#246][news246 bipterminology]). |
| 175 | + |
| 176 | +- [Core Lightning #7474][] met à jour le plugin [offres][topic offers] pour permettre les plages |
| 177 | + expérimentales nouvellement définies pour les types Type-Length-Value (TLV) utilisés dans les |
| 178 | + offres, les demandes de facture et les factures. Cela a été récemment ajouté à la pull request |
| 179 | + [BOLT12][bolt12 pr] non fusionnée dans le dépôt BOLTs. |
| 180 | + |
| 181 | +- [LND #8891][] ajoute un nouveau champ `min_relay_fee_rate` à la réponse attendue d'une source |
| 182 | + externe d'[estimation des frais][topic fee estimation], permettant au service de spécifier le taux |
| 183 | + minimum de frais de relais. Si non spécifié, le `FeePerKwFloor` par défaut de 1012 sats/kvB (1.012 |
| 184 | + sats/vbyte) sera utilisé. Le PR améliore également la fiabilité du démarrage en retournant une |
| 185 | + erreur de `EstimateFeePerKW` si appelé avant que l'estimateur de frais ne soit complètement |
| 186 | + initialisé. |
| 187 | + |
| 188 | +- [LDK #3139][] améliore la sécurité des [offres][topic offers] BOLT12 en authentifiant |
| 189 | + l'utilisation de [chemins aveuglés][topic rv routing]. Sans cette authentification, l'attaquant |
| 190 | + Mallory peut prendre l'offre de Bob et demander une facture à chaque nœud du réseau pour déterminer |
| 191 | + lequel d'entre eux appartient à Bob, annulant l'avantage de confidentialité de l'utilisation d'un |
| 192 | + chemin aveuglé. Pour corriger cela, un nonce de 128 bits est maintenant inclus dans le chemin |
| 193 | + aveuglé crypté de chaque offre, plutôt que dans les métadonnées non cryptées de l'offre. Ce |
| 194 | + changement invalide les paiements sortants et les remboursements avec des chemins aveuglés non vides |
| 195 | + créés dans les versions précédentes. D'autre part, les offres créées dans les versions précédentes |
| 196 | + sont toujours valides mais sont vulnérables aux attaques de désanonymisation, donc les utilisateurs |
| 197 | + peuvent vouloir les régénérer après avoir mis à jour vers une version de LDK qui inclut ce |
| 198 | + correctif. |
| 199 | + |
| 200 | +- [Rust Bitcoin #3010][] introduit un champ de longueur à `sha256::Midstate`, permettant un suivi |
| 201 | + plus flexible et précis de l'état du hachage lors de la génération incrémentielle d'un digest |
| 202 | + SHA256. Ce changement peut affecter les implémentations existantes qui se fient à la structure |
| 203 | + `Midstate` précédente. |
| 204 | + |
| 205 | +{% assign four_days_after_posting = page.date | date: "%s" | plus: 345600 | date: "%Y-%m-%d 14:30" %} |
| 206 | +{% include snippets/recap-ad.md when=four_days_after_posting %} |
| 207 | +{% include references.md %} |
| 208 | +{% include linkers/issues.md v=2 issues="30515,30126,30482,30275,30408,7474,8891,3139,3010" %} |
| 209 | +[BDK 1.0.0-beta.1]: https://github.com/bitcoindevkit/bdk/releases/tag/v1.0.0-beta.1 |
| 210 | +[wuille selection]: https://delvingbitcoin.org/t/cluster-mempool-block-building-with-sub-chunk-granularity/1044 |
| 211 | +[branch-and-bound]: https://en.wikipedia.org/wiki/Branch_and_bound |
| 212 | +[delgado hyperion]: https://delvingbitcoin.org/t/hyperion-a-discrete-time-network-event-simulator-for-bitcoin-core/1042 |
| 213 | +[hyperion]: https://github.com/sr-gi/hyperion |
| 214 | +[news310 disclosure]: /fr/newsletters/2024/07/05/#divulgation-de-vulnerabilites-affectant-les-versions-de-bitcoin-core-anterieures-a-0-21-0 |
| 215 | +[Crash à distance en envoyant des messages `addr` excessifs]: https://bitcoincore.org/en/2024/07/31/disclose-addrman-int-overflow/ |
| 216 | +[news159 bcc22387]: /en/newsletters/2021/07/28/#bitcoin-core-22387 |
| 217 | +[news310 miniupnpc]: /fr/newsletters/2024/07/05/#execution-de-code-a-distance-due-a-un-bug-dans-miniupnpc |
| 218 | +[Crash à distance sur le réseau local lorsque UPnP est activé]: https://bitcoincore.org/en/2024/07/31/disclose-upnp-oom/ |
| 219 | +[upnp]: https://en.wikipedia.org/wiki/Universal_Plug_and_Play |
| 220 | +[nat traversal]: https://en.wikipedia.org/wiki/NAT_traversal |
| 221 | +[wuille cluster]: https://delvingbitcoin.org/t/introduction-to-cluster-linearization/1032 |
| 222 | +[goegge disclosure]: https://mailing-list.bitcoindevs.xyz/bitcoindev/[email protected]/ |
| 223 | +[news246 bipterminology]: /fr/newsletters/2023/04/12/#proposition-de-bip-pour-la-terminologie-des-transactions |
| 224 | +[bolt12 pr]: https://github.com/lightning/bolts/pull/798 |
0 commit comments