Come si riconosce la firma digitale in Bitcoin?

Image for post
Image for post
https://youtu.be/kussfH_U6Ow

Nel video precedente, abbiamo analizzato con la pratica come la transazione viene P2PK viene validata.

Ci si potrebbe domandare: Come riesce il software a sapere cosa inserire all’interno dello stack?

Come spiegato nei precedenti video, Bitcoin utilizza script, linguaggio di programmazione necessario per validare lo stack. Prima di analizzare come lo stack riesce a capire cosa inserire al suo interno, è necessario spiegare alcune informazioni di base.

Il bit è l’acronimo di binary digit, ed è un’unità di misura informatica.

0 spento
1 acceso

Il byte è formato da 8 bit (2⁸).

Il nibble invece è formato da 4 bit.

Analizziamo anche i sistemi di numerazione.

Base2, sistema di numerazione binaria, base della potenza è due. Simboli a disposizione sono 0 e 1.

Ed ecco come il simbolo 10 corrisponde a 2 in base10.

Base10, sistema di numerazione decimale, ha come base della potenza è 10, ed è quello che utilizziamo noi umani.
I simboli a disposizione sono da 0–9.
Prendendo come riferimento l’esempio precedente, vediamo come è interpretiamo il numero 5201.

Piu semplicemente, ogni elemento viene moltiplicata per la sua posizione, per questo si chiama anche sistema di numerazione posizionale.

Image for post
Image for post

Ogni unità viene moltiplicata per la sua posizione, ottenendo così:

Il sistema esadecimale, o base16 o hex, è formato da 16 simboli

Ogni carattere esadecimale corrisponde a un nibble, per questo motivo è possibile rappresentare 1 byte con due caratteri esadecimali.

Ad esempio il numero 52 corrisponde a 0x34

Image for post
Image for post
il numero 52 corrisponde a 34 in esadecimale.

Il numero 52 in base due è rappresentato da 0011 0100, in totale 1 byte, 8 bit.
Dato che un carattere esadecimale può essere rappresentato da un nibble, possiamo dividerlo a “meta”, 4 bit e 4 bit

Potete utilizzare il comando obase, per ottenere numeri in esadecimale

Arriviamo quindi al momento di analizzare la transazione dell’articolo precedente:

Analizziamo il primo dello scriptSig, ovvero l’esadecimale 47.

47 non è mappato su nessuna Operation code, ma ci indica quanti elementi prendere successivamente. Ricorda che sono caratteri esadecimali, quindi per sapere il numero in base10 dobbiamo convertire 47 in base10.

quindi:

Sappiamo che un byte può essere rappresentato da 2 caratteri esadecimali, quindi:

Quindi saranno 144 i caratteri esadecimali da prendere in considerazione.
Ed ecco come 47 ci indicati inserire 144 esadecimali nello stack (quelli in italico)

I quali rappresentano la firma digitale.
Successivamente si inserisce lo scriptPubKey, della UTXO (0437cd7f8525ceed2324359c2d0ba26006d92d856a9c20fa0241106ee5a597c9) di riferimento.
Lo scriptPubKey viene interpretato nel medesimo modo.

Il primo byte che troviamo è 41, il quale ricade nel range delle costanti di Bitcoin script e ci indica quanti caratteri esadecimali prendere successivamente.

41 in base10 corrisponde a 65. Sappiamo che 1 byte può essere rappresentato da 2 caratteri esadecimale:

Dobbiamo inserire 130 caratteri esadecimali all’interno dello stack, i quali corrispondono alla chiave pubblica NON compressa.

Il byte successivo è rappresentato da ac.
Attenzione l’esadecimale 0xac è tappato sull’operato code OP_CHECKSIG.

Quindi viene inserito nello stack.

Successivamente, come abbiamo affrontato nel precedente video, lo stack viene validato.

Image for post
Image for post
Estratto dell’articolo https://bitcoin-in-action.medium.com/transazione-p2pk-bitcoin-e9bc4dc7870d
Image for post
Image for post
I nostri libri disponibili su corsobitcoin.com

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store