Adım Adım Bitcoin Adresi Hesaplama

1.069

Bir para transferi işlemi nasıl ki gönderici ve alıcı hesap bilgilerini içeriyorsa, bir bitcoin işleminde de gönderici ve alıcının bitcoin adres bilgileri bulunmaktadır. Bitcoin protokolü aslında açık anahtar kriptografisi yöntemi olan elliptik eğri kriptografisi üzerine inşa edilmiştir. Bu sebeple de her şey gizli ve açık anahtar etrafında döner. Peki bitcoin adresi nereden çıktı? Bitcoin işlemlerindeki adresin rolü tam olarak nedir? Birlikte bitcoin adresinin nasıl üretildiği somut bir örnek üzerinden anlamaya çalışalım.

Açık anahtarın hesaplanması

Varsayalım ki aşağıdaki değeri gizli anahtarınız olarak belirlediniz. Burada beklenilen 256-bit uzunluğunda bir tam sayı değerinin belirlenmesidir.

Bitcoin Eğrisi

Bitcoin protokolü yukarıdaki elliptik eğriyi kullanmaktadır. Bu eğri üzerindeki başlangıç noktasının değeri protokol tanımlanırken aşağıdaki şekilde belirlenmiştir.

x0 = 55066263022277343669578718895168534326250603453777594175500187360389116729240
y0 = 32670510020758816978083085130507043184471273380659243275938904335757337482424

Bu durumda açık anahtar aşağıdaki değer olacaktır. Dikkat edilirse açık anahtar x ve y eksen değerlerini içeren bir noktadan ibarettir. Bu hesaplama için elliptik eğriler üzerinde toplama işlemi kuralından kuralından yararlanılmıştır. Bugünkü hesaplama kabiliyetimiz ile bu hesap hızlı bir işlemken geriye dönülmesi hiç de kolay değildir.

publIc key = (36422191471907241029883925342251831624200921388586025344128047678873736520530, 20277110887056303803699431755396003735040374760118964734768299847012543114150)

Artık açık anahtara sahibiz ve adresi hesaplamaya geçebiliriz. İlk olarak açık anahtarın içeriğini hexadecimal’e dönüştürmemiz gerekiyor. Python’da hex komutu bu işlemi yapmakta ancak ön ek olarak 0x’i eklemekte. Hexadecimal dönüşümü yaptıktan sonra başlangıç indeksini belirterek bu ön ekten kurtulabiliriz. Sonrasında da 04 ön ekini eklememiz gerekiyor.

Böylelikle açık anahtarımızı aşağıdaki şekilde gösterebiliyoruz.

publIc key (hex): 0450863ad64a87ae8a2fe83c1af1a8403cb53f53e486d8511dad8a04887e5b23522cd470243453a299fa9e77237716103abc11a1df38855ed6f2ee187e9c582ba6

Açık anahtarın özetinin alınması

Açık anahtar hesaplandıktan sonra bir dizi hash fonksiyonları ile özetleyeceğiz. Genel bir hash mekanizması kurulması için aşağıdaki fonksiyonları kullanabiliriz.

Açık anahtarı ilk olarak SHA-256 sonrasında da RIPEMD160 özet fonksiyonlarına sokmamız gerekiyor. Sonrasında da iki kez özetlenmiş değerin başına 00 ön ekini ekleyeceğiz.

Bu işlem aşağıdaki özet değerlerini üretecektir.

apply sha-256 to publIc key hex: 600ffe422b4e00731a59557a5cca46cc183944191006324a447bdb2d98d4b408 apply

rIpemd160 to sha-256 applIed publIc key: 010966776006953d5567439e5e39f86a0d273bee

add network bytes to rIpemd160 applIed hash – extended rIpemd160: 00010966776006953d5567439e5e39f86a0d273bee

Sağlama (Checksum)

Açık anahtar özetlendikten sonra sağlama işlemi uygulayacağız. Sağlama değerinin üretilmesi için açık anahtarın bir önceki bölümde hesaplanmış özetine iki kez SHA-256 fonksiyonunu uygulayacağız. Bu yeni özet değerin ilk 8 karakteri de bizim için sağlama değeri olacak.

Açık anahtarımız için sağlama değeri de aşağıdaki gibi olacaktır.

extract fIrst 8 characters as checksum: d61967f6

Adres

Açık anahtarın özetine bu sağlama değerini ekleyeceğiz.

Bu şekilde ham adresi üretmiş oluyoruz.

checksum appended publIc key hash: 00010966776006953d5567439e5e39f86a0d273beed61967f6

Son olarak bu ham adrese base-58 kodlamasını uygulayarak adres üretimini tamamlayacağız. Bu kodlama için GitHub’tan bulduğum mükemmel implementasyon‘u kullanacağım.

Böylelikle bitcoin adresimizin üretimi tamamlanmış oldu.

16UwLL9Risc3QfPqBUvKofHmBQ7wM

Adım Adım Bitcoin Adresinin Hesaplanması

Toparlarken..

Başlangıçta rastgele bir gizli anahtar seçtik ve kendi açık anahtarımızı hesapladık. Sonrasında açık anahtara bir takım özetleme fonksiyonları uygulayarak bitcoin adresimizi hesapladık. İlgimiz olan tüm işlemler bitcoin adresimizi içerecekken bize ait gizli anahtar ile bu işlemleri imzalayacağız. Bitcoin ağının diğer kullanıcıları da bize ait açık anahtar ile bu işlemi doğrulayacaklar.

Son olarak, bu yazıyı yazarken kullandığım kaynak kodunu GitHub‘da paylaştım.

 

 

 

 

 

Yorum yaz

Email adresiniz yayınlanmayacaktır.