Aller au contenu principal
BIP

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

← Retour au glossaire complet

Glossaire inspire du dictionnaire de Loic Morel sur Pandul.fr.