loader image
WhatsApp Destek
Bloom Filter-Bloom Filtresi

Bloom filtresi, kullanıcıya belirli bir öğenin, bir setin parçası olup olmadığını bildiren bir veri yapısıdır. Her ne kadar bir öğenin setin içinde olduğunu kesin olarak söyleyemese de bu öğe eğer setin içinde bulunmuyorsa bunu kesin olarak bildirebilmektedir.
Bloom Filtresi, Burton Howard Bloom tarafından 1970 yılında bulunmuş olan olasılık temelli bir veri yapısıdır. Bu veri yapısı ile bir elemanın bir küme içinde yer alıp almadığı düşük maliyetle sorgulanabilmektedir. Burton Howard Bloom tarafından 1970 yılında yaratılan Bloom filtresi, depolama alanı kullanımındaki verimliliği sayesinde çoğu uygulamada kullanılmaktadır. Bazı kripto para birimlerinin (özellikle Bitcoin), Basitleştirilmiş Ödeme Doğrulaması veya SPV ( Simplified Payment Verification ) uygulamalarında Bloom filtreleri olmazsa olmazdır. Bir SPV yazılımı kullanırken, kullanıcılar full node (tam düğüm) çalıştırmadan Bitcoin ağı ile etkileşime girebilirler.
Full nodelar, akıllı telefonlar gibi düşük güçlü cihazlarda çalıştırılmalarını zorlaştıran belirli depolama ve hesaplama gereksinimleri ile birlikte gelmektedir. Öte yandan SPV yazılımları, kullanıcının cüzdanları ile ilgili bilgiler için full nodelara soru sormaktadır. Bu verileri kullanıcıya iletmenin en basit çözümü, full nodeları müşterinin anahtarlarından haberdar ederek onlara yalnızca takas ile ilgili işlemlerin gönderilmesini sağlamaktan geçmektedir. Ancak bu durumda, müşterinin mahremiyetinden ödün verileceği için bu yöntem oldukça kötü bir çözümdür. Öte yandan, tüm takas işlemleri daha sonra çoğunu silmek üzere indirilirse bu durumda da fazla veri kullanımına yol açılmaktadır ve verimsiz bir işlem olmaktadır. Bloom filtrelerinin kullanılmasının sebebi budur.
Bloom filtresi veri yapısına olasılıksal adı veri verilmesinin nedeni verdiği yanıtlar arasında false positive sonuçların olabilmesinden kaynaklanmaktadır. Bloom filtresi "Evet, eleman bu kümede bulunuyor." yanıtını verirse eleman bu kümede olma olasılığını yüzde elli oranında taşır. Ancak bunun tam tersi, yani false negative yanıtlar bloom filtresi için geçerli olmamaktadır. Diğer bir deyişle eğer bloom filtresi "Hayır, eleman bu kümede bulunmuyor." derse mutlaka doğru cevabı vermektedir. Doğru veri yapılandırması ile false positive oranı %1'in altında tutulabilmektedir. Böylece bloom filtresi özellikle veritabanı analizinden önce kullanıldığında gereksiz disk erişiminin önüne geçebilmektedir. Yani bloom filtreleri, diğer dizeler için yapılandırılabilir bir yanlış pozitif eşleşme oranıyla belirli, bir dizeyle eşleşmesi garanti edilen kompakt bir filtre oluşturma yeteneği sağlamaktadır.
Örnek olarak, ehemmiyeti olmayan bir istemci, tüm cüzdan adresleri için bir bloom filtresi oluşturabilir, bu filtreyi BIP37'de tanımlanan P2P protokol mesajlarını kullanarak bir düğüme gönderebilir ve ardından düğümden özel bir blok formu (merkle blokları) talep edebilir. BIP37 popüler olduğunda, onu kullanan çoğu ehemmiyetsiz istemci, sınırlı bant genişliğine sahip mobil cihazlarda çalışması sebebiyle bant genişliği kullanımlarını en aza indirmek için düşük yanlış pozitif oranları seçmiştir. Bu seçim, iletişim kurdukları herhangi bir düğüm baz alındığında, o düğüme adres listelerinin verildiği anlamına gelmekteydi. Gizlilik odaklı kullanıcıların daha yüksek bir yanlış pozitif oran ayarlayarak bu gizlilik kaybını hafifletmeleri beklenirken, araştırmalar makul bir inkar edilebilirlik sağlamak için oranın oldukça yüksek olması gerektiğini göstermektedir.
Ek bir sorun olarak, BIP37 filtrelerine hizmet eden düğümler, her istemci için bağımsız olarak filtreleme yapmalıdır ayrıca filtrelerin, düğümlerin her bloğu filtrelemek için yoğun miktarda CPU işleme yapmasını gerektirecek şekilde oluşturulması mümkün olmaktadır. Bu durum, düğümlere karşı bir dizi bilinen DoS vektörü olarak sonuçlanmıştır. Pratikte BIP37, istemcilerin oldukça az miktarda bant genişliği kullanmasına izin verse de, daha yavaştır ve büyük işlem veritabanlarına dayalı diğer uzaktan işlem tarama yöntemlerinden daha fazla bant genişliği kullanmıştır. Günümüzde birçok popüler ama ehemmiyetsiz olan istemci, işlem bloom filtreleri kullanmak yerine bu tür veritabanlarını sorgulamaktadır.
Bloom Filter Örneği
Görseller aracılığı ile oluşturulmuş bu örnekte bloom filtrelerinin nasıl çalıştığı aşağıdaki örnekle anlaşılabilir. Ali adındaki bir müşterinin, full node çalıştıran Ayşe’nin farkında olmasını istemediği yüksek değerli bir işlemi olduğu varsayılsın. Bu durumda 10x1'lik bir şerit olarak gösterilecek bir Bloom filtresi oluşturulacaktır:
Ali istediği verileri 2 farklı hash fonksiyonundan geçirerek, bunun sonucunda ise 0 ve 9 arasında iki rakam elde etmektedir. Bu rakamların 4 ve 7 olduğunu varsayıldıktan sonra Ali bu filtreyi Ayşe’ye göndermektedir.
Yukarıdaki şeride bakıldığında, Ali’nin filtreye hangi verileri aktardığı ile ilgili hiçbir şey öğrenilmemektedir. Ancak elde bir veri seti olsaydı bu verileri aynı filtreden geçirip kıyaslama yapılabilirdi. Eğer doğru set bulunursa filtrenin sonuçları eşleşecektir bu sayede Ali’nin sahip olduğu bilgiye elde veri setini tutan da ulaşabilmektedir. Öte yandan 4 ve 7 sonucuna ulaşacak bir çok farklı girdi olabilmektedir. O nedenle Ayşe, Ali’nin hangi verilerle ilgilendiğini bilememektedir. Yani Ayşe sadece Ali’nin hangi veri filtrelerini kullandığını bilebilmektedir. Ve aynı işlemi tekrar eder.
Tabii ki de bu örnek aşırı basitleştirilmiş bir örnektir. Ancak konsepti anlamak açısından yeterlidir. Bir başka deyişle, Bloom filtreleri müşterilerin niyetini gizlemelesine yardımcı olmaktadır. Her ne kadar mükemmel bir güvenlik tedbiri olmasa da (gizlilik konusu hala tartışılıyor), Bloom filtreleri olumlu bir girişim olarak kabul edilmektedir.
bitcoin
Bitcoin (BTC) $ 97,678.17
ethereum
Ethereum (ETH) $ 2,735.42
xrp
XRP (XRP) $ 2.47
tether
Tether (USDT) $ 1.00
bnb
BNB (BNB) $ 698.20
solana
Solana (SOL) $ 196.38
usd-coin
USDC (USDC) $ 1.00
dogecoin
Dogecoin (DOGE) $ 0.263296
cardano
Cardano (ADA) $ 0.796983
staked-ether
Lido Staked Ether (STETH) $ 2,737.01
tron
TRON (TRX) $ 0.242981
wrapped-bitcoin
Wrapped Bitcoin (WBTC) $ 97,365.09
chainlink
Chainlink (LINK) $ 19.17
sui
Sui (SUI) $ 3.57
wrapped-steth
Wrapped stETH (WSTETH) $ 3,264.26
avalanche-2
Avalanche (AVAX) $ 26.52
stellar
Stellar (XLM) $ 0.33227
shiba-inu
Shiba Inu (SHIB) $ 0.000017
the-open-network
Toncoin (TON) $ 3.82
litecoin
Litecoin (LTC) $ 121.92
leo-token
LEO Token (LEO) $ 9.82
hedera-hashgraph
Hedera (HBAR) $ 0.234343
hyperliquid
Hyperliquid (HYPE) $ 25.78
usds
USDS (USDS) $ 1.00
weth
WETH (WETH) $ 2,734.48
polkadot
Polkadot (DOT) $ 5.23
bitget-token
Bitget Token (BGB) $ 6.01
bitcoin-cash
Bitcoin Cash (BCH) $ 342.32
ethena-usde
Ethena USDe (USDE) $ 0.9997
uniswap
Uniswap (UNI) $ 9.95
mantra-dao
MANTRA (OM) $ 5.76
wrapped-eeth
Wrapped eETH (WEETH) $ 2,899.06
ondo-finance
Ondo (ONDO) $ 1.39
pepe
Pepe (PEPE) $ 0.00001
monero
Monero (XMR) $ 227.46
near
NEAR Protocol (NEAR) $ 3.42
whitebit
WhiteBIT Coin (WBT) $ 27.36
aave
Aave (AAVE) $ 252.67
internet-computer
Internet Computer (ICP) $ 7.39
aptos
Aptos (APT) $ 6.13
mantle
Mantle (MNT) $ 1.05
dai
Dai (DAI) $ 0.999865
bittensor
Bittensor (TAO) $ 402.72
susds
sUSDS (SUSDS) $ 1.03
ethereum-classic
Ethereum Classic (ETC) $ 21.34
okb
OKB (OKB) $ 51.91
official-trump
Official Trump (TRUMP) $ 15.41
vechain
VeChain (VET) $ 0.035404
gatechain-token
Gate (GT) $ 22.34
polygon-ecosystem-token
POL (ex-MATIC) (POL) $ 0.328604
crypto-com-chain
Cronos (CRO) $ 0.094938
algorand
Algorand (ALGO) $ 0.30323
kaspa
Kaspa (KAS) $ 0.098072
coinbase-wrapped-btc
Coinbase Wrapped BTC (CBBTC) $ 97,609.15
render-token
Render (RENDER) $ 4.64
jupiter-exchange-solana
Jupiter (JUP) $ 0.857899
tokenize-xchange
Tokenize Xchange (TKX) $ 27.97
cosmos
Cosmos Hub (ATOM) $ 5.08
filecoin
Filecoin (FIL) $ 3.47
arbitrum
Arbitrum (ARB) $ 0.493496
fetch-ai
Artificial Superintelligence Alliance (FET) $ 0.826155
first-digital-usd
First Digital USD (FDUSD) $ 0.998665
lombard-staked-btc
Lombard Staked BTC (LBTC) $ 96,919.97
sonic-3
Sonic (prev. FTM) (S) $ 0.556264
celestia
Celestia (TIA) $ 3.21
fasttoken
Fasttoken (FTN) $ 3.94
binance-peg-weth
Binance-Peg WETH (WETH) $ 2,726.69
kelp-dao-restaked-eth
Kelp DAO Restaked ETH (RSETH) $ 2,831.64
binance-staked-sol
Binance Staked SOL (BNSOL) $ 202.76
lido-dao
Lido DAO (LDO) $ 1.74
raydium
Raydium (RAY) $ 5.25
optimism
Optimism (OP) $ 1.12
kucoin-shares
KuCoin (KCS) $ 12.34
blockstack
Stacks (STX) $ 0.984872
solv-btc
Solv Protocol SolvBTC (SOLVBTC) $ 97,438.11
xdce-crowd-sale
XDC Network (XDC) $ 0.093478
injective-protocol
Injective (INJ) $ 14.93
immutable-x
Immutable (IMX) $ 0.830083
theta-token
Theta Network (THETA) $ 1.44
ethena
Ethena (ENA) $ 0.448005
bonk
Bonk (BONK) $ 0.000018
the-graph
The Graph (GRT) $ 0.145366
rocket-pool-eth
Rocket Pool ETH (RETH) $ 3,071.25
nexo
NEXO (NEXO) $ 1.35
movement
Movement (MOVE) $ 0.564821
quant-network
Quant (QNT) $ 92.98
mantle-staked-ether
Mantle Staked Ether (METH) $ 2,890.76
worldcoin-wld
Worldcoin (WLD) $ 1.28
flare-networks
Flare (FLR) $ 0.021048
usual-usd
Usual USD (USD0) $ 0.997314
jasmycoin
JasmyCoin (JASMY) $ 0.022911
sei-network
Sei (SEI) $ 0.240857
dexe
DeXe (DEXE) $ 18.64
gala
GALA (GALA) $ 0.024151
solv-protocol-solvbtc-bbn
Solv Protocol SolvBTC.BBN (SOLVBTC.BB) $ 96,873.96
eos
EOS (EOS) $ 0.658213
the-sandbox
The Sandbox (SAND) $ 0.403414
msol
Marinade Staked SOL (MSOL) $ 248.65
floki
FLOKI (FLOKI) $ 0.000101
tezos
Tezos (XTZ) $ 0.920867