Mokabyte

Dal 1996, architetture, metodologie, sviluppo software

  • Argomenti
    • Programmazione & Linguaggi
      • Java
      • DataBase & elaborazione dei dati
      • Frameworks & Tools
      • Processi di sviluppo
    • Architetture dei sistemi
      • Sicurezza informatica
      • DevOps
    • Project Management
      • Organizzazione aziendale
      • HR
      • Soft skills
    • Lean/Agile
      • Scrum
      • Teoria della complessità
      • Apprendimento & Serious Gaming
    • Internet & Digital
      • Cultura & Società
      • Conferenze & Reportage
      • Marketing & eCommerce
    • Hardware & Tecnologia
      • Intelligenza artificiale
      • UX design & Grafica
  • Ultimo numero
  • Archivio
    • Archivio dal 2006 ad oggi
    • Il primo sito web – 1996-2005
  • Chi siamo
  • Ventennale
  • Libri
  • Contatti
Menu
  • Argomenti
    • Programmazione & Linguaggi
      • Java
      • DataBase & elaborazione dei dati
      • Frameworks & Tools
      • Processi di sviluppo
    • Architetture dei sistemi
      • Sicurezza informatica
      • DevOps
    • Project Management
      • Organizzazione aziendale
      • HR
      • Soft skills
    • Lean/Agile
      • Scrum
      • Teoria della complessità
      • Apprendimento & Serious Gaming
    • Internet & Digital
      • Cultura & Società
      • Conferenze & Reportage
      • Marketing & eCommerce
    • Hardware & Tecnologia
      • Intelligenza artificiale
      • UX design & Grafica
  • Ultimo numero
  • Archivio
    • Archivio dal 2006 ad oggi
    • Il primo sito web – 1996-2005
  • Chi siamo
  • Ventennale
  • Libri
  • Contatti
Cerca
Chiudi

Nel numero:

291 febbraio
, anno 2023

Bitcoin, blockchain e criptovaluta

IV parte: Come funziona Bitcoin. Chiavi, indirizzi e wallet

Marco Migliorni

Marco Migliorini

Marco Migliorini è un ingegnere informatico con un'esperienza più che decennale nella progettazione e nello sviluppo di sistemi software basati su architettura Java EE.
Da alcuni anni si è avvicinato al mondo della blockchain: l'iniziale curiosità è diventata una veemente passione a mano a mano che avanzava nel suo percorso formativo.
Ciò l'ha portato a cambiare direzione nella sua carriera lavorativa e a intraprendere il percorso per diventare consulente blockchain/web3, sia per quanto riguarda l'insegnamento che per l'implementazione di soluzioni ad hoc.

Bitcoin

Bitcoin, blockchain e criptovaluta

IV parte: Come funziona Bitcoin. Chiavi, indirizzi e wallet

Marco Migliorini

Marco Migliorini

  • Questo articolo parla di: Cultura & Società, Internet & Digital, Sicurezza informatica

Introduzione

Continuiamo la nostra panoramica sul funzionamento di Bitcoin; ricordiamo che Bitcoin con la B maiuscola fa riferimento all’intero sistema e bitcoin con la b minuscola indica la moneta proprietaria del sistema.

Dopo aver trattato nella parte precedente la rete, i suoi nodi con le varie funzioni e alcuni principi base della crittografia, continuiamo la discussione parlando di chiavi, indirizzi e wallet.

 

Chiavi e indirizzi

Vediamo adesso il modo in cui le funzionalità crittografiche appena introdotte vengono sfruttate per calcolare gli indirizzi Bitcoin e le coppie di chiavi, private e pubbliche, ad essi associate.

Innanzitutto spieghiamo che cos’è un indirizzo Bitcoin. Detto in parole semplici, ce lo possiamo immaginare come una sorta di “IBAN” dove si possono ricevere e inviare i bitcoin. Detto in termini più tecnici, è un hash dove si possono bloccare, attraverso una firma digitale, dei bitcoin, che potranno essere spesi successivamente grazie al possesso della chiave privata associata.

