Mastering Bitcoin - Bitcoin Ağı - Part IV
August 8th, 2022

SPV Node'ları Bloom Filtrelerini Nasıl Kullanır?

Bloom filtreleri, bir SPV node'unun eşlerinden aldığı işlemleri (ve bunları içeren blokları) filtrelemek için kullanılır ve hangi adresler veya anahtarlarla ilgilendiğini açıklamadan yalnızca SPV node'unun ilgilendiği işlemleri seçer.

Bir SPV node'u, bir bloom filtresini "boş" olarak başlatır; bu durumda bloom filtresi herhangi bir desenle eşleşmeyecektir. SPV node'u daha sonra ilgilendiği tüm adreslerin, anahtarların ve hashlerin bir listesini yapacaktır. Bunu, cüzdanı tarafından kontrol edilen herhangi bir UTXO'dan genel anahtar hashi, komut dosyası hashi ve işlem IDlerini çıkararak yapacaktır. SPV node'u daha sonra bunların her birini bloom filtresine ekler, böylece bloom filtresi, bu modeller bir işlemde mevcutsa, desenlerin kendisini ifşa etmeden "eşleşir".

SPV node'u daha sonra eşe, bağlantıda kullanılacak bloom filtresini içeren bir filterload (filtre yükü) mesajı gönderir. Eşte, bloom filtreleri gelen her işleme karşı kontrol edilir. Tam node, aşağıdakileri içeren bir eşleşme aramak için işlemin birkaç bölümünü bloom filtresine karşı kontrol eder:

  • İşlem ID’si
  • İşlem çıktılarının her birinin kilitleme komut dosyalarından veri bileşenleri (komut dosyasındaki her anahtar ve hash)
  • İşlem girdilerinin her biri
  • Girdi imza veri bileşenlerinin her biri (veya witness komut dosyaları)

Tüm bu bileşenler kontrol edilerek, genel anahtar hashlerini, komut dosyalarını, OP_RETURN değerlerini, imzalardaki genel anahtarları veya bir akıllı sözleşmenin veya karmaşık komut dosyasının gelecekteki herhangi bir bileşenini eşleştirmek için bloom filtreleri kullanılabilir.

Bir filtre oluşturulduktan sonra, eş, her işlemin çıktısını bloom filtresine karşı test eder. node'a yalnızca filtreyle eşleşen işlemler gönderilir.

node'dan gelen bir getdata mesajına yanıt olarak, eşler filtreyle eşleşen bloklar için sadece blok başlıklarını içeren bir merkleblock mesajı ve eşleşen her işlem için bir merkle yolu gönderecektir. Eş, daha sonra filtre tarafından eşleşen işlemleri içeren tx mesajları da gönderir.

Tam node, işlemleri SPV node'una gönderirken, SPV node'u tüm yanlış pozitifleri atar ve UTXO setini ve cüzdan bakiyesini güncellemek için doğru eşleşen işlemleri kullanır. UTXO kümesine ilişkin kendi görünümünü güncellerken, bloom filtresini de yeni bulduğu UTXO'yu referans alan gelecekteki işlemlerle eşleşecek şekilde değiştirir. Tam node daha sonra yeni işlemleri eşleştirmek için yeni bloom filtresini kullanır ve tüm süreç tekrarlanır.

Bloom filtresini ayarlayan node, bir filteradd mesajı göndererek filtreye etkileşimli olarak desenler ekleyebilir. Bloom filtresini temizlemek için node bir filterclear mesajı gönderebilir. Bloom filtresinden bir deseni çıkarmak mümkün olmadığından, bir desen artık istenmiyorsa node'un yeni bir bloom filtresini temizlemesi ve yeniden göndermesi gerekir.

SPV node'ları için ağ protokolü ve bloom filtresi mekanizması, BIP-37 (Eş Hizmetleri) bölümünde tanımlanmıştır.

SPV Node'ları ve Gizlilik

SPV uygulayan node'lar, tam bir node'dan daha zayıf gizliliğe sahiptir. Tam node tüm işlemleri bünyesine alır ve bu nedenle cüzdanında bir adres kullanıp kullanmadığı hakkında hiçbir bilgi vermez. Bir SPV node'u, cüzdanındaki adreslerle ilgili filtrelenmiş bir işlem listesi alır. Sonuç olarak, sahibinin mahremiyetini azaltır.

