Al termine di questo breve viaggio tra cifre e lettere incomprensibili (nel caso non lo abbiate già fatto, vi consiglio di leggere la prima e la seconda parte), parleremo in questo articolo di un metodo crittografico che negli ultimi anni ha avuto grande risonanza, anche grazie all'implementazione nel protocollo Bitcoin.

Senza la pretesa di poter liquidare l'argomento della crittografia in spazi così esigui, dal momento che un argomento così vasto e complesso va certamente al di là della finalità di questi articoli, lascio ampio spazio alla passione e allo studio di ciascuno di noi su testi reperibili anche in rete.

Questo articolo conclusivo vuole farci conoscere un po' meglio come funziona un metodo crittografico oggi molto in voga e discusso: l'utilizzo della Crittografia a Curva Ellittica nel protocollo Bitcoin.

Qualche informazione preliminare

Se volessimo utilizzare una similitudine con il sistema creditizio tradizionale, potremmo pensare, semplificando ai minimi termini, che nel sistema Bitcoin l’indirizzo pubblico rappresenti una sorta di codice Iban, il wallet sia l’istituto creditizio o una cassetta di sicurezza e l’indirizzo privato raffiguri il codice segreto per accedere al conto o la chiave utile ad aprire la cassetta di sicurezza.
La scelta di un wallet è una delle prime operazioni da effettuare per affacciarsi al mondo delle criptovalute ed equivale all’apertura di un portafoglio virtuale, che funga da contenitore dei propri indirizzi bitcoin.

Esistono vari tipi di wallet, ognuno con i propri vantaggi e svantaggi, a seconda che lo si voglia utilizzare su computer, su smartphone o direttamente online, in quest’ultimo caso senza installare alcun programma. Questa prima categoria è in gergo chiamata hot wallet, perché si basa su applicativi che sono in qualche modo connessi ad internet.
Di converso, i cold wallet o cold storage sono considerati molto più sicuri poiché non risultano collegati ad internet. Fanno parte di tale categoria i wallet memorizzati su una memoria di massa esterna e conservata in luogo sicuro, oppure i cosiddetti hardware wallet, dispositivi hardware creati appositamente per memorizzare gli indirizzi privati.

Tra i cold wallet possiamo senz’altro citare i physical bitcoins, vere e proprie monete coniate in metalli di differente valore, nel cui interno viene stampata e custodita la rappresentazione numerica dell’indirizzo privato bitcoin.
Infine, uno dei metodi considerati tra i più sicuri per la conservazione degli indirizzi bitcoin è il paper wallet, ovvero la semplice stampa su carta degli indirizzi bitcoin, magari anche in formato QR Code per agevolarne l’utilizzo, da conservare in luogo sicuro.

Nonostante la categoria dei cold wallet sia considerata generalmente più sicura, poiché non esposta ad eventuali insidie derivanti dal collegamento ad una rete, bisogna tenere a mente che lo smarrimento di uno dei sopra citati dispositivi ha come conseguenza la perdita quasi certa dei bitcoin contenuti in essi.

Tutti questi applicativi e dispositivi hanno, quale scopo principale, la conservazione degli indirizzi bitcoin, in particolare di quello privato dal quale dipendono l’esistenza sia dell’indirizzo pubblico sia dei bitcoin stessi.

Il protocollo Bitcoin

Sappiamo ormai tutti che il sistema Bitcoin si fonda sull'invenzione di ciò che possiamo definire la spina dorsale di tale protocollo, che è la Blockchain.
Al di là di quello che è diventato oggi l'uso (e l'abuso, aggiungerei) di tale ottima intuizione, occorrerà ricordare che affinché il sistema Bitcoin possa garantire transazioni sicure tra gli utilizzatori, senza la presenza di intermediari che operino da garanti, i creatori si sono serviti degli importanti sviluppi nella crittografia, in particolare di quella a chiave pubblica.

In effetti, il primo approccio al mondo Bitcoin avviene con la creazione della propria coppia di chiavi, quella pubblica e quella privata, legate tra loro mediante una funzione crittografica unidirezionale denominata Algoritmo di Firma Digitale a Curva Ellittica (=Elliptic Curve Digital Signature Algorithm o ECDSA).
In particolare è stata scelta la curva ellittica denominata secp256k1 (così chiamata secondo la classicazione Standards for Efficient Cryptography o SEC, “Consorzio Internazionale per lo Sviluppo degli Standard Commerciali per una Crittografia Efficiente” basata sulla crittografia a curva ellittica, maggiori informazioni si potranno reperire a pag. 9 di questo documento), che garantisce alti livelli di sicurezza e chiavi corte, al fine di agevolarne l’utilizzo da parte degli utenti.

