Sözlük / Düğümler ve yazılım
Basitleştirilmiş Ödeme Doğrulaması
Diğer adları: SPV.
- Basitleştirilmiş Ödeme Doğrulaması nedir?
- Basitleştirilmiş ödeme doğrulaması, bir işlemin arkasında gerçek iş kanıtı (proof of work) bulunan bir blokta yer aldığını yalnızca blok başlıklarını ve bir merkle dalını kullanarak kontrol eder.
Satoshi Nakamoto bu yöntemi 2008 tarihli whitepaper'ın 8. bölümünde, bir sunucu çalıştırmadan Bitcoin kullanmanın yolu olarak tanımladı. Yöntem ucuzdur çünkü bir blok başlığı 80 bayttır: yaklaşık 960.000 blokta başlık zincirinin tamamı kabaca 77 MB tutar; Ağustos 2026 itibarıyla blokların kendisi ise 759 GB'tır. Bu size madencilerin ödemenizi zincire işlediğine dair kanıt sunar, ödemenin meşru olup olmadığına dair ise hiçbir şey söylemez.
Nasıl çalışır
Basitleştirilmiş ödeme doğrulaması tek bir soruyu iki kanıt parçasıyla yanıtlar.
Birincisi başlık zinciridir. Her blok başlığı tam olarak 80 bayttır ve önceki başlığın hash'ini, içindeki işlemlerin merkle kökünü, bir zaman damgasını ve madencinin aşması gereken zorluk hedefini içerir. Bir istemci yalnızca başlıkları indirir, her birinin kendinden öncekine bağlandığını ve her hash'in gerçekten belirtilen hedefin altında kaldığını kontrol eder ve sonunda elektrik cinsinden fiyatlanabilecek bir zincire sahip olur. Bunu sahtelemek ikna edici bir yalan söylemek değildir; madenciliği baştan yapmak demektir.
İkincisi merkle dalıdır. Bir bloktaki işlemler, tek bir kök kalana kadar çiftler halinde hash'lenir; bu nedenle belirli bir işlemin bir blokta olduğunu kanıtlamak için yalnızca o köke giden yol boyunca yer alan birkaç kardeş hash yeterlidir. Sayı logaritmiktir: 4.096 işlem içeren bir blok için 12 hash gerekir, bu da 384 bayttır ve bloğu ikiye katlamak yalnızca bir hash daha ekler. İstemciniz dal boyunca yukarı doğru hash'leyerek ilerler, sonucu zaten güvendiği başlıktaki merkle köküyle karşılaştırır ve ya işlem o bloktadır ya da değildir.
İkisini birleştirdiğinizde basitleştirilmiş ödeme doğrulamasının ortaya koyduğu iddiayı elde edersiniz: bu işlem bir blok tarafından zincire işlenmiştir ve o zamandan beri üzerine ölçülebilir miktarda iş yığılmıştır.
Sıra boşluklarda, çünkü işe yarar kısım bunlardır. Dahil edilme geçerlilik değildir. Yöntem size harcanan bitcoinlerin var olduğunu, imzaların geçerli olduğunu, bloğun madencinin hakkı olan sübvansiyonu doğru verdiğini ya da aynı bitcoinlerin farklı bir dalda harcanmadığını söyleyemez. Olumsuz bir şeyi de kanıtlayamaz: bir ödemeyi yalnızca atlayan bir sunucu arkasında hiçbir kanıt bırakmaz. Satoshi bu uyarıyı doğrudan whitepaper'a yazdı: teknik, ağ dürüst düğümlerin kontrolünde olduğu sürece güvenilirdir ve sık ödeme alan işletmeler yine de kendi düğümlerini çalıştırmak isteyecektir.
Bitcoin satın alırken bu neden önemli
Bir telefon cüzdanındaki yeşil onay işareti genellikle hiç de doğrulama değildir.
İnsanların ilk borsa alımından sonra kurduğu cüzdanların çoğu hiçbir zaman bir başlık zinciri oluşturmaz. Bir şirketin sunucusuna ne kadar bitcoininiz olduğunu sorar, yanıtı yazdırır ve onu onaylanmış olarak etiketler. Bu, whitepaper'daki yöntemden daha zayıf bir güvencedir ve whitepaper'daki yöntem de bir düğümden daha zayıftır. Günlük küçük bakiyeler için bu güven zinciri yeterlidir ve aksini iddia etmek kimseye yardımcı olmaz. Tutarın canınızı yakacağı noktada yeterli olmaktan çıkar.
Pratik soru, kime ve ne kadar süre güvendiğinizdir. Borsa incelemelerimizde her platformun para çekme işlemini serbest bırakmadan önce ne istediği listelenir ve bu onay sayılarının her biri ilgili borsanın kendi düğümünden gelen bir rapordur. Bitcoinler geldiğinde, size onları gösteren cüzdan yine başka birinin düğümünden rapor veriyordur. İki tarafın da yalan söylüyor olması olası değildir. İkisi de yanılabilir, çevrimdışı olabilir ya da kendilerine verilen bir zinciri sunuyor olabilir ve bu olduğunda hiçbiri size haber vermez.
Bir gizlilik boyutu da vardır. Bloom filtresi istemcileri üzerine 2014 yılında yapılan çalışma, bir cüzdanın hangi adreslerle ilgilendiğini saklaması gereken filtrelerin bu adreslerin çoğunu ele verdiğini ortaya koydu. Bu yüzden Bitcoin Core Kasım 2019'da 0.19.0 sürümünde özelliği varsayılan olarak kapalı hale getirdi ve daha yeni hafif cüzdanlar istek yüklemek yerine kompakt filtreleri indirir.
Basitleştirilmiş ödeme doğrulamasının Eylül 2018'de kaçıracağı şey
CVE-2018-17144, Bitcoin tarihinde dahil edilme ile geçerlilik arasındaki farkın en net örneğidir.
Bitcoin Core 0.14.0 sürümünde eklenen bir iyileştirme, gereksiz sanılan bir kontrolü atlıyordu; bunun sonucunda etkilenen sürümler, aynı girdiyi iki kez harcayan bir işlem içeren bloğu kısmen işliyordu. Bir şekilde ele alındığında düğüm çöküyordu. Başka bir şekilde ele alındığında ise bir madencinin yoktan Bitcoin yaratmasına izin veriyordu. Hata 17 Eylül 2018 tarihinde bildirildi ve ertesi gün Bitcoin Core 0.16.3 sürümünde düzeltildi. Kimse bunu canlı ağda kullanmadı.
Birinin kullandığını düşünün. Bir madenci, başlığında tamamen gerçek bir iş kanıtı ve kusursuz doğru bir merkle ağacı taşıyan, arzı şişiren bir blok üretir. Güncellenmiş bir tam düğüm bloğu ayrıştırır, yinelenen girdiyi bulur, reddeder ve gönderen eş düğümün bağlantısını keser. Basitleştirilmiş ödeme doğrulaması yapan bir istemci başlığı kontrol eder, dalı kontrol eder ve içindeki ödemeyi onaylanmış olarak bildirir, çünkü elindeki her kanıt parçası geçerlidir. Harcanan girdiye erişimi yoktur, bu yüzden soru hiç ortaya çıkmaz.
Bütün ödünleşim budur. Basitleştirilmiş ödeme doğrulaması kurallarını madencilik yapan kimseden devralır. Bir düğüm ise devralmaz.
Basitleştirilmiş ödeme doğrulaması vs Neutrino
Basitleştirilmiş ödeme doğrulaması ve Neutrino, ikisi de bir cüzdanın tam zincir olmadan çalışmasını sağlar ve filtrelemeyi zıt yönlere çevirir. BIP37 altındaki klasik yaklaşım ilgi alanlarınızı bir eş düğüme gönderir: siz bir filtre yüklersiniz, eş düğüm sizin için arar ve kabaca hangi adreslere sahip olduğunuzu öğrenir. Çoğu mobil Lightning cüzdanının kullandığı, BIP157 ve BIP158 uygulaması olan Neutrino ise düğümün herkes için blok başına bir kompakt filtre yayımlamasını sağlar; cüzdanınız filtreleri indirir, bunları gizli biçimde test eder ve yalnızca eşleşen blokları talep eder. Sonrasında yaptığınız doğrulama aynı merkle ve başlık aritmetiğidir. Değişen şey, karşı taraftaki kimsenin ne aradığınızı öğrenmemesidir.