
Nelle scorse lezioni abbiamo visto attraverso una demo cosa è una blockchain e come funziona. Abbiamo inserito all interno del campo dati le transazioni di una moneta, in quel caso dollari ma potevano essere anche euro o bitcoin (al fine della dimostrazione non cambia nulla) e abbiamo trasferito di volta in volta la loro proprietà tra diverse entità..
N.b. Qualora ti servisse ti rimando ai link delle due lezioni in questione prima di affrontare un nuovo tema !
Bene dopo aver assimilato il tutto rimane un grosso problema e cioe’: “Cosa puo’ fermare qualcuno dall’aggiungere una transazione che trasferisca tutto il denaro di qualcun altro verso di lui ? “
Apparentemente non sembra esserci alcuna protezione per evitare ciò….
Percio’ quel che faremo sara’ cercare modo e maniera di aggiungere alla blockchain solo le transazioni effettuate da entità che abbiano requisiti particolari per farlo…..
E per fare cio’ dobbiamo introdurre un’altra figura crittografica, vale a dire la coppia di chiavi pubblica / privata, che useremo per ottenere una firma digitale.
Vediamo subito come fare:

Nella foto qui sopra ci troviamo di fronte ad una coppia di chiavi privata/ pubblica.
La chiave privata e’ semplicemente
un numero molto, molto lungo che va da 1 a poco meno di 2256 .
Qualsiasi numero puo’ rappresentare una chiave privata.
Possiamo mettere “1”, anche se non e’ una chiave privata molto buona, poiche’ un sacco di persone avranno pensato al numero “1” prima di noi.

Ma potrei anche scegliere un numero molto, molto lungo, come un numero casuale, da usare come chiave privata e notereste che ogni volta che aggiungo o cambio anche una singola cifra viene ricalcolata la chiave pubblica associata a quella chiave privata.
Facciamo ora 2 esempi….


Come indica il nome, la chiave privata
deve essere mantenuta *privata*. Soltanto voi
possedete questa chiave privata, e
non dovete rivelarla mai a nessun altro.
Inveve proprio come implica il nome,
la chiave pubblica potete comunicarla a chiunque e non c’e’ alcun pericolo
nel renderla nota a tutti gli altri.
Questo perchè non c’e’ modo di derivare dalla chiave pubblica la sua corrispondente chiave privata, ma solo viceversa…
Bene.. ora premerò il bottone del generatore casuale “random” cosi’ da ottenere una nuova chiave privata bella lunga.

Dalla chiave privata la demo ha derivato una chiave pubblica ed ora utilizzerò la mia chiave privata per creare la mia firma digitale.
Vediamo come funziona spostandoci nella sezione “signatures” della demo.

Bene come vedete c è una sezione vuota denominata “message” dove posso scrivere qualsiasi cosa e subito sotto la mia “private key”…..Facciamo una prova…..scriverò una frase a caso….scriverò “not your keys not your bitcoin”….

Questa e’ la mia chiave *privata*,
soltanto io la conosco, e sopra c’è il messaggio che soltanto io ho (per il momento).
Premo il pulsante “Sign” [Firma]….
e verrà fuori la firma [digitale] del messaggio qui sopra (not your keys not your bitcoin).

E questa firma digitale la posso
passare a qualcun altro anzi a chiunque altro per fargliela verificare.
Ovviamente gli altri non conoscono la mia chiave privata, poiche’ io la tengo *privata*.
Nessun altro puo’ vederla.
Ma invece io pubblichero’ la mia chiave pubblica e cosi’ chiunque sapra’ che quella e’ la mia “chiave pubblica”.
Quindi, dato un certo messaggio, e poiche’ ognuno conosce la mia chiave pubblica,
e data la firma digitale che ho apposto….ognuno dovrebbe essere in grado di verificarla….
Ma vediamo come fare spostandoci nella sezione “verify”.

Ora clicco su “Verify” [“Verifica”]….e sono sicuro che lo schermo diventi verde….

Ciò significa che questo e’ un messaggio valido in quanto ho verificato che chiunque abbia firmato digitalmente il messaggio aveva accesso alla chiave privata che e’ legata a questa chiave pubblica.
E se io ho mantenuto quella chiave privata segreta quella persona sono io….
D’accordo…. quindi abbiamo visto cos’e’ la firma digitale di un messaggio, come si fa a firmare “digitalmente” qualcosa e come si può facilmente verificarla.
Ora, anziche’ utilizzare un testo arbitrario diamo una struttura a questi dati e come avevamo fatto nelle scorse lezioni
realizzeremo una transazione, nel senso che il nostro messaggio conterrà un trasferimento di fondi da un entità all’ altra e quindi un input e un output di transazione.
Spostiamoci nella sezione “Transaction” della demo !!

