Bitcoin Adreslerinde P2PK (Pay To Public Key) ile P2PKH (Pay To PubKey Hash) Farkı Nedir?
Öncelikle Nedir bu Pay To Pubkey (p2pk) gelin kısaca inceleyelim;
P2PK (Pay To Pubkey), bir çıkışı genel bir anahtara kilitleyen bir script modeli olup daha yaygın olarak kullanılan P2PKH kilitleme komut dosyasının daha basit bir sürümüdür.
Bir P2PK kilidi yalnızca bir genel anahtar ve bir CHECKSIG işlem kodu içerir:
scriptPubKey
04ae1a62fe09c5f51b13905f07f06b99a2f7159b2225f374cd378d71302fa28414e7aab37397f554a7df5f142c21c1b7303b8a0626f1baded5c72a704f7e6cd84c
OP_CHECKSIG
Kilidi açmak için geçerli bir imza sağlamanız yeterlidir:
scriptSig
30440220576497b7e6f9b553c0aba0d8929432550e092db9c130aae37b84b545e7f4a36c022066cb982ed80608372c139d7bb9af335423d5280350fe3e06bd510e695480914f01
Komut dosyası çalıştığında, CHECKSIG işlem kodu imzayı ortak anahtarla karşılaştırır ve geçerliyse yığına 1'i iter.
P2PK scriptlerini nerede bulabilirsiniz?
Bitcoin’leri birinin açık anahtarına kilitlemek için en basit komut dosyası olmasına rağmen, P2PK, benzer (ancak daha karmaşık) P2PKH komut dosyası kadar kullanılmaz.
P2PK’yi en çok blokzincirindeki önceki bloklarda coinbase işlemlerinde bulacaksınız. Bunun nedeni, orijinal Bitcoin Core madencisinin bir aday blok oluştururken blok ödülü için P2PK kullanmasıdır:
P2PK kullanan işlemlere bazı örnekler:
4a5e1e4baab89f3a32518a88c31bc87f618f76673e2cc77ab2127b7afdeda33b — Genesis bloğunda coinbase işlemi. (3 Ocak 2009)
f4184fc596403b9d638783cf57adfe4c75c605f6356fbc91338530e9831e9e16 — Satoshi’den Hal Finney’e yapılan ilk bitcoin işlemi aslında P2PK kullandı (Blok 170, 12 Ocak 2009)
Satoshi, Bitcoin Core madencisinde neden P2PK kullandı?
Bu konuda kendisine sormak gerek :)
P2PKH, genel anahtarınızı (daha uzun olan) dolaşmak yerine adresleri kullanmanıza izin verdiği için, insanların işlem yapmaları için uygun bir yol olarak kullanıldı. Bununla birlikte, madencinin adreslerin rahatlığına ihtiyacı yoktur, bu nedenle P2PK daha basit bir seçim için yapılmıştır.
Neden P2PK’yi daha sık kullanmıyoruz?
Satoshi, P2PKH’yi birbirimize tam genel anahtarlar yerine daha kısa adresler gönderebilmemiz için tasarladığı için :)
Bu adreslerle ilgili sorunlardan biri, adreslerin yanlış yazılmasını algılayacak bir mekanizmanın olmamasıdır (örneğin, kredi kartı numaralarında kullanılan son bir sağlama toplamı rakamında olduğu gibi)
Ek bir sorun, bu adreslerin çok uzun olmasıdır, bu da daha büyük bir işlem dosyası ve dolayısıyla daha uzun işlem süresi ile sonuçlanır. Kuantum bilgisayardan gelen tehditle ilgili olarak, genel anahtar doğrudan adresten elde edilebilir. Bitcoin’deki tüm işlemler halka açık olduğundan, herkes genel anahtarı herhangi bir p2pk adresinden edinebilir. Shor’un algoritmasını çalıştıran bir kuantum bilgisayar daha sonra bu adresten özel anahtarı türetmek için kullanılabilir. Bu da, kuantum bilgisayarı olan bir rakibin adresin sahip olduğu paraları harcamasına izin verir.
İkinci tür işlemde, alıcının adresi, genel anahtarın bir karmasından oluşur. Karma tek yönlü bir şifreleme işlevi olduğundan, genel anahtar doğrudan adres tarafından gösterilmez. Bunun ilk ve en popüler uygulaması ‘genel anahtar özeti için ödeme’ (pay to public key hash)(p2pkh) olarak adlandırılır ve yukarıda açıklanan iki sorunu (sağlama toplamı ve adres uzunluğu) çözmek için tasarlanmıştır.
Nedir bu Pay To Pubkey Hash (p2pkh) gelin kısaca inceleyelim;
Bu komut dosyası kalıbı, birisine bitcoin “göndermek” için kullanılır. Bir çıkışı birinin genel anahtarına kilitlemek için kullanılan en yaygın komut dosyasıdır.
P2PK’ye benzer, ancak kilit bunun yerine bir genel anahtarın karmasını içerir (genel anahtarın kendisini değil).
P2PKH komut dosyası kalıbı, aşağıdaki işlem kodlarıyla çevrili, karma bir ortak anahtar içerir:
scriptPubKey
OP_DUP OP_HASH160 12ab8dc588ca9d5787dde7eb29569da63c3a238c OP_EQUALVERIFY OP_CHECKSIG
Bu komut dosyasını çözmek için, yukarıdaki hashing uygulanmış ortak anahtarın sahibinin orijinal ortak anahtarı bunun için geçerli bir imza ile birlikte sağlaması gerekir:
scriptSig
304502203f004eeed0cef2715643e2f25a27a28f3c578e94c7f0f6a4df104e7d163f7f8f022100b8b248c1cfd8f77a0365107a9511d759b7544d979dd152a955c867afac0ef78601
044d05240cfbd8a2786eda9dadd520c1609b8593ff8641018d57703d02ba687cf2f187f0cee2221c3afb1b5ff7888caced2423916b61444666ca1216f26181398c
Kısacası, bu komut dosyası çalıştığında:
Orijinal genel anahtar DUPlicated ve ardından HASH160'tır.
Bu karma değer, EQUALVERIFY olduğundan emin olmak için scriptPubKey’deki özet hale getirilmiş genel anahtarla karşılaştırılır.
Eğer eşleşirse, script devam eder ve CHECKSIG imzayı genel anahtara göre kontrol eder (tıpkı bir P2PK script gibi).
P2PKH scriptlerini nerede bulabilirsiniz?
P2PKH, birine bitcoin “göndermek” istediğinizde cüzdanlar tarafından kullanılan varsayılan komut dosyasıdır, böylece onu blok zincirindeki çoğu blokta bulabilirsiniz.
P2PKH kullanan bazı ilginç işlemler şunlardır:
6f7cf9580f1c2dfb3c4d5d043cdbb128c640e3f20161245aa7372e9666168516 — İlk P2PKH İşlemi (16 Ocak 2009)
a1075db55d416d3ca199f55b6084e2115b9345e16c5cf302fc80e9d5fbf5d48d — Pizza İşlemi (10.000 BTC)
P2PK, bitcoinleri genel bir anahtara kilitlemek için iyi bir iş çıkarıyorsa, neden daha karmaşık P2PKH scripte sahibiz?
P2PKH’yi neden kullanmaya başladığımızı yalnızca Satoshi biliyor, ancak nedeni muhtemelen şuna benzer;
Satoshi, insanların açık anahtarlarını birbirleriyle paylaşabilmeleri için daha kolay bir yol istedi ve genel anahtarlar yapabileceğinizi biliyordu:
- Bir sağlama toplamı ekleyerek daha güvenli olacağını(hataları algılamak için)
- Genel anahtarı base58'e dönüştürerek daha kısa olacağını
Ancak sonuç yine de oldukça büyüktü:
Satoshi muhtemelen o sırada sıkıştırılmış genel anahtarların farkında değildi. Bu, genel anahtarların (ve P2PK kilitleme komut dosyasının) kullanılmasının çok uygun olmadığı anlamına geliyordu.
Bu nedenle, daha da kısa bir sonuç elde etmek için bir çözüm, önce genel anahtara hashing uygulamaktır:
Hash işlevi, herhangi bir şeyi kısaltmanın iyi bir yoludur. Hash160, 40 karakter uzunluğunda 160 bitlik bir sonuç üretir.
Yani orada, başkalarıyla kolayca paylaşabileceğimiz genel anahtarımızın (biz buna adres diyoruz) çok daha kısa bir versiyonuna sahibiz. Daha sonra herhangi bir cüzdan yazılımı bu adresi alıp base58'den kodunu çözerek genel anahtar karmasını elde edebilir, bu daha sonra bir kilitleme komut dosyası içinde ayarlanabilir.
Şimdi, bu işi yapmak için yapmamız gereken tek şey, kilitleme mekanizmasını değiştirmektir, böylece bir çıktıyı bir genel anahtarın karmasına kilitleriz. Ardından, kilidini açmak için geldiğimiz orijinal genel anahtarı sağlıyoruz ve bunun özeti, normal olarak imza kontrolüne devam etmeden önce kontrol edilir:
Bu, orijinal genel anahtarın karmasının kilitlendiği anahtarla aynı olmasını sağlayan fazladan bir kontroldür.
Aynı şekilde P2PK’yi çalıştırır sadece hashing uygulandığında genel anahtarın önce scriptPubKey’de bulunanlarla eşleşip eşleşmediğini kontrol eder.
Programlama açısından biraz daha karmaşıktır, ancak bitcoin göndermek ve almak için daha kısa ve daha uygun adreslerin kullanılmasına izin verir.
Satoshi nihayetinde Bitcoin için kullanılabilirliği düşünüyordu ve bu yüzden P2PKH’ye sahibiz.
Kaynak; learnmebitcoin
Devrim Danyal İrtibat & Sosyal Ağlar 📱
Web: http://www.devrimdanyalakademi.com
Kurumsal Ajans: http://www.miradorspeakeragency.com/konusmaci/devrim-danyal
Medium: http://medium.com/@devrimdanyal
Twitter: http://twitter.com/devrimdanyal
LinkedIn: http://linkedin.com/in/devrimdanyal
YouTube: https://www.youtube.com/channel/UCQyZ0OKFXCKMHK1nDXKaX6w
Instagram : https://www.instagram.com/devrimdanyal
Podcasts : https://open.spotify.com/show/6Im2GwBsAXZgysw2bIagXr