L’algoritmo di cifratura secp256k1 si occupa innanzitutto di creare la chiave privata, cioè una sequenza che abbia il più alto grado di casualità permesso da un computer. La risultanza sarà un numero intero di 256bit, rappresentato mediante 64 caratteri esadecimali.
Tale sequenza alfanumerica è denominata chiave privata ed assume una estrema importanza nel sistema Bitcoin, sia perché a partire da essa si genera la chiave pubblica, sia perché il possesso di una chiave privata equivale ad avere la disponibilità dei bitcoin associati al relativo indirizzo.
Poiché, quindi, la chiave privata opera come se fosse l’unico codice segreto utile ad aprire una cassaforte, tale chiave deve necessariamente restare segreta e conservata in luogo sicuro.

E9873D79C6D87DC0FB6A5778633389F4453213303DA61F20BD67FC233AA33262

Esempio di chiave privata (64 caratteri esadecimali)

L’algoritmo crittografico secp256k1, subito dopo aver creato la chiave privata, deriva da essa la chiave pubblica, utilizzando la funzione di moltiplicazione della curva ellittica. La chiave pubblica pertanto, è legata univocamente alla chiave privata che l’ha generata mediante una funzione irreversibile la quale, come accennato nell'articolo precedente, non consente di invertire agevolmente il procedimento di creazione delle chiavi.

La chiave pubblica è un numero intero di 520 bit, rappresentato con una serie di 130 caratteri esadecimali e, al contrario della chiave privata, non deve restare segreta perché rappresenta idealmente l’indirizzo sul quale è possibile ricevere bitcoin.

0450863AD64A87AE8A2FE83C1AF1A8403CB53F53E486D8511DAD8A04887E5B23522CD470243453A299FA9E77237716103ABC11A1DF38855ED6F2EE187E9C582BA6

Esempio di chiave pubblica (130 caratteri esadecimali)

Nonostante sia computazionalmente impossibile ricavare (oggi!) la chiave privata da quella pubblica, si è preferito sottoporre quest’ultima ad ulteriori funzioni matematiche che non solo offrono all’utente una elevata garanzia di sicurezza, ma permettono di utilizzare un formato più semplice per l’uso quotidiano.

L’indirizzo bitcoin, infatti, si ottiene sottoponendo l’indirizzo pubblico a molteplici procedimenti di hashing eseguiti in successione.
Più in dettaglio, la chiave pubblica viene prima sottoposta ad hashing mediante l’algoritmo SHA256, il risultato di tale elaborazione verrà utilizzato come input per calcolare l’hash mediante l’algoritmo RIPEMD160 (=RACE Integrity Primitives Evaluation Message Digest o RIPEMD è una funzione crittografica di hash e fu sviluppata in Belgio in risposta alla funzione di hash denominata SHA, sviluppata dalla statunitense NSA).
Il successivo risultato viene ulteriormente sottoposto ad un’ultima codifica mediante la funzione Base58Check (utilizzata nel sistema Bitcoin al fine di semplificare l’utilizzo degli indirizzi bitcoin, riducendone la lunghezza e anche poiché permette un maggiore controllo di integrità, includendo un meccanismo di controllo degli errori) il cui risultato sarà l’indirizzo bitcoin.

16UwLL9Risc3QfPqBUvKofHmBQ7wMtjvM

Esempio di indirizzo bitcoin (33 caratteri in Base58)

Tutte le precedenti elaborazioni crittografiche apportano notevoli vantaggi sia in termini di usabilità, poiché riducono l’indirizzo pubblico a soli 33 caratteri alfanumerici, sia perché integrano importanti funzioni di sicurezza permettendo alcuni controlli automatizzati contro gli errori di scrittura dell’indirizzo bitcoin.

Transazioni e privacy

Una transazione è sostanzialmente un passaggio di bitcoin da un indirizzo all’altro. Al fine di garantire il più alto livello di sicurezza in ogni momento di questa fase molto delicata, il sistema Bitcoin fa un largo uso delle tecniche crittografiche descritte nel precedente articolo, come l’hashing e la firma digitale.

Vediamo cosa succede nel momento in cui vogliamo trasferire alcuni bitcoin da un indirizzo ad un altro:

Quando un utente A (che chiameremo Mittente) decide di voler trasferire un numero X di bitcoin ad un utente B (che chiameremo Destinatario) non deve fare altro che inserire l’indirizzo bitcoin del Destinatario e la quantità di bitcoin voluta nell’applicativo utilizzato come wallet. In automatico il software si occuperà di effettuare una serie di operazioni non direttamente visibili agli utenti, ma che sono necessarie per far transitare i bitcoin con estrema sicurezza.

Innanzitutto va premesso che, semplificando moltissimo, per una proprietà intrinseca del protocollo Bitcoin, ogni qualvolta un Mittente avvia una transazione, utilizzerà le parti non utilizzate nelle precedenti transazioni (UTxO=unspent transaction output). L'insieme di queste parti, utilizzate fino a concorrenza dell'importo desiderato, verrà inviato al Destinatario, l'eventuale parte eccedente rispetto all'importo dovuto verrà considerata quale resto.