Gli step necessari per generare un indirizzo Bitcoin, sono i seguenti:

  1. l’esecuzione di un generatore puro di casualità per ottenere una chiave privata di 256 bit, sequenza puramente casuale di 0 e 1 (processo non riproducibile);
  2. la cifratura della chiave privata, attraverso l’algoritmo a crittografia asimmetrica basato sulle curve ellittiche, per determinare l’unica chiave pubblica ad essa associata (funzione non invertibile);
  3. il calcolo del doppio hash della chiave pubblica, attraverso gli algoritmi SHA-256 e RIPDEM-160 eseguiti in sequenza, al fine di ottenere l’unica stringa alfanumerica di 160 bit associatavi (funzioni non invertibili);
  4. la codifica di questa stringa alfanumerica, attraverso la funzione Base58Check, per ricavarne un’altra più compatta e senza caratteri ambigui all’occhio umano. Infatti 0 (zero), O (o maiuscola), l (elle minuscola), I (i maiuscola} non sono mai presenti in questa stringa, che rappresenta l’unico indirizzo associato al doppio hash della chiave pubblica (funzione non invertibile).
Figura 1 – Come si genera un indirizzo Bitcoin.
Figura 1 – Come si genera un indirizzo Bitcoin.

Osservazioni sulla sicurezza della chiave privata

La relazione che sussiste fra la chiave privata e l’indirizzo è tale per cui solo chi possiede la chiave privata può spostare i fondi da quell’indirizzo. Più precisamente, possedere la chiave privata di un indirizzo Bitcoin nel quale risiedono delle monete equivale a possedere quelle monete (proprietà e spendibilità); questo perché siamo gli unici in grado di dimostrare che la firma digitale che blocca i fondi in quello hash l’abbiamo generata noi, appunto con la nostra chiave privata. Ne deriva che, se la chiave privata non viene custodita a dovere, i fondi presenti su quell’indirizzo sono a rischio: chiunque possieda la chiave privata può spostare i fondi presenti.

Da quando detto sopra viene spontaneo porsi la seguente domanda: “Ma se due entità distinte generano per caso la stessa chiave privata, cosa succede?”. La risposta è semplice: “Entrambi generano la stessa chiave pubblica, lo stesso indirizzo, e quindi sono capaci di spendere gli stessi soldi!”.

Come si risolve questo problema? Semplicemente utilizzando un generatore di casualità puro, ovvero non pseudo-casuale (algoritmo che genera numeri random ma che in determinate condizioni ripropone la stessa sequenza). Con un tale generatore puro le possibili combinazioni di chiavi private sul sistema Bitcoin sono 2256, approssimativamente 1077 in cifre decimali, un numero incomprensibile per noi umani: basti pensare che la stima degli atomi dell’universo visibile è 1080. Ne deriva quindi che la probabilità di calcolare entrambi la stessa chiave privata è pressoché nulla, a patto di utilizzare un sistema di entropia puro.

Funzionalità abilitate dalla crittografia

Grazie all’utilizzo della crittografia, Bitcoin riesce a implementare in maniera elegante una miriade di funzionalità. Ad esempio:

  • la creazione degli indirizzi del sistema — dove risiederanno i bitcoin spendibili — associati 1:1 con le rispettive chiavi private;
  • l’attestazione della proprietà dei fondi bloccati su questi indirizzi; ne è il proprietario, solo chi conosce la chiave privata che ha generato la firma digitale con cui questi fondi sono bloccati;
  • il controllo su questi fondi; può spenderli solo chi conosce la chiave privata che ha generato la firma digitale con cui questi fondi sono bloccati;
  • la sicurezza matematica che questi fondi non saranno rubabili fintanto che la chiave privata sarà protetta; inviolabilità della chiave privata a meno di falle sulla sicurezza nella custodia della stessa.

 

Wallet

Introdotti i concetti di chiavi e indirizzi, possiamo comprendere cosa sia effettivamente un wallet Bitcoin.

Iniziamo dicendo che il nome di questo strumento (= “portafogli”, “portamonete”) è completamente fuorviante, in quanto esso non contiene monete — come vedremo più avanti i bitcoin sono tutti all’interno della blockchain sotto forma di output di transazione non spesa o UTXO — ma semplicemente coppie di chiavi, private e pubblica, e indirizzi a queste associate.

