başlayacaklar yada hızlı bir giriş yapacaklar için bazı teknik kısımları ve bazı noktaları yeniden açıklayalım.
1. Bitcoin adlı kriptopara'da tek anahtarlı (kısaca 1 ile başlayan adreslerde) deniyoruz. Neden derseniz yanıt olarak ilk çıktığı içinde denilebilir, en pahalı o olduğu içinde. Zaten mantığı birinde kavrarsanız, çoğunda benzer şekilde.
2. Bir ile başlayan adresler 1-115792089237316195423570985008687907852837564279074904382605163141518161494336 (dahil) sayi aralığında onluk tabanda bir değerden üretilmiş anahtarlardır. 10 üzeri 79 uzunluğudadır. Evrendeki tüm atom sayısından daha büyükte denilebilir. Heksadesimal(16 tabanda) gösterimi 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0001 - FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFE BAAE DCE6 AF48 A03B BFD2 5E8C D036 4140 şeklindedir. 1 ile başlayan tüm adresler bu aralıktan üretilir.
3. Bitcoin 1 ile başlayan adreslerde Secp256k1 kullanmakta. Daha detaylı araştırmak isterseniz. ECDSA ve secp256k1 anahtar kelimeler.
4. İkinci şıkta oluşturulan adreslerde iki farklı şekilde üretilebilmekte. public ve public_compressed şeklinde geçmekte. Public adreslerin WİF (Wallet import format) 5 ile başlarken compressed adresler K yada L ile başlamakta.Yani ikinci şıktaki oluşturulabilecek numara havuzu 2 kat artmakta.
5. Adres nasıl oluşturuluyor aşamaları neler diyecek olursanız.
http://gobittest.appspot.com/ adresinden bakabilirsiniz. 'Bitcoin Address Tests' sayfasında ikinci aşamada üretilen anahtar'ın public kısmına dönüştürülmesi (bakınız 3.şık) şeklinde başlıyor. gelen anahtarı ikiye bölerek x ve y şeklinde formüle dahil ediliyor. 3.şıkta zaten karşınıza çıkar kafa karıştırmayalım. Aklınıza public key'den ilk anahtarı üretmek varsa 3.şıkka baktığınızda asal sayılar ile mod içeren formül göreceksiniz. Oradanda Private key (ilk anahtar) 'e ulaşmayı deneyebilirsiniz. Yada kullanılmış bir adresi girerek TERS işleme sokarak kaçıncı aşamaya kadar gelebileceğinizi görebilirsiniz.
6. Wif yani Wallet import format denilen 64 uzunluğunda heksadesimal değeri tutmak yerine daha okunabilir bir format geliştirilmiş.
https://en.bitcoin.it/wiki/Wallet_import_format adresinden oluşturulma aşamalarına bakabilirsiniz. Bitcoin sisteminde adresler Base58 sisteminde kodlanıyor. onluk taban 0-9, onaltılık yani heksadesimal 0-9-a-b-c-d-e-f, base58 yani taban58 diyelim 123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz değerlerini içermekte. dikkat ettiyseniz 'sıfır' ve büyük O yok. söylerken karışıklık olmaması içinde diyebilirsiniz.
7. Adres oluşturmak için github üzerinde javascript,python,java,c#,php,go... onlarca kütüphane bulunmakta. Bazıları rastgele(random) yada istediğiniz anahtara göre üretebiliyorlar. İsterseniz aynı işlemleri sizde sırayla uygulayarak kendi kütüphanenizi yazabilirsiniz.
8. Adres oluşturmak için kullanılan yöntemlerden biride 'mnemonic keyword' denilen akılda kalıcı kelimelerden (genelde ingilizce kullanılmakta,sözlük 2048 kelime ) oluşuyor. Uzunlukları 15-18-21-24-25-25-32 şeklinde değişmekte.
https://iancoleman.io/bip39/? adresinden bakabilirsiniz. buna da bip39 diyorlar.
9. üstteki maddeye ilave olarak ledger vs. donanımsal cüzdanlarda size kelime verir. bunları girdiğinizde size bir anahtar üretir. Bunu işleme tabi tutarak tek anahtardan binlerce cüzdan adresi oluşturmanızı 'Derivation Path' sağlar. üstteki maddedeki linke bakarsanız daha iyi anlarsınız.
10. Sekizinci maddedeki anahtarı korumak için harici bir şifre kullanabilirsiniz. Bunada bip38 diyorlar.
https://www.bitaddress.org adresinden oluşturup ne olduğuna bakabilirsiniz. Bazı cüzdan yazılımları bunu destekliyor.
11. bip38,bip39,bip44,bip49 var. bunları tek tek açıklamak yerine araştırarak bulabilirsiniz. Onlara değinmeyeceğim yoksa sayfalarca tutar. nette hepsi var. okuyun.
12. siz bu yola ilk giren kişi değilsiniz. son girende olmayacaksınız. Ryan Castellucci'nin (rya.nc) blogunu okuyun. orada denemelerde anlatılıyor. Sunumlar, videolar var. bu konuya merak saldıysanız kesinlikle denk geleceksiniz. Google'da site:rya.nc ext:txt şeklinde aratırsanız. ingilizce kelimelerden oluşturulmuş 17 bin adet adrese denk geleceksiniz. Bu adreslerin çoğu 2014-2015 yıllarında deneme amaçlı olarak kullanılmış.
13. Bu konuda
https://bitcointalksearch.org/topic/this-message-was-too-old-and-has-been-purged-421842 sayfalarca mesajlaşmadan sonra gönderilerin çoğu silinmiş. Ortak sonuç, bir algoritma yardımı ile ortak 768 nokta elde edilmesi ve verilen adresin public key'inin o noktalardan birine yakın olduğunda cüzdan anahtarının hemen oluşturulabildiği.
Buraya kadar okuduyup sıkılmadan araştırma yaptıysanız. Forumun Türkçe/İngilizce/Rusça/Fransızca/İtalyanca kısımlarında benzer şekilde denemeler yapıldığınada denk gelmiş olmalısınız. Türkçe kısmında etik olaylarından dolayı iptal olanda var. Belki forumda birileri hala arıyordur. Şimdi arama/tarama/oluşturma yöntemlerini düşünelim.
1. Sıralı arama: ilk anahtardan son anahtara kadar adresleri oluşturup hepsini saklamak
-> bu ilk akla gelen yöntem, ancak her adresin 36 uzunluğunda olduğunu sayarsak (bazı adreslerde 34 oluyor) enter yani \r yada \r\n karakterleri olacak 50 milyon adres yaklaşık 1.7 gb tutmakta. Toplam 10^79 olduğuna göre hepsini saklamamız mümkün olmayacak. Hepsini saklayacak yerimiz bile olsa bunu tutabilecek ve anında sorgulayabilecek bir yapı yok (dağıtık vt ve yapılarla bile oldukça zor, şimdiden yazalım DNA'ya veri kaydetme yeni oldu, 20-30 sene sonra belki mümkün olabilir,zaten 10-15 yıla kalmaz adres formatı değişecek, teknolojinin eksi getirelerinden bunu yapmamızdaki amaçta bu.).
2. Kısmi arama: ilk maddeye göre parçalayarak arama -> daha kabul edilebilir. örneğin 1 milyar parçalara bölerek. ancak saklama kısmında hala problem olacaktır. adres oluşturup kullanılan, içi dolu olanlar taranabilir. Kontrol edildikten sonra silinebilir. Her aralık sabit değerde oluşturulursa, başlangıç heksi saklanarak tekrar oluşturması sağlanabilir. Torrent tarzı dağıtık yapılar birbiriyle uyumlu çalışıp, aynı aralığı taramazlar. Bende burada içinde satoshi olan 1 adet cüzdan geldi. (merak eden için çekmedim hala duruyor içinde.)
3. Kelimeler, cümleler, şifreler (brute force) araması -> sha256'ya göre hashleri alınıp taratılabilir. Saklamak yine bir problem, ancak adres oluşturup kullanılan, içi dolu olanlar taranabilir. bu bip39'a benziyor. ama aynısı değil.
4. Rastgele değer üretip bakmak -> havuzun büyüklüğü düşünüldüğünde gerçekten çok çok çok çok şanslı olmanız lazım. saklamak yine bir problem, ancak adres oluşturup kullanılan, içi dolu olanlar taranabilir. oluşturulan değerin hex'ini saklamak tekrar oluşturmamaya iyi ancak bunuda saklayıp kontrol etmek bir problem olacaktır.
5. kullanılmış adreslerin yoğunluklarına göre aralıkları çıkarmak -> şu an imkansız gibi oldukça mantıksız çünkü aralıklar belirli şekilde tekrar etmiyor. ilk anahtar olan 1EHNa6Q4Jz2uvNExL497mE43ikXhwF6kZm, 1E sonraki 5,37,48,56,76,... anahtarlarda var. 3 hanelide dahada azalıyor. 4. hanelide ise aralık oldukça büyüyor.
6. Vanitygen adlı yazılımı kullanrak belirli bir desen (pattern) kalıp ne derseniz, başlangıç kalıbını veriyorsunuz size onun ile başlayan adresleri oluşturmaya çalışıyor. Harf uzunluğunu ne kadar artırırsanız, bulma ihtimali o kadar zorlaşıyor.
Şimdi daha farklı düşünüp tekrar adres oluşturmaya dönelim. 64 haneli heksadesimal bir değer var. bunu formülle Public ECDSA Key'e dönüştürüyor. buradan çıkan değer 130 haneli heks. çıkan bu değeri sha256'dan özetini alarak 64 haneye düşürüyor. sonra sha256'sı alınmış değer ripemd160'a özetliyor.
yani 2^255'den 2^160'a düşüyor. forumda Large Bitcoin Collider (Collision Finders Pool) şeklinde aratırsanız bunun üzerinden tarama yapanlara denk gelebilirsiniz.
Yukarıdaki şu an için ALTI yöntemide denemiş biri olarak özeti şu
ilkinde başlarda kullanılmışlara denk geliyorsunuz. Sonrası boş. 2^33'e kadar geldim
İkincide denk geliyor ama gerçekten şanslı olmanız lazım. bende burada denk geldi.
Üçüncüde kesinlikle kullanılmışa denk geliyorsunuz. ama içi boş.
dördüncüde şu ana kadar denk gelmedi
(160 milyon adette).
beşincide bakıyorum daha denk gelen olmadı.
Altıncı yöntemdede 1 milyon adet oluşturdum denk gelmedi. (2-3-4-5-6-7 haneli)
Diğer noktalardan biride şu. Tüm adresleri oluşturup saklamanız gerekmiyor. Saklayabilseniz zaten her kapının anahtarı sizde olurdu. Zaten 1'den başlayıp, heksadesimal 10000... (64 haneli) gelene kadar 2^252-1 adet adres oluşturacağınıza direk 2^252'den maks'a random sallayın
işlem gücü olayına değinmedim. Aşırı değişkenlik gösterdiği için. dağıtık yapıda çokta önemi kalmıyor. AWS gibi sistemleri kiralayıp 1 senede yapacağınızı 1 günde yapabilirsiniz.
ltc'de btc ile aynı sistem.
https://github.com/zamgo/PHPCoinAddress adresinden "Prefix List:" kısmında denk geldim. eth CSPRNG üzerinden random değer üretiyor. sha3 bilmem neye sokup adresin özetini alıyor. istediğiniz koine bakarsanız benzer yöntemler vardır. Diğer taraftan birbirine kriptopara gönderirken olan işlemler ile kafanızı karıştırmak istemedim. araştırdığınızda onada denk geleceğinizi göreceksiniz.
bir mum bir mumu yakmakla ışığından bişey kaybetmez... elimden geldiğince oltayıda balığıda göstererek anlatmaya çalıştım.
mesajı alıntılamazsanız sevinirim. (silmeyeceğim. güncelleme geldiğinde sayfa boşuna uzamasın) kaynak gösterdiğiniz müddetçe istediğiniz gibi kullanabilirsiniz.
bayram şekeri tadında bir paylaşım oldu. Bayramınız mübarek olsun müminler.
- DÜZENLEME 16.06.2018 - deneme kısmında dördüncüde dediğimi ikincide yaptım. karışmış arada.
- DÜZENLEME 20.08.2018 - 10^78 demişim 79 olacak tekrar okurken farkettim.