Il messaggio che andro’ a comporre è
“Voglio inviare 20$ da un entita’, che e’ la mia chiave pubblica….alla chiave pubblica di qualcun altro”.
Chiunque sia il soggetto a cui voglio inviare il denaro, lo stesso deve in qualche modo poter verificare che la transazione sia stata effettivamente compiuta da me..

Io, naturalmente, per firmare questa transazione ho bisogno della mia chiave privata che non rivelero’ mai a nessuno,
Bene ora clicco su “Sign” e ottengo la firma digitale della transazione.

Perfetto…..adesso quello che devo fare è mandare all’esterno il mio messaggio e
la mia firma a qualcun altro in modo che i destinatari sappiano che sto cercando di inviare 20$ dalla mia
chiave pubblica a quella di qualcun altro….
Di conseguenza quello che gli altri, ricevuto il messaggio, devono fare è verificare il tutto….

……e per vedere se la chiave privata collegata alla chiave pubblica del mittente ha realmente firmato il messaggio clicchiamo su “verify”

Lo sfondo della schermata si è colorato di verde e ci fa capire che la firma è valida e verificata.

della chiave privata legata alla chiave pubblica A
sta inviando con assoluta certezza 20$ alla
chiave pubblica B e sia quest ultima che chiunque altro attraverso la firma digitale possono verificare quanto detto !!
Cosa succederebbe invece se volessi trasmettere all’ esterno una transazione con un importo alterato nel momento in cui venisse verificata da un altra entità ?

Adesso arriva la parte interessante….ovvero utilizzeremo tutto ciò che abbiamo appreso in questa lezione all interno di una blockchain.
Spostiamoci quindi nella sezione “Blockchain” della nostra demo.

Avevamo già visto nelle lezioni precedenti questa sezione della demo chiamata “blockchain”….ripropongo un piccolo screenshoot…….

Ora invece la schemata “Blockchain” ci appare in questo modo:

Bene ci saltano agli occhi un paio di differenze rispetto alla lezione 06 :
1 – non ci sono piu’ nomi delle entità qui,
ma abbiamo soltanto le chiavi pubbliche
nei campi “From” [“Da”] e “To” [“A”].
2 – inoltre notate che ora c è una sezione in più per la firma digitale.

Ora se guardiamo il blocco n 2 in foto vediamo una transazione dove una chiave pubblica invia 20 $ ad un altra chiave pubblica ed inoltre troviamo anche la firma digitale che lo conferma !
Che succede se adesso cambiamo il valore inviato da 20$ a 50$?

Ovviamente abbiamo invalidato il blocco ed
abbiamo anche invalidato la firma digitale, di conseguenza la transazione non e’ piu’ verificata (motivo per cui la firma appare ora in rosso).
È importante sottolineare che, anche se potremmo premere il tasto “Mine” nella nostra demo e simulare il fatto che un miner possa elaborare questo blocco alterato
e rivalidarlo con grandissimo dispendio computazionale, si otterrebbe una situazione del genere, come mostrerò ora in foto qui sotto !

Il risultato è questo:
il blocco prima o poi sarebbe validato ma tuttavia la firma digitale di quella transazione e’ ancora non valida, poiche’ i miners non hanno la chiave privata dell’ entità che ha creato la transazione ma hanno soltanto la chiave pubblica, per cui non possono produrre una firma valida.
Inoltre va sottolineato come anche tutti i blocchi successivi andrebbero ricalcolati in quanto, essendo collegati ognuno al blocco precedente, risultano avere hash non validi ( qua sotto una foto della blockchain distribuita su 3 peer che rende bene l idea ! ).

In conclusione questa e’ la maniera in cui
possiamo assicurarci ogni transazione scritta in blockchain venga effettuata dall’ entità che deteneva il denaro, soltanto da lei e non da chiunque altro.
La firma digitale unita alla coppia di chiavi privata/pubblica e’ utilizzata per proteggere
le transazioni !!
Se ci pensate funziona veramente molto bene poiche’ per creare un nuovo
indirizzo generato da una chiave pubblica,
l’unica cosa da fare e’ tornare indietro e
generare una nuova chiave privata.
Non abbiamo bisogno di rivolgerci ad un’autorita’ centrale per ottenere
una coppia di chiavi crittografiche privata / pubblica….dobbiamo semplicemente creare una nuova chiave privata ed usarla
per derivare la corrispondente chiave pubblica in modo che con gli indirizzi le entità possano effettuare transazioni e lasciare ai miners il compito di verificarle e di scriverle in blockchain immutabilmente..
Per questa lezione siamo giunti al termine…. Questo e’ il modo in cui una Blockchain
funziona, ovviamente a grandi linee,
ma tutto sommato l’idea complessiva
chiarita visivamente con questi esempi e’ molto simile al modo in cui funzionano le transazioni Bitcoin nella blockchain.
Spero vi sia stato utile…e se avete piacere inviate i vostri commenti e fatemi sapere cosa ne pensate….
Buon Bitcoin a tutti !!
…e alla prossima lezione !!!