Infatti ogni transazione è rappresentabile come un registro suddiviso tra input, contenente tutte le precedenti transazioni da cui hanno origine i bitcoin del proprio indirizzo, e gli output ove saranno indicati gli indirizzi dei destinatari, compreso quello del mittente nel caso non vengano utilizzati tutti i propri bitcoin.
L’output di una transazione diventerà l’input della successiva transazione.
Normalmente i valori di input sono maggiori di quelli di output, poiché il sistema è strutturato per riconoscere una ricompensa, detta fee, agli utenti (i cosiddetti miners) che si occuperanno di includere tale transazione nella Blockchain.

Esempio di una sequenza di transazioni, in cui l’input di una transazione diventa l’output della successiva.
Esempio di una sequenza di transazioni, in cui l’input di una transazione diventa l’output della successiva.
Immagine tratta da "Mastering Bitcoin" di Andreas M. Antonopoulos LLC https://bitcoinbook.info - Copyright 2016, Andreas M. Antonopoulos LLC

Dopo aver stabilito a quale indirizzo inviare i bitcoin, il software effettua alcune ulteriori importanti operazioni.
Innanzitutto, utilizzando la chiave privata del Mittente, viene apposta la Firma Digitale alla transazione, in modo da poter provare in qualsiasi momento la titolarità dei bitcoin movimentati mediante la sua chiave pubblica.
Inoltre viene inclusa nella transazione la chiave pubblica del Destinatario, affinché egli soltanto possa risultare il vero beneficiario dei bitcoin inviati, verificando il messaggio mediante la propria chiave privata.

Schema di utilizzo della crittografia a chiave pubblica nelle transazioni Bitcoin.
Schema di utilizzo della crittografia a chiave pubblica nelle transazioni Bitcoin.

Ogni transazione è composta da indirizzi, importi, firme digitali e valori di hash, oltre che da altri dati utili al corretto funzionamento del sistema, ma in nessun caso vi sono nomi o riferimenti alle persone che stanno utilizzando tali bitcoin.
Per tale motivo il sistema Bitcoin non permette una relazione diretta tra gli utenti reali e gli indirizzi che essi utilizzano, anche se non si può parlare di sistema di transazione anonimo.
Ogni transazione Bitcoin, dopo essere stata approvata, viene pubblicata in un registro, detto Blockchain, che è pubblico ed immodificabile.
Ciò comporta che per ogni transazione effettuata vi sarà una annotazione in tale registro, sempre visibile e disponibile a chiunque voglia consultarlo.
Inoltre, mediante ulteriori strumenti, alcuni dei quali liberamente disponibili online, è possibile ottenere la lista di tutte le transazioni, oltre ad altre utili informazioni, inerenti un determinato indirizzo bitcoin. Su questo argomento vi consiglio di leggere questo ottimo articolo.

In tale ambito si va ad inserire, soprattutto per esigenze di indagine, la Bitcoin Forensics ovvero “la disciplina che studia le tecniche investigative e di intelligence, gli strumenti, le metodologie applicabili alle criptovalute[…] focalizzando l’attenzione sull’applicazione delle best practices di computer forensics o network forensics alle indagini digitali sul mondo del Bitcoin e della blockchain”.

Queste sono solo alcune delle motivazioni per le quali non si può considerare il sistema Bitcoin totalmente anonimo, ma lo si può definire pseudo-anonimo, poiché garantisce in ogni caso un ottimo livello di privacy.

Conclusioni

Giunti al termine di questa breve digressione (dipende dai punti di vista :-P ) sui principali metodi crittografici utilizzati fino ad oggi, con la consapevolezza di aver tratteggiato a grandi linee un soggetto dalle mille sfumature, spero di essere riuscito nel mio intento di suscitare e stimolare la curiosità su un argomento tanto complesso quanto interessante.

Infine, come per i precedenti articoli, vi segnalo alcuni testi (non tutti, perchè l'argomento è complesso e ce ne sono davvero tantissimi) che sono stati per me di grande ispirazione per scrivere questa terza parte:

  1. Mastering Bitcoin: Unlocking Digital Cryptocurrencies di Andreas M. Antonopoulos, può essere considerato uno dei testi sacri dell'argomento Bitcoin e lo potete trovare facilmente in vendita online in formato pdf o cartaceo, oppure direttamente sul github dell'autore;
  2. Understanding Bitcoin: Cryptography, engineering and economics di Pedro Franco, lo si trova anche questo facilmente in vendita online;
  3. Criptovalute e bitcoin. Un'analisi giuridica del Dott. Stefano Capaccioli, un testo davvero interessante, anche in virtù del fatto che è stato scritto da uno dei maggiori esperti italiani di criptovalute per ciò che concerne l'inquadramento giuridico, con interessanti spunti sul versante tributario e penale. Lo si trova in vendita online, di solito su Ibs e Amazon.

Per qualsiasi suggerimento, critica, o se avete necessità di ulteriori testi per approfondire l'argomento, vi prego di lasciare un messaggio nello spazio qui sotto riservato ai commenti.

Tags:
cryptography
Alessandro Rella
Post by Alessandro Rella
April 10, 2019
Cybersecurity & Digital Forensics Expert, specialized in Mobile Forensics and passionate about OSINT, Cryptocurrency Forensics and Python. He never stops learning.

Comments