BIP-37
BIP-37 introduit les bloom filters pour SPV. Source de fuite de confidentialité, désactivé par défaut depuis Bitcoin Core 0.19. Remplacé par Neutrino (BIP-157/158).
L'idée d'origine : SPV sans bande passante
BIP-37, proposé par Matt Corallo en octobre 2012, ajoute le support des filtres de Bloom côté serveur dans le protocole P2P Bitcoin. L'objectif était d'optimiser les wallets SPV (Simplified Payment Verification, idée décrite par Satoshi dans le whitepaper) : un wallet léger envoie un filtre probabiliste de ses adresses, et le full node lui renvoie uniquement les transactions correspondantes.
Comment fonctionne le bloom filter
Un bloom filter est une structure probabiliste compacte qui répond à la question « cet élément est-il dans l'ensemble ? » avec faux positifs possibles mais jamais de faux négatif. Le wallet SPV envoie un filtre encodant ses adresses ; le full node teste chaque transaction contre le filtre et envoie celles qui matchent (plus quelques fausses).
Le problème de confidentialité
L'usage réel a révélé une faiblesse majeure : même avec des faux positifs, le filtre fuite massivement les adresses du wallet. Une étude de 2014 (Gervais et al.) a montré qu'un nœud malveillant pouvait identifier les adresses d'un wallet SPV avec plus de 90 % de précision en analysant plusieurs requêtes successives. Le faux positif rate trop bas pour anonymiser efficacement, trop haut pour rester pratique.
Le risque d'attaque par déni de service
Au-delà de la privacy, BIP-37 ouvre un vecteur DoS : un attaquant peut demander des filtres très permissifs, forçant le full node à scanner toute la chaîne et à renvoyer un volume énorme. Plusieurs limitations ont été ajoutées (taille max, rate limiting), mais sans résoudre fondamentalement le problème.
Le remplacement : Neutrino (BIP-157/158)
En 2017, Olaoluwa Osuntokun et Alex Akselrod ont proposé BIP-158 et BIP-157, qui inversent le modèle : c'est le serveur qui calcule un filtre déterministe par bloc, et le client qui le télécharge et matche localement. Avantages :
- Pas de fuite de confidentialité côté serveur.
- Charge prévisible et symétrique.
- Vérifiable par n'importe quel nœud.
État actuel
Bitcoin Core a désactivé BIP-37 par défaut depuis la version 0.19 (2019). Les wallets SPV modernes (Wasabi, Sparrow en SPV) utilisent Neutrino ou Electrum. BIP-37 reste utilisable pour les vieux clients Android (BitcoinJ).
À retenir
BIP-37 a été un compromis pragmatique des débuts de Bitcoin, mais ses défauts de privacy et de DoS l'ont condamné. C'est un excellent exemple de protocole déprécié au profit d'une solution plus saine (BIP-158).
Termes lies
- 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).
- SPV (Simplified Payment Verification)SPV est le mode léger décrit par Satoshi dans le white paper. Permet de vérifier une transaction sans synchroniser toute la chaîne. Utilisé par les wallets mobiles (Electrum, BlueWallet). Inférieur à un full node sur la sécurité et la vie privée.
- 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.
Glossaire inspire du dictionnaire de Loic Morel sur Pandul.fr.