4-mavzu: Bitcoin protokoli


Download 0.54 Mb.
Pdf ko'rish
bet5/6
Sana09.01.2022
Hajmi0.54 Mb.
#268504
1   2   3   4   5   6
OP_DUP 

OP_HASH160 

dab3cccc50d7ff2d1d2926ec85ca186e61aef105 

OP_EQUALVERIFY 

OP_CHECKSIG 

va 


76a914dab3cccc50d7ff2d1d2926ec85ca186e61aef105s88 hollarda hech qanday farq yo’q. Faqat 

2-holda maxsus saqlash kodirovka ishlatilmoqda: 



0x76 = OP_DUP 

0xa9 = OP_HASH160 

0x14 = 14 bayt ma`lumot keladi 

dab3cccc50d7ff2d1d2926ec85ca186e61aef105s88ac 

... 

 

Tranzaksiyani imzolash 

Endi tranzaksiyani imzolasak bo’ladi: 

hashed_raw_tx = hashlib.sha256(hashlib.sha256(tx_to_sign).digest()).digest() 

sk = ecdsa.SigningKey.from_string(private_key.decode("hex"), curve = ecdsa.SECP256k1) 

vk = sk.verifying_key 

public_key = ('\04' + vk.to_string()).encode("hex") 

sign = sk.sign_digest(hashed_raw_tx, sigencode=ecdsa.util.sigencode_der) 

 

Tranzaksiyaning  imzosi  yaratilgandan  so'ng,  qulfni  ochish  scriptini(unlocking  script) 



haqiqiysi bilan almashtirib, tranzaksiyani yakuniy shakliga keltirish mumkin: 

sigscript 



sign 



"\01" 



struct.pack("

len(public_key.decode("hex"))) 



public_key.decode("hex") 

 

real_tx = (version + tx_in_count + tx_in["outpoint_hash"] + tx_in["outpoint_index"] + 

struct.pack("

tx_in["sequence"]  +  tx_out_count  +  tx_out["value"]  +  tx_out["pk_script_bytes"]  + 

tx_out["pk_script"] + lock_time) 

 

return real_tx 

 

Sniff & spoof 

 

Nima  uchun  tranzaksiyalarni  imzolashimizni  tushungandirsiz.  Bu  hech  kim  bizning 



xabarimizni  o'zgartira  olmasligi  va  uni  tarmoq  orqali  boshqalarga  jo'natmasligi  uchun  amalga 

oshiriladi, chunki xabar imzosi o'zgaradi va hokazo. 

E’tibor  bergan  bo’lsangiz,  biz  boshqa  uzellarga  yuboradigan  haqiqiy  tranzaksiyani 

imzolamadik, balki uning modifikasiyasini(ya’ni qulfni ochish scripti (unlocking script) o’rniga 

biz  havola  qilayotgan  boshqa  tranzaksiya  chiqishining  qulflash  scripti(locking  script)  yozilgan 



tranzaksiya varianti) imzoladik. Printsipial jihatdan, nima uchun bunday bo'lishi aniq: to'g'ri qulfni 

ochish scripti(unlocking script)ga ushbu imzo yozilsa yopiq doira hosil bo’ladi, ya’ni to'g'ri imzo 

uchun to'g'ri  unlocking script  kerak  va qulfni ochish  script(unlocking script)  uchun to'g'ri imzo 

kerak. Shu uchun Satoshi murosaga keladi va "to'g'ri" bo’lmagan imzolardan foydalanishga ruxsat 

beradi. 

Shu  sababli,  tarmoqdagi  kimdir  bizning  xabarimizni  ushlab,  qulfni  ochish  skriptini 

o'zgartirishi va o’zgartirilgan xabarni boshqa uzellarga yuborishi mumkin. Uzellarning hech biri 

buni tasdiqlay olmaydi, chunki imzo qulfni ochish skriptni(unlocking script) "himoya qilmaydi". 

Ushbu zaiflik " Transaction malleability" deb nomlanadi. 

Agar P2PKH kabi standart skriptlardan foydalanilsa, unda xavotirga hojat yo’q. Aks holda, 

ehtiyot bo'lish kerak. 

 


Download 0.54 Mb.

Do'stlaringiz bilan baham:
1   2   3   4   5   6




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling