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) $ 0.00000000000000
ethereum
Ethereum (ETH) $ 0.00000000000000
tether
Tether (USDT) $ 0.00000000000000
bnb
BNB (BNB) $ 0.00000000000000
xrp
XRP (XRP) $ 0.00000000000000
usd-coin
USDC (USDC) $ 0.00000000000000
solana
Wrapped SOL (SOL) $ 0.00000000000000
staked-ether
Lido Staked Ether (STETH) $ 0.00000000000000
tron
TRON (TRX) $ 0.00000000000000
dogecoin
Dogecoin (DOGE) $ 0.00000000000000
cardano
Cardano (ADA) $ 0.00000000000000
figure-heloc
Figure Heloc (FIGR_HELOC) $ 0.00000000000000
whitebit
WhiteBIT Coin (WBT) $ 0.00000000000000
wrapped-steth
Wrapped stETH (WSTETH) $ 0.00000000000000
bitcoin-cash
Bitcoin Cash (BCH) $ 0.00000000000000
wrapped-bitcoin
Wrapped Bitcoin (WBTC) $ 0.00000000000000
wrapped-beacon-eth
Wrapped Beacon ETH (WBETH) $ 0.00000000000000
usds
USDS (USDS) $ 0.00000000000000
chainlink
Chainlink (LINK) $ 0.00000000000000
wrapped-eeth
Wrapped eETH (WEETH) $ 0.00000000000000
binance-bridged-usdt-bnb-smart-chain
Binance Bridged USDT (BNB Smart Chain) (BSC-USD) $ 0.00000000000000
leo-token
LEO Token (LEO) $ 0.00000000000000
weth
WETH (WETH) $ 0.00000000000000
stellar
Stellar (XLM) $ 0.00000000000000
hyperliquid
Hyperliquid (HYPE) $ 0.00000000000000
zcash
Zcash (ZEC) $ 0.00000000000000
monero
Monero (XMR) $ 0.00000000000000
coinbase-wrapped-btc
Coinbase Wrapped BTC (CBBTC) $ 0.00000000000000
ethena-usde
Ethena USDe (USDE) $ 0.00000000000000
litecoin
Litecoin (LTC) $ 0.00000000000000
sui
Sui (SUI) $ 0.00000000000000
avalanche-2
Avalanche (AVAX) $ 0.00000000000000
hedera-hashgraph
Hedera (HBAR) $ 0.00000000000000
shiba-inu
Shiba Inu (SHIB) $ 0.00000000000000
usdt0
USDT0 (USDT0) $ 0.00000000000000
susds
sUSDS (SUSDS) $ 0.00000000000000
dai
Dai (DAI) $ 0.00000000000000
mantle
Mantle (MNT) $ 0.00000000000000
the-open-network
Toncoin (TON) $ 0.00000000000000
world-liberty-financial
World Liberty Financial (WLFI) $ 0.00000000000000
paypal-usd
PayPal USD (PYUSD) $ 0.00000000000000
crypto-com-chain
Cronos (CRO) $ 0.00000000000000
ethena-staked-usde
Ethena Staked USDe (SUSDE) $ 0.00000000000000
uniswap
Uniswap (UNI) $ 0.00000000000000
polkadot
Polkadot (DOT) $ 0.00000000000000
aave
Aave (AAVE) $ 0.00000000000000
bittensor
Bittensor (TAO) $ 0.00000000000000
memecore
MemeCore (M) $ 0.00000000000000
usd1-wlfi
USD1 (USD1) $ 0.00000000000000
canton-network
Canton (CC) $ 0.00000000000000
rain
Rain (RAIN) $ 0.00000000000000
bitget-token
Bitget Token (BGB) $ 0.00000000000000
okb
OKB (OKB) $ 0.00000000000000
tether-gold
Tether Gold (XAUT) $ 0.00000000000000
falcon-finance
Falcon USD (USDF) $ 0.00000000000000
near
NEAR Protocol (NEAR) $ 0.00000000000000
ethereum-classic
Ethereum Classic (ETC) $ 0.00000000000000
aster-2
Aster (ASTER) $ 0.00000000000000
ethena
Ethena (ENA) $ 0.00000000000000
binance-peg-weth
Binance-Peg WETH (WETH) $ 0.00000000000000
jito-staked-sol
Jito Staked SOL (JITOSOL) $ 0.00000000000000
pepe
Pepe (PEPE) $ 0.00000000000000
blackrock-usd-institutional-digital-liquidity-fund
BlackRock USD Institutional Digital Liquidity Fund (BUIDL) $ 0.00000000000000
internet-computer
Internet Computer (ICP) $ 0.00000000000000
pi-network
Pi Network (PI) $ 0.00000000000000
jupiter-perpetuals-liquidity-provider-token
Jupiter Perpetuals Liquidity Provider Token (JLP) $ 0.00000000000000
pump-fun
Pump.fun (PUMP) $ 0.00000000000000
hash-2
Provenance Blockchain (HASH) $ 0.00000000000000
syrupusdc
syrupUSDC (SYRUPUSDC) $ 0.00000000000000
htx-dao
HTX DAO (HTX) $ 0.00000000000000
pax-gold
PAX Gold (PAXG) $ 0.00000000000000
ondo-finance
Ondo (ONDO) $ 0.00000000000000
worldcoin-wld
Worldcoin (WLD) $ 0.00000000000000
global-dollar
Global Dollar (USDG) $ 0.00000000000000
kucoin-shares
KuCoin (KCS) $ 0.00000000000000
hashnote-usyc
Circle USYC (USYC) $ 0.00000000000000
syrupusdt
syrupUSDT (SYRUPUSDT) $ 0.00000000000000
sky
Sky (SKY) $ 0.00000000000000
bfusd
BFUSD (BFUSD) $ 0.00000000000000
ripple-usd
Ripple USD (RLUSD) $ 0.00000000000000
rocket-pool-eth
Rocket Pool ETH (RETH) $ 0.00000000000000
binance-bridged-usdc-bnb-smart-chain
Binance Bridged USDC (BNB Smart Chain) (USDC) $ 0.00000000000000
polygon-ecosystem-token
POL (ex-MATIC) (POL) $ 0.00000000000000
aptos
Aptos (APT) $ 0.00000000000000
kaspa
Kaspa (KAS) $ 0.00000000000000
gatechain-token
Gate (GT) $ 0.00000000000000
quant-network
Quant (QNT) $ 0.00000000000000
wbnb
Wrapped BNB (WBNB) $ 0.00000000000000
arbitrum
Arbitrum (ARB) $ 0.00000000000000
binance-staked-sol
Binance Staked SOL (BNSOL) $ 0.00000000000000
kelp-dao-restaked-eth
Kelp DAO Restaked ETH (RSETH) $ 0.00000000000000
official-trump
Official Trump (TRUMP) $ 0.00000000000000
algorand
Algorand (ALGO) $ 0.00000000000000
cosmos
Cosmos Hub (ATOM) $ 0.00000000000000
ignition-fbtc
Function FBTC (FBTC) $ 0.00000000000000
liquid-staked-ethereum
Liquid Staked ETH (LSETH) $ 0.00000000000000
vechain
VeChain (VET) $ 0.00000000000000
lombard-staked-btc
Lombard Staked BTC (LBTC) $ 0.00000000000000
flare-networks
Flare (FLR) $ 0.00000000000000
solv-btc
Solv Protocol BTC (SOLVBTC) $ 0.00000000000000