LEZIONE 04 – TRANSAZIONI IN BITCOIN : CHIAVE PRIVATA, CHIAVE PUBBLICA E INDIRIZZO

Nella scorsa lezione abbiamo visto come in maniera generica avvengono le transazioni nella rete bitcoin analizzando input, output e resti.

Introduciamo ora altri nuovi elementi inerenti e fondamentali per le transazioni e per la loro sicurezza vale a dire la chiave privata e la chiave pubblica.

Chiunque conosca il vostro indirizzo di casa è in grado di spedirvi da qualunque parte del mondo della corrispondenza così come chiunque è in grado di imbucare una lettera nella vostra cassetta della posta. Tuttavia solo chi possiede la chiave della serratura è in grado di ricevere e visionare la corrispondenza. In questo esempio l’ indirizzo bitcoin rappresenta il vostro indirizzo di casa mentre la chiave privata corrisponde alla chiave della vostra cassetta della posta. Conoscendo il vostro indirizzo bitcoin chiunque da qualunque parte del mondo é in grado di spedirvi dei fondi, tuttavia solo chi è in possesso della chiave privata é in grado di spenderli.

Il processo di generazione delle chiavi e degli indirizzi parte sempre con la generazione casuale della chiave privata. Chiave privata, chiave pubblica ed indirizzo hanno sempre una corrispondenza uno a uno ovvero ad una chiave privata corrisponde una e una sola chiave pubblica a cui corrisponde uno e un solo indirizzo.

L’indirizzo è l’unica cosa che deve essere resa pubblica in modo che altre persone siano in grado di inviarci dei fondi. La chiave privata invece deve essere gelosamente tenuta segreta poiché chi controlla la vostra chiave privata ha anche il controllo dei fondi. La chiave pubblica infine permette di verificare che la transazione sia realmente generata da voi (lo vedremo più avanti nella prossima lezione quando parleremo di firma digitale).

Ma andiamo con ordine e iniziamo a capire più nello specifico come tutto si genera…..

LA CHIAVE PRIVATA


La chiave privata è la prima stringa che si produce quando viene creato un wallet ed è composta da 256 cifre casuali. Per dotarsi di una chiave privata ci sono molti metodi. Un metodo “fai da te” potrebbe essere quello di “costruirsela” da soli ad esempio lanciando per 256 volte di fila una monetina e scrivendo su un foglio in successione 0 o 1 a seconda che esca testa o croce. In questo modo si otterrebbe proprio un numero casuale intero compreso tra 0 e 2^256.

In informatica le cifre binarie, cioè 0 oppure 1, vengono generalmente chiamate bit, dall’acronimo inglese di binary digit. Un bit è l’unità di informazione più piccola trattata da un computer. Un bit quindi può trasmettere informazioni al computer stesso in due modi: essendo “spento” (0) o essendo “acceso” (1). Da qui il nome di “sistema binario“.

Esistono 2^256 diverse possibili combinazioni di chiavi private. Per cercare di avere un idea di questa grandezza possiamo pensare che tutti i granelli di sabbia su tutte le spiagge della terra sono circa 2^63…Bene la probabilità di avere due chiavi private uguali é la stessa per cui saresti in grado di trovare lo stesso granello di sabbia su una spiaggia di 4 terre messe insieme….

Di fatto è impossibile che 2 persone si costruiscano 2 chiavi private identiche. Se ciò accadesse sarebbe gravissimo perché potrebbero disporre gli uni dei bitcoin dell’altro…

La chiave privata è però una stringa molto lunga rispetto a quella in foto perché è il risultato di molti passaggi e funzioni matematiche…

RIASSUMENDO:

1 – si effettua una conversione in base esadecimale ottenendo una chiave di 64 cifre
2 – si aggiunge il prefisso 0x80 e si ottiene l’extended private key
3 – si sottopone l’extended private key a un doppio SHA256 e si prendono i primi 4 byte dell’hash risultante: questi 4 byte sono chiamati checksum
4 – si aggiunge il checksum all’extended private key e si fa una codifica in Base58 ottenendo così la WIF private key dove WIF sta per Wallet Import Format

In questa figura è schematizzato tutto il processo

L’aggiunta del prefisso 0x80 permette di ottenere alla fine una chiave privata che inizia con il 5. Nel caso in cui una chiave inizi per L o K vuol dire che oltre al prefisso 0x80 è stato aggiunto il suffisso 0x01: in tal caso questo formato di chiave viene chiamato WIF-compressed private key (cioè di tipo compresso)

L’utilità del checksum è quella di verificare la correttezza del processo.

Un piccolo focus sul sistema esadecimale che troviamo molto spesso in Bitcoin:

Il sistema numerico esadecimale è un sistema numerico posizionale in base 16, cioè che utilizza 16 simboli invece dei 10 del sistema numerico decimale tradizionale. Per l’esadecimale si usano in genere simboli da 0 a 9 per le prime dieci cifre, e poi le lettere da A a F per le successive sei cifre, per un totale di 16 simboli. Il sistema esadecimale ha il vantaggio di occupare una minore quantità di simboli (cifre) per la memorizzazione dei dati e di valori numerici molto grandi, in quanto consente di occupare una minore quantità di memoria in termini di byte.

