Sunday, October 18, 2015

Striktni DER potpisi (BIP66)


U protokolu Bitcoin digitalni se potpisi enkodiraju u DER formatu. DER (distinguished encoding rules) je potskup BER formata (basic encoding rules) koji služi za enkodiranje podatkovnih struktura. DER format koristi se za jednoznačno enkodiranje, na primjer u kriptografskim protokolima.

Za validaciju potpisa transakcija u protokolu Bitcoin koristila se biblioteka OpenSSL. Budući da je ta biblioteka dopuštala određena odstupanja od DER formata, propisan je striktni DER format za enkodiranje potpisa. Taj format ne dopušta odstupanja te potpis koji nije u striktnom DER formatu nije validan.

Striktni DER format


Striktni DER format izgleda ovako:

0x30 [ukupna-duljina] 0x02 [R-duljina] [R-vrijednost] 0x02 [S-duljina] [S-vrijednost][tip potpisa]
 
  • Svaki DER potpis počinje bajtom 0x30.
  • Ukupna-duljina je duljina u bajtovima svega što slijedi, ne računajući bajt za tip potpisa.
  • 0x02 je bajt separatora.
  • R-duljina je bajt koji predstavlja duljina vrijednosti R u bajtovima.
  • R je vrijednost proizvoljne duljine enkodirana u big-endian formatu. Predstavlja r vrijednost u algoritmu ECDSA. Vrijednost ne može počinjati bajtom 0x00, osim ako bajt koji slijedi nije 0x80 ili veći. Ako je to slučaj, početni bajt mora biti 0x00.
  • S-duljina je bajt koji predstavlja duljina vrijednosti S u bajtovima.
  • S je vrijednost proizvoljne duljine enkodirana u big-endian formatu. Predstavlja s vrijednost u algoritmu ECDSA. Vrijednost ne može počinjati bajtom 0x00, osim ako bajt koji slijedi nije 0x80 ili veći. Ako je to slučaj, početni bajt mora biti 0x00.
  • Tip potpisa je bajt koji označuje vrstu potpisa. Dozvoljene su mu vrijednosti 0x01, 0x02, 0x03, 0x81, 0x82 te 0x83.
Ukupna duljina potpisa je najviše 72 bajta. Svi blokovi čiji rudari prepoznaju BIP66 imaju verziju 3.

No comments:

Post a Comment