Bloom filtreleri, gizlilik kaybını azaltmanın bir yoludur. Onlar olmadan, bir SPV node'u, ilgilendiği adresleri açıkça listelemek zorunda kalacak ve ciddi bir gizlilik ihlali yaratacaktır. Bununla birlikte, bloom filtreleriyle bile, bir SPV istemcisinin trafiğini izleyen veya doğrudan P2P ağındaki bir node olarak ona bağlanan bir kötü niyetli node, SPV istemcisinin cüzdanındaki adresleri öğrenmek için zaman içinde yeterli bilgi toplayabilir.

Şifreli ve Kimliği Doğrulanmış Bağlantılar

Çoğu yeni Bitcoin kullanıcısı, bir Bitcoin node'unun ağ iletişiminin şifreli olduğunu varsayar. Aslında, Bitcoin'in orijinal uygulaması tamamen açık bir şekilde iletişim kurar. Bu, tam node'lar için büyük bir gizlilik sorunu olmasa da, SPV node'ları için büyük bir sorundur.

Bitcoin P2P ağının gizliliğini ve güvenliğini artırmanın bir yolu olarak, iletişimlerin şifrelenmesini sağlayan iki çözüm vardır: Tor Taşıma ve P2P Kimlik Doğrulaması & BIP-150/151 ile Şifreleme.

TOR Taşıma

The Onion Routing olarak da bilinen TOR, anonimlik, izlenemezlik ve gizlilik sunan rastgele ağ yolları aracılığıyla verilerin şifrelenmesini ve kapsüllenmesini sağlayan bir yazılım projesi ve ağdır.

Bitcoin Core, trafiği TOR ağı üzerinden taşınan bir Bitcoin node'u çalıştırmanıza izin veren çeşitli yapılandırma seçenekleri sunar. Ayrıca Bitcoin Core, diğer TOR node'larının doğrudan TOR üzerinden node'unuza bağlanmasına izin veren bir TOR gizli hizmeti de sunabilir.

Bitcoin Core 0.12 sürümünden itibaren bir node, yerel bir TOR hizmetine bağlanabiliyorsa otomatik olarak gizli bir TOR hizmeti sunacaktır. TOR'u yüklediyseniz ve Bitcoin Core işlemi, TOR kimlik doğrulama tanımlama bilgisine erişmek için yeterli izinlere sahip bir kullanıcı olarak çalışıyorsa, otomatik olarak çalışması gerekir. TOR hizmeti için Bitcoin Core'un hata ayıklamasını şu şekilde açmak için hata ayıklama bayrağını kullanın:

$ bitcoind --daemon --debug=tor

Loglarda, Bitcoin Core'un TOR ağına gizli bir hizmet eklediğini belirten "tor: ADD_ONION successful" ifadesini görmelisiniz.

Bitcoin Core belgelerinde (docs/tor.md) ve çeşitli çevrimiçi eğitimlerde Bitcoin Core'u TOR gizli hizmeti olarak çalıştırma hakkında daha fazla rehber bulabilirsiniz.

Eşler Arası Kimlik Doğrulama ve Şifreleme

İki Bitcoin İyileştirme Önerisi, BIP-150 ve BIP-151, Bitcoin P2P ağında P2P kimlik doğrulaması ve şifreleme için destek ekler. Bu iki BIP, uyumlu Bitcoin node'ları tarafından sunulabilecek isteğe bağlı hizmetleri tanımlar. BIP-151, BIP-151'i destekleyen iki node arasındaki tüm iletişimler için anlaşmalı şifreleme sağlar. BIP-150, node'ların ECDSA ve özel anahtarlar kullanarak birbirlerinin kimliğini doğrulamasını sağlayan isteğe bağlı eş kimlik doğrulaması sunar. BIP-150, kimlik doğrulamadan önce iki node’un BIP-151'e göre şifreli iletişim kurmasını gerektirir.

Şubat 2021 itibariyle, BIP-150 ve BIP-151, Bitcoin Core'da uygulanmamaktadır. Bununla birlikte, iki teklif, Bcoin adlı en az bir alternatif Bitcoin istemcisi tarafından uygulandı.

BIP-150 ve BIP-151, kullanıcıların, SPV istemcisinin gizliliğini korumak için şifreleme ve kimlik doğrulama kullanarak güvenilir bir tam node'a bağlanan SPV istemcilerini çalıştırmasına olanak tanır.

Ek olarak, güvenilir Bitcoin node ağları oluşturmak ve Man-in-the-Middle saldırılarını önlemek için kimlik doğrulama kullanılabilir. Son olarak, P2P şifrelemesi, geniş bir şekilde uygulanırsa, özellikle internet kullanımının yoğun bir şekilde kontrol edildiği ve izlendiği totaliter ülkelerde, Bitcoin'in trafik analizine ve gizliliği aşındıran gözetime karşı direncini güçlendirecektir.

Standart, BIP-150 (Eşler Arası Kimlik Doğrulama) ve BIP-151'de (Eşler Arası İletişim Şifrelemesi) tanımlanmıştır.

İşlem Havuzları

Bitcoin ağındaki hemen hemen her node, bellek havuzu (mempool) veya işlem havuzu adı verilen, onaylanmamış işlemlerin geçici bir listesini tutar. node'lar, ağ tarafından bilinen ancak henüz blokzincirine dahil olmayan işlemleri takip etmek için bu havuzu kullanır. Örneğin, bir cüzdan node'u, ağda alınan ancak henüz onaylanmayan kullanıcının cüzdanına gelen ödemeleri izlemek için işlem havuzunu kullanır. İşlemler alınıp doğrulandıkça işlem havuzuna eklenir ve ağ üzerinde yayılmak üzere komşu node'lara iletilir.

Bazı node uygulamaları, ayrı bir yetim işlemler havuzunu da korur. Bir işlemin girdileri, eksik bir üst öğe gibi henüz bilinmeyen bir işleme atıfta bulunuyorsa, artık işlem, üst işlem gelene kadar yetim havuzda geçici olarak depolanır.

İşlem havuzuna bir işlem eklendiğinde, yetim havuzunda bu işlemin çıktılarına (altlarına) başvuran yetim işlemler olup olmadığı kontrol edilir. Eşleşen yetim işlemler daha sonra doğrulanır. Geçerliyse, yetim havuzundan çıkarılır ve ana işlemle başlayan zinciri tamamlayarak işlem havuzuna eklenir. Artık bir yetim olmayan yeni eklenen işlemin ışığında, süreç, daha fazla alt işlem bulununcaya kadar, başka alt işlemler aramak için yinelemeli olarak tekrarlanır. Bu süreç boyunca, bir ana işlemin gelişi, yetim işlemleri tüm zincir boyunca ebeveynleri ile yeniden birleştirerek, birbirine bağlı işlemler zincirinin tamamının kademeli olarak yeniden yapılandırılmasını tetikler.

Hem işlem havuzu hem de yetim havuzu (uygulandığında) yerel bellekte depolanır ve kalıcı depoya kaydedilmez; bunun yerine, gelen ağ mesajlarından dinamik olarak doldurulurlar. Bir node başladığında, her iki havuz da boştur ve yavaş yavaş ağda alınan yeni işlemlerle doldurulur.

Bitcoin istemcisinin bazı uygulamaları, blokzincirindeki tüm harcanmamış çıktıların kümesi olan bir UTXO veritabanı veya havuzu da tutar. Bitcoin Core kullanıcıları, onu müşterilerinin veri dizininin chainstate/folder dizininde bulacaktır. "UTXO havuzu" adı işlem havuzuna benzese de, farklı bir veri kümesini temsil eder. İşlem ve yetim havuzlarından farklı olarak, UTXO havuzu boş olarak başlatılmaz, bunun yerine milyonlarca harcanmamış işlem çıktısının girdilerini, yani başlangıç bloğuna kadar harcanmayan her şeyi içerir. UTXO havuzu, yerel bellekte veya kalıcı depolamada dizinlenmiş bir veritabanı tablosu olarak barındırılabilir.

İşlem ve yetim havuzları, tek bir node'un yerel perspektifini temsil ederken ve node'un ne zaman başlatıldığına veya yeniden başlatıldığına bağlı olarak node'dan node'a önemli ölçüde değişebilirken, UTXO havuzu ağın ortaya çıkan fikir birliğini temsil eder ve bu nedenle node'lar arasında çok az farklılık gösterecektir. Ayrıca, işlem ve yetim havuzları yalnızca onaylanmamış işlemleri içerirken UTXO havuzu yalnızca onaylanmış çıktıları içerir.

Subscribe to iamserdar.eth
Receive the latest updates directly to your inbox.
Nft graphic
Mint this entry as an NFT to add it to your collection.
Verification
This entry has been permanently stored onchain and signed by its creator.
More from iamserdar.eth

Skeleton

Skeleton

Skeleton