LA CHIAVE PUBBLICA


La chiave pubblica è generata direttamente dalla chiave privata mediante crittografia basata su curve ellittiche secondo l’algoritmo ECDSA.

Questo processo crittografico è  unidirezionale, quindi la chiave privata non può essere calcolata a partire dalla chiave pubblica.

L’INDIRIZZO BITCOIN

Nel gergo crypto i termini “indirizzo bitcoin” e “chiave pubblica” vengono frequentemente confusi nel senso che molto spesso si dice o si scrive “chiave pubblica” intendendo di fatto un “indirizzo bitcoin”. Queste due stringhe (indirizzo bitcoin e chiave pubblica) vengono confusi perché li accomuna il fatto che possono essere tranquillamente divulgati e se smarriti possono essere ricalcolati…. mentre è fondamentale non confonderli mai con la chiave privata che invece deve sempre rimanere segreta e se smarrita è persa per sempre, e con lei i bitcoin ad essa associati.


Il Bitcoin address è un derivato della chiave pubblica. Anche in questo caso torna in gioco la crittografia.
Il primo passaggio è quello di prendere la chiave pubblica e sottoporla a una doppia funzione di hash: prima con lo SHA256 poi con il RIPEMD160. Quest’ultimo ha la funzione, oltre a crittografare ulteriormente la chiave pubblica, di produrre una stringa pari a 160 bit quindi meno pesante rispetto la chiave pubblica. All’hash della chiave pubblica si aggiunge il prefisso 0x00 e, come per la chiave privata, si va a calcolare il checksum.


“In informatica, la funzione crittografica di hash è una funzione non invertibile che converte una stringa di lunghezza arbitraria (non definita) in una stringa di lunghezza fissa. Gli algoritmi usati sono unidirezionali (one-way), quindi difficili da invertire”.

Il Checksum è una semplice funzione crittografica che ci permette di verificare e sapere esattamente se un indirizzo Bitcoin è stato digitato correttamente. Una semplice utility che ci permette di identificare errori di battitura o altri errori. Il tutto per evitare di perdere i nostri fondi inviando i nostri bitcoin a un indirizzo digitato male.

Il tutto si codifica in Base58 ottenendo l’indirizzo bitcoin.

Per aggiungere una protezione aggiuntiva contro battiture o errori di trascrizione, Base58Check è un sistema numerico in Base58 con codice di controllo degli errori incorporato. Non troviamo per esempio i caratteri 0 e O oppure I e L facilmente confondibili….

Questo l alfabeto di un indirizzo con i caratteri utilizzabili:

123456789ABCDEFGHJKLMNPQRSTUVWXYzabcdefghijkmnopqrstuvwxyz

In linea di massima diciamo che la maggior parte degli indirizzi Bitcoin si compone di 34 caratteri.

TIPOLOGIE DI INDIRIZZI BITCOIN:

Esistono 3 diversi formati di indirizzi bitcoin….

Legacy : indirizzi che iniziano con 1

Legacy è compatibile con tutti i wallet, ma le transazioni che spendono i fondi presenti su indirizzi Legacy “pesano di più”, quindi richiedono delle fee superiori per essere confermate

SegWit : indirizzi che iniziano con 3.

Segregated Segwit (segwit più brevemente) è un aggiornamento di Bitcoin che riduce la dimensione delle transazioni per bitcoin (separando alcuni input della firma dalla transazione), e pone le basi per soluzioni di secondo livello come Lightning network.

Quindi grazie a segwit un blocco della blockchain di bitcoin riesce a detenere più transazioni rispetto al passato (legacy).

In altre parole, da quando si è passati a Segwit , la dimensione del blocco (della blockchain) non è cambiata in realtà, ma sono state alleggerite le informazioni che vanno dentro al blocco e quindi entrano più transazioni dentro il blocco che rimane limitato ad 1MB.

Grazie a Segwit le fee per inviare transazioni sono più basse dato che ora un blocco può ospitare più transazioni.

Native SegWit (bech32): indirizzi che iniziano con bc1q.

Native Segwit ha migliorato ancora di più la situazione e permette di avere fee ancora più basse. Al momento non tutti gli exchange supportano wallet e chiavi pubbliche bench32. Questi address iniziano con bc1 o sono scritti tutti in minuscolo a differenza di address segwit e legacy.

Rispondi

Inserisci i tuoi dati qui sotto o clicca su un'icona per effettuare l'accesso:

Logo di WordPress.com

Stai commentando usando il tuo account WordPress.com. Chiudi sessione /  Modifica )

Google photo

Stai commentando usando il tuo account Google. Chiudi sessione /  Modifica )

Foto Twitter

Stai commentando usando il tuo account Twitter. Chiudi sessione /  Modifica )

Foto di Facebook

Stai commentando usando il tuo account Facebook. Chiudi sessione /  Modifica )

Connessione a %s...

%d blogger hanno fatto clic su Mi Piace per questo: