Gördüğüm kadarıyla projeyi ilk başlatan ve kullanılmış adresleri sonradan üretilen adreslerle eşleştirme (ve 19 eşleşme yakalandığı) iddiası ile yola çıkan ekip projeyi ya bıraktı ya da eskisi kadar bilgi paylaşımında bulunmuyorlar, bu konuya kafayı takmış birisi olarak ben de tam tersi bir iddia ile asla daha önce en az bir kez işlem görmüş bir adresin tekrar rastgele üretilemeyeceğini kanıtlama yolunda projeye dahil oldum ve bir ekip kurdum. Ekibin kuruluşu ve içeriği ile ilgili bilgileri yazayım önce.
Ekipte ben hariç 3 kişi bulunuyor bunlardan ilki ve en önemli kişi bugün Türkiye'de adı bilinen en büyük üniversitelerin birinde eğitim görevlisi ve kriptoloji konusunda bilimsel araştırmaları olan birisi, diğer ekip üyemiz bilgisiyar mühendisi ve aynı zamanda bir yazılım şirketinde senior programcı diğeri ise yine aynı şirkette Linux uzmanı olarak çalışıyor ve bu bahsettiğim şahıs ara ara üniversitelerde Linux dağıtımları ile ilgili eğitim ve sempozyumlara katılıyor.
Kurduğumuz sistemden de bahsedelim.
Öncelikle bir zen sunucu üzerinde çalışan 2 sunucumuz var bunlardan birisi bitcoin full index çalışan cüzdanımız ve diğerinde ise NoSQL çalışıyor yazılımcı arkadaşımız bitcoine RPC ile bağlanıp sıfırıncı bloktan itibaren her bir bloğu tarayarak transactionlardaki bitcoin adreslerini veritabanına kaydediyor, burada en önemli husus sadece adresi kaydetmekle kalmıyor aynı zamanda her transactionda vin ve vout verilerini alarak adreslerin bakiyelerini de sürekli olarak update ediyor sistem 24 saatten uzun süredir çalışıyor ve bu post yazılırken 254347. blok işlenmiş ve 18.090.697 adet bitcoin adresi veritabanına kaydedilmiş durumda. Bu kısım tamamen karşılaştırmaya tabi tutulacak hedef bitcoin adresi uzayını temsil ediyor.
Projenin diğer kanadında ise 2 adet daha önce mining işinde kullanılmış rigleri görevlendirdik, yazılımcı arkadaşımız random bitcoin adresi üretip bunu bloklar halinde kaydediyor her bir blok dosya boyutu 1.5 mb ve her bir dosya ortalama 22.000 rastgele üretilmiş bitcoin adresi ve private keyini içeriyor. üretilen blok dosyalar nas üzerine taşınıyor yani 2 rig aynı anda çalışarak (oclvanitygen kullanıyoruz) 24 saatte 130 milyon adres üretiyor daha sonra üretilen bu blok dosyaları nas'dan alınarak NoSQL sunucusuna gönderiliyor (nas ve NoSQL sunucusu aynı network üzerinde çalışır durumda bu sayede transfer gecikmesi gibi bir sorunumuz da bulunmuyor) 22 bin adres içeren dosya açılarak her bir adres veritabanındaki kullanılmış adreslerle karşılaştırılıyor ve eğer bir eşleşme bulunursa sistem bize bir uyarı veriyor.
Amaç :Rastgele üretilmiş bir adresin daha önce bir bitcoin client'ı üzerinden yaratılıp en az 1 işlem görmüş bir adresle eşleşmesinin günümüz teknolojisi ve varolan işlemci gücüyle imkansız olduğunun kanıtlanması. Burada içinde bakiye bulunan bir adres aranmıyor içinde hiç bitcoin olmasa bile bir adres ile eşleşme olması halinde tez başarısız olacak.
Testler :Test 1 : Öncelikle oluşturulan adreslerin private keylerinin gerçekten doğru olup olmadığını denetlemek için rastgele seçilmiş bir private key'i bitcoin wallet'a import ettik ve doğruluğunu onayladık.
Test 2 : Blockchain taramasındaki kaydedilmiş adresleri blockchain info üzerinde kontrol ettik ve şimdiye kadar taranmış ve işleme alınmış transactionlarla örtüşüp örtüşmediğini kontrol ettik ve onayladık.
Test 3 : Rastgele üretilen blok dosyalarından birinin içini bilerek ve isteyerek manipüle ettik ve içine transaction görmüş bir bitcoin adresinini sanki gerçekten random üretilmiş gibi ekledik karşılaştırma sistemini bir kez çalıştırdık ve eşleşme yakalanınca bildirim aldık.
Şu anki durumumuz mevcut toplanan kullanılmış bitcoin adresleri veri tabanımız kısmen de olsa bizi tatmin edecek boyuta olaştığı için (18 milyon adres) random üretilen adreslerle karşılaştırma işlemine başladık ve dünden bugüne 130 milyon adres karşılaştırması yaptık.
Şimdiye kadar eşleşme sayısı 0 ve hala tarama devam ediyor. Gelişmeleri buradan paylaşacağım.
İş Kanıtı :http://i63.tinypic.com/290x9ci.pngEkteki imaj blockchain taraması sonrasında kaydedilmiş son adresleri içeren görüntü, kolonlar sırasıyla id, adres ön karakter tipi (1,3 ve Bech32 için 4), adres, alınan sayısı, toplan alınan, son bakiye ve oluşturulma zamanı
İş Kanıtı 2 :http://i63.tinypic.com/32zrj0m.pngEkteki imaj blockchaindeki her bir bloğu açıp tek tek transactionları tarayarak adresleri kaydedip bakiyelerini de güncellendiğinin kanıtı
İş Kanıtı 3 :https://prnt.sc/lpb5abNAS'da tutulan rastgele adres üretilerek oluşturmuş her bir adres bloğunun dosya listesi.
Anti teze karşın yeniden tarama :Şu anda rastgele oluşturulmuş ve karşılaştırmaya dahil edilen adresler mevcut blockchainin tamamının indexlenmemiş olması nedeniyle kullanılmış bir adresle denk gelme ihtimaline karşın silinmiyor ve nas üzerinde tutuluyor, blockchain indexlemesi son blok'a ulaşıldığında bir zaman damgası üretilecek ve o ana kadar taranmaya dahil edilip olası bir eşleşmeyi kaçırmış olabileceği düşünülen adresler yeniden taranacak.
Biraz da bilim :RIPE-MD160 kullanılarak 2^160 adres üretmek mümkün bu da tam olarak 1,461,501,637,330,902,918,203,684,832,716,283,019,655,932,542,976. adres anlamına geliyor şu anda biz 24 saatte 130 milyon adres üretebiliyoruz. Mevcut hardware'i hiç değiştirmeden bu sistem çalıştığını varsaymamız durumunda tüm adres uzayını taramamız tahminen 31,228,667,464,335,532,440,249,675,912,741,090,163 yıl sürecek.
moore kanununa göre işlemci hızları her 18 ayda bir 2 katına çıktığını varsaysak ve tüm finansal gücümüzü mevcut donanımlarımızı arttırmaya kanalize etsek bile bir insan ömrünü bırak bir ırkın toplam dünya üzerinde yaşam süresince bu boyutta bir uzayın %100 taranması imkansız bu hesaplamaya göre.
Donanım :Zen Sunucu :2x Intel 12-Core Xeon E5-2650v4
Huawei RH2288V3 (12LFF)
2x 12 cores
256GB DDR4 RAM
4x480GB SSD
Rigler :4 adet GEFORCE GTX 1080 Ti Ekran kartlı * 2 PC
NAS :Raid 5 altyapısı kullanan 40 Tb kapasiteli SCSI Disk
Güncelleme : oclvanitygen parametrelerini ve diskte kaydedilme şekliyle oynayarak günlük üretilen adres sayısını 290 milyona çıkarttık bu da %100'den daha fazla bir artış sağladı.
Güncelleme [01.12.2018 15:27]Toplam karşılaştırılan adres sayısı : 332.641.600
Blockchainden çıkartılan adres sayısı : 18.417.269
Eşleşen adres : 0
Bilgi : "Blockchainden çıkartılan adres sayısı" bitcoin blockchaininde en az 1 işlem gören tüm adresleri çektiğimiz veritabanındaki kayıt sayısını gösteriyor. Random üretilen adresler bu kaydedilmiş adreslerle karşılaştırılıyor ki eşleşme olacak mı yani daha önce kullanılmış bir adresin private keyini rastgele tekrar üretebilecek miyiz diye bakıyoruz. Şimdilik blockchainin 300 bininci bloğuna bile ulaşamadık biraz yavaş ilerliyoruz adresleri çekmede bu sayıya çok takılmayın önemli olan karşılaştırılmada kullanılan adres sayısı.