I wallet sono degli strumenti che servono per semplificare la vita nell’interazione con il sistema Bitcoin. Le loro principali funzionalità sono:

  • generare una nuova tripletta {chiave privata, chiave pubblica, indirizzo} ogni qualvolta ve ne sia la necessità, eseguendo in automatico la sequenza di operazioni viste nel paragrafo precedente;
  • memorizzare tutti gli indirizzi, e le coppie di chiavi a questi associati, che siano stati precedentemente generati;
  • mostrare il saldo totale di tutti i bitcoin bloccati negli indirizzi che gestisce;
  • creare transazioni valide per il sistema Bitcoin (vedremo più avanti cosa vuol dire);
  • firmare queste transazioni per rendere spendibili i relativi bitcoin (vedremo più avanti come questo avviene).

Rimarchiamo che, in linea con quanto visto precedentemente per le chiavi private, non esiste limite al numero di indirizzi che si possono generare con un wallet. Ogni indirizzo corrisponde 1:1 con una chiave privata, e lo spazio delle chiavi private di Bitcoin è 1077.

Tipologie di wallet

Esistono svariate forme di wallet: da quella cartacea a quella digitale, da quella software a quella hardware, e la scelta di una forma piuttosto che di un’altra dipende molto dall’utilizzo e dalla dimestichezza che abbiamo con questi sistemi.

Indipendentemente da quale wallet si scelga, la cosa più importante da fare è eseguirne il backup, in quanto, se il wallet si corrompe o viene smarrito, tutti i fondi ivi contenuti sono persi per sempre; la generazione delle chiavi private del wallet è puramente casuale, per cui è impossibile recuperare i fondi in esso contenuti se non si fa un backup.

Agli albori di Bitcoin, i wallet erano tutti di tipo non deterministico o casuale, ossia non sussistevano relazioni fra le chiavi private in essi contenute. Questo implicava che il backup di questo tipo di wallet era molto oneroso, perché era necessario eseguirne uno nuovo ogni qualvolta si generava una nuova chiave, così da avere la garanzia di non perdere i fondi contenuti nel nuovo indirizzo.

Per ovviare a questo fastidio, molti utenti violavano una delle regole principali della privacy su Bitcoin: riutilizzavano lo stesso indirizzo più volte. Così facendo avevano meno chiavi private di cui fare il backup ma esponevano i loro fondi a maggiori rischi di hackeraggio.

Per risolvere questo inconveniente sono nati i wallet deterministici o seeded [1], dove ogni nuova chiave privata generata sul wallet si ricava facendo l’hash della chiave privata precedente. Si capisce quindi che tutte le chiavi private di questa tipologia di wallet sono collegate tra di loro e, per ricreare l’intera sequenza, è semplicemente necessario conoscere la prima chiave privata del wallet, detta anche master key o seed.

Al giorno d’oggi, quando creiamo un nuovo wallet, ci viene chiesto di memorizzarci un insieme di 12-24 parole generate casualmente, che altro non sono che il suo seed, ossia l’unica informazione che ci serve per ripristinare l’intero wallet: tutte le chiavi private, pubbliche e gi indirizzi ad esso associati.

Nota bene: il seed del wallet è l’informazione che consente di fare il ripristino dello stesso a fronte di qualsiasi problema, così come è l’informazione che dà pieno accesso e controllo a tutti i fondi presenti nel wallet! Va tenuto segreto e ne vanno fatti vari backup!

 

Digressione

Ad un lettore attento non sarà sfuggito che, nella definizione iniziale di Bitcoin, viene utilizzata sia la parola “decentralizzato” che “distribuito”, quasi come se fossero sinonimi. In realtà, questo è un errore molto comune che si riscontra in quasi tutta la narrativa sull’argomento.

Bitcoin è intrinsecamente distribuito, sia dal punto di vista topologico che dal quello dell’autorità (chi autorizza cosa).

La differenza fra una rete topologicamente decentralizzata e una distribuita è ben visibile nella figura 2.

Figura 2 – Rete decentralizzata vs. rete distribuita.
Figura 2 – Rete decentralizzata vs. rete distribuita.

 

