Sözlük / Düğümler ve yazılım
Bloom filtresi
Diğer adları: BIP37.
- Bloom filtresi nedir?
- Bloom filtresi, BIP37 hafif cüzdanlarının tam bir düğüme gönderdiği ve düğümün yalnızca kendilerine ait olması muhtemel işlemleri iletmesini sağlayan kompakt, olasılıksal bir kümedir.
Tanımlandığı belge: BIP-37.
Tasarım, bant genişliğini yazarlarının gizlilik olmasını umduğu şeyle takas etti ve gizlilik hiç gelmedi. Yıllar süren araştırmalar ne kadar çok sızdırdığını gösterdikten sonra Bitcoin Core, Kasım 2019'da yayımlanan 0.19.0 sürümünde bu filtreleri varsayılan olarak sunmayı bıraktı. Hâlâ bunlardan birine dayanan bir cüzdan, bir yabancının makinesine sahip olduğunuz bitcoinlerin kullanılabilir bir listesini teslim ediyor demektir.
Nasıl çalışır
Durum: BIP37 Bloom filtreleme, Kasım 2019'da Bitcoin Core 0.19.0 sürümünde varsayılan olarak kapatıldı ve hafif cüzdan görevini BIP157 ile BIP158 kompakt blok filtreleri devraldı.
Bir Bloom filtresi, bir bit dizisi ile bir avuç hash fonksiyonundan oluşur. Bir öğeyi eklemek için onu birkaç farklı şekilde hash'lersiniz, her sonucun dizi uzunluğuna göre modunu alırsınız ve o bitleri bire ayarlarsınız. Bir öğeyi sınamak için onu aynı şekillerde hash'lersiniz ve o bitlere bakarsınız. Bu bitlerden herhangi biri sıfırsa öğe kesinlikle hiç eklenmemiştir; hepsi bir ise öğe muhtemelen eklenmiştir ya da başka eklemeler tesadüfen aynı bitleri ayarlamıştır. Yanlış negatifler oluşamaz. Yanlış pozitifler oluşabilir ve bunların oranı ayar düğmesidir.
BIP37 aritmetiği sabitledi. Bir filtre 36.000 bayt ve 50 hash fonksiyonuyla sınırlıdır ve hash'leme, hash numarasının 0xFBA4C795 ile çarpımı artı istemcinin seçtiği bir ayar (tweak) değeriyle tohumlanan 32 bitlik Murmur fonksiyonunun 3 sürümüyle yapılır. Üç mesaj bunu yürütür: filterload bağlantıya bir filtre kurar, filteradd onu genişletir, filterclear onu kaldırır. Filtre ayarlandıktan sonra eş düğüm, bir blok isteğine 80 baytlık başlığı, eşleşen işlemleri ve bunların o bloğa ait olduğunu kanıtlayan merkle dallarını taşıyan bir merkleblock ile yanıt verir. BIP111 daha sonra NODE_BLOOM hizmet bitini ekledi, böylece bir düğüm buna katılıp katılmayacağını ilan edebildi.
Gizlilik hikâyesi tamamen bu yanlış pozitif oranına dayanıyordu. Filtreyi genişletin, yabancıların işlemlerini kendi işlemlerinizin yanında yakalayın, ve bir gözlemcinin hangisinin hangisi olduğunu sözde ayırt edemeyeceği varsayılır. Bu tutmaz. 2014 yılında yayımlanan akademik bir çalışma, gerçekçi sayıda adres taşıyan bir filtrenin bunların çoğunu ele verdiğini ve aynı cüzdanın yüklediği iki filtrenin kesiştirilerek kamuflajın sıyrılabildiğini gösterdi. Yeni bir filtreyle taze bir eş düğüme yeniden bağlanmak sorunu düzeltmez, daha da kötüleştirir.
Diğer arızanın açıklaması daha ucuzdu. Bir filtreyi sunmak, bir yabancının talimatıyla diskten blok taramak demektir, bu yüzden herhangi bir eş düğüm, mekanik diski olan bir düğüme çok büyük miktarda karşılıksız iş yaptırabilirdi. 0.19.0 sürüm notlarının başında yer alan şey bu hizmet reddi argümanıdır, gizlilik araştırması değil.
Nerede görülür
Bloom filtreleri çoğunlukla 2019 öncesinde yazılmış yazılımlarda ve bunların yokluğunu dolanan yapılandırma dosyalarında varlığını sürdürür.
bitcoinj kütüphanesi üzerine kurulu Android cüzdanları BIP37'yi tek zincir arka uçları olarak kullandı ve bazıları hâlâ kuruludur. Bisq de buna ihtiyaç duydu, bu yüzden belgeleri insanlara kendi düğümlerinin yapılandırmasına peerbloomfilters=1 eklemelerini söylerdi. O satır ipucudur: bir yazılım çalıştırdığınız bir düğümde Bloom filtrelemeyi yeniden etkinleştirmenizi istediğinde, referans istemcinin haklı nedenlerle kapattığı bir tekniği istiyor demektir.
Modern yerine geçen çözüm ters yönde çalışır. BIP157 ve BIP158 kapsamında düğüm her blok için bir filtre oluşturur ve bunu herkese yayımlar, cüzdan ise eşleşmeyi kendi donanımında yapar, böylece adreslerinizle ilgili hiçbir şey cihazdan çıkmaz.
Bloom filtresi vs SPV
Bir Bloom filtresi bir teslimat mekanizmasıydı; basitleştirilmiş ödeme doğrulaması ise bir güven modelidir ve ikisini birbirine karıştırmak, insanların modelin mekanizmayla birlikte öldüğünü sanmasına yol açar. SPV, bir işlemin en fazla işe sahip zincirdeki bir başlığın merkle kökü altında bulunduğunu, o zincirin geri kalan içeriğini doğrulamadan kontrol etmek anlamına gelir. Bu akıl yürütme değişmedi. Değişen, hafif bir cüzdanın denetlemeye değer işlemleri nasıl bulduğudur: eskiden kendi adreslerinin kayıplı bir taslağını yayıp umut ederdi, şimdi ise her blok için bir filtre indirip onu kendi cihazında sınar.