Python ile Adım Adım Bitcoin Adresi Hesaplama

0 46,880

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? Bu yazıda python ile adım adım bitcoin adresi hesaplama konusuna değineceğiz.

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 =

5506626302227734366957871889516

8534326250603453777594175500187

360389116729240

y0 =

326705100207588169780830851

305070431844712733806592432

75938904335757337482424

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 = (

3642219147190724102988392534

22518316242009213885860253441

28047678873736520530,

 

202771108870563038036994317

553960037350403747601189647

34768299847012543114150

)

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):

0450863ad64a87ae8a2fe83c1af1a8403cb53f53e486d8511

dad8a04887e5b23522cd470243453a299fa9e77237716103

abc11a1df38855ed6f2ee187e9c582ba6

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:

600ffe422b4e00731a59557a5cca46cc1

83944191006324a447bdb2d98d4b408

 

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:

00010966776006953d5567439

e5e39f86a0d273beed61967f6

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.

Bu yazı “A Step by Step Bitcoin Address Example” yazısından Türkçe’ye çevrilmiştir.

Email adresiniz yayınlanmayacaktır.