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
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.
No comments:
Post a Comment