Compact Block Filters
Les compact block filters (BIP-158) sont des filtres GCS qui résument le contenu d'un bloc. Permettent à un client léger de tester localement la pertinence d'un bloc. Plus privés que les bloom filters. Base de Neutrino.
Le problème des bloom filters
Les bloom filters (BIP-37) permettaient à un wallet SPV de demander à un full node les transactions qui le concernent. Mais ils exposaient les adresses du client au serveur, ce qui était inacceptable pour la confidentialité. Bitcoin Core a désactivé peerbloomfilters par défaut en 0.19 (2019). Un remplaçant était nécessaire.
La proposition BIP-157/158
Olaoluwa Osuntokun et Alex Akselrod proposent en 2017 les Compact Block Filters dans BIP-157 et BIP-158. L'idée : inverser le paradigme. Plutôt que le client envoie son filtre, c'est le serveur qui calcule un filtre par bloc et le publie. Le client télécharge ce filtre (compact, ~20 Ko par bloc moyen) et teste localement si une de ses adresses est dedans. Aucune information sur le client ne fuite.
Le filtre GCS
Le filtre utilisé est un Golomb-Coded Set (GCS), une structure plus compacte que bloom et avec un taux de faux positifs réglable :
| Paramètre | Valeur typique BIP-158 | |-----------|------------------------| | M (taille espace) | 784 931 | | P (FP rate) | 1 / 784 931 (~0,00013 %) | | Taille moyenne | ~20 Ko par bloc | | Encodage | Golomb-Rice, très compact |
Le contenu du filtre est un hash de chaque script Bitcoin observé dans le bloc, plus quelques métadonnées.
Comment un client l'utilise
- Télécharge l'en-tête de bloc (80 octets) pour vérifier la chaîne PoW
- Télécharge le filtre du bloc (BIP-157)
- Calcule le hash de ses adresses
- Teste localement : ses adresses sont-elles dans le filtre ?
- Si oui (souvent un vrai positif, parfois un faux positif), télécharge le bloc complet
- Extrait les transactions pertinentes
C'est ce workflow qui est implémenté dans Neutrino.
Comparaison avec bloom et Electrum
| Méthode | Privacy client | Bande passante | Confiance serveur | |---------|----------------|----------------|-------------------| | Bloom (BIP-37) | Mauvaise | Faible | Forte | | Electrum protocol | Mauvaise | Très faible | Forte | | Compact Block Filters | Bonne | Modérée (~3-5 GB/an) | Faible | | Full node local | Maximale | Élevée (~700 GB + IBD) | Aucune |
Compact Block Filters offrent le meilleur compromis pour les wallets mobiles modernes.
Adoption
| Wallet / projet | Usage des CBF | |-----------------|----------------| | LND (Neutrino backend) | Oui | | btcd | Serveur de filtres | | Bitcoin Core | Serveur depuis 0.21 (filterindex) | | Phoenix | Indirect via Neutrino | | Mutiny | Oui | | Sparrow | Oui (option) | | BlueWallet | Non (utilise Electrum) |
L'index serveur est encore optionnel dans Bitcoin Core (paramètre blockfilterindex=1).
Limites
- Bande passante non négligeable pour mobile (3-5 GB/an de filtres si on les télécharge tous depuis 2017)
- Faux positifs : ~1 / 784 931 par adresse par bloc, gérables mais à comptabiliser
- Pas de scan rapide sur grosse plage : il faut parcourir les filtres bloc par bloc
À retenir
Les Compact Block Filters sont l'outil moderne des wallets légers : ils combinent une bonne confidentialité, une exigence raisonnable en ressources, et un modèle de confiance minimal envers le serveur. Ils sont la base de tous les wallets Lightning mobiles non-custodial sérieux.
Termes lies
- NeutrinoNeutrino (BIP-157/158) est un mode de scan SPV où le client filtre côté lui-même via les compact block filters. Préserve la confidentialité contre les serveurs. Utilisé par certains wallets Lightning (LDK, etc.). Évolution moderne du SPV.
- Bloom filterUn bloom filter (BIP-37) permet à un nœud SPV de demander aux full nodes les transactions qui le concernent. Source de fuite de confidentialité. Désactivé par défaut sur Bitcoin Core depuis longtemps. Remplacé par Neutrino (BIP-157/158).
- BIP-158BIP-158 spécifie les compact block filters basés sur GCS (Golomb-coded sets). Permettent de tester localement la pertinence d'un bloc. Cœur de Neutrino.
Glossaire inspire du dictionnaire de Loic Morel sur Pandul.fr.