In altre parole, la rete è strutturalmente:

  • decentralizzata, se esiste un sottoinsieme di nodi collegati fra di loro in modo ridondante, i quali a loro volta costituiscono un singolo punto di collegamento per altri sottoinsiemi di elementi della rete; se un nodo “principale” va fuori uso, tutta la sottorete a questo associata rimane scollegata e non operante;
  • distribuita, se esistono collegamenti ridondanti fra ogni nodo della rete (si parla di struttura rilassata o senza vincoli topologici). Con questa topologia di rete non esistono punti di fallimento evidenti perché, se un qualsiasi nodo va fuori uso, tutti gli altri elementi ad esso collegato rimangono connessi e operativi.

Lo stesso discorso può essere applicato anche al concetto di autorità: se non esiste un sottoinsieme di nodi che può imporre la propria volontà sugli altri, ma sono tutti nodi alla pari con stessi diritti e doveri, allora la rete è ad autorità distribuita.

Si rimanda ad un video di Marco Crotta, noto esperto italiano del settore, per una comprensione più approfondita di questi concetti. [2]

 

Conclusioni

In questo quarto articolo della serie Bitcoin abbiamo continuato a illustrare il funzionamento del sistema Bitcoin, spiegando le chiavi, gli indirizzi e i wallet. Nel prossimo pezzo ci concentreremo sulle transazioni e su come viene generata la blockchain di Bitcoin.

 

 

Riferimenti

[1] Approfondimento di Deterministic wallet da bitcoinwiki
https://en.bitcoinwiki.org/wiki/Deterministic_wallet.

 

[2] BlockChain Caffè, Ethereum è decentralizzato (Bitcoin no), 2022
https://www.youtube.com/watch?v=CEatlMM0QrQ.

 

 

 

Facebook
Twitter
LinkedIn
Marco Migliorni

Marco Migliorini

Marco Migliorini è un ingegnere informatico con un'esperienza più che decennale nella progettazione e nello sviluppo di sistemi software basati su architettura Java EE.
Da alcuni anni si è avvicinato al mondo della blockchain: l'iniziale curiosità è diventata una veemente passione a mano a mano che avanzava nel suo percorso formativo.
Ciò l'ha portato a cambiare direzione nella sua carriera lavorativa e a intraprendere il percorso per diventare consulente blockchain/web3, sia per quanto riguarda l'insegnamento che per l'implementazione di soluzioni ad hoc.

Marco Migliorini

Marco Migliorini

Marco Migliorini è un ingegnere informatico con un'esperienza più che decennale nella progettazione e nello sviluppo di sistemi software basati su architettura Java EE. Da alcuni anni si è avvicinato al mondo della blockchain: l'iniziale curiosità è diventata una veemente passione a mano a mano che avanzava nel suo percorso formativo. Ciò l'ha portato a cambiare direzione nella sua carriera lavorativa e a intraprendere il percorso per diventare consulente blockchain/web3, sia per quanto riguarda l'insegnamento che per l'implementazione di soluzioni ad hoc.

Tutti gli articoli
Nello stesso numero
Loading...

Digital revolution: La teoria

Tema 1: Approccio Scrum-like alle trasformazioni organizzative

Digital revolution: trasformare le aziende in ecosistemi digitali

I parte: Primo incontro.

Che cosa significa fare una trasformazione agile?

II parte: Le buone pratiche

Nella stessa serie
Loading...

Bitcoin, blockchain e criptovaluta

V parte: Come funziona Bitcoin. Transazioni e UTXO

Bitcoin, blockchain e criptovaluta

III parte: Come funziona Bitcoin. Rete e crittografia

Bitcoin, blockchain e criptovaluta

II parte: Perché è nato Bitcoin

Bitcoin, blockchain e criptovaluta

I parte: Breve storia del denaro

Mokabyte

MokaByte è una rivista online nata nel 1996, dedicata alla comunità degli sviluppatori java.
La rivista tratta di vari argomenti, tra cui architetture enterprise e integrazione, metodologie di sviluppo lean/agile e aspetti sociali e culturali del web.

Imola Informatica

MokaByte è un marchio registrato da:
Imola Informatica S.P.A.
Via Selice 66/a 40026 Imola (BO)
C.F. e Iscriz. Registro imprese BO 03351570373
P.I. 00614381200
Cap. Soc. euro 100.000,00 i.v.

Privacy | Cookie Policy

Contatti

Contattaci tramite la nostra pagina contatti, oppure scrivendo a redazione@mokabyte.it

Seguici sui social

Facebook Linkedin Rss
Imola Informatica
Mokabyte