Criptografia – Mettere il cripto nella moneta
Questo articolo esplora la tecnologia fondamentale delle criptovalute e della crittografia, dalle basi della crittografia ai cifrari.
In questo articolo di approfondimento parliamo di una tecnologia fondamentale alla base delle criptovalute, la crittografia, trattando le basi della crittografia, delle funzioni hash e dei cifrari come introduzione alla crittografia in azione.
Introduzione alla crittografia
La crittografia, in termini più semplici, consiste nel rendere segrete le comunicazioni. Il termine “segreto” sta a significare che, anche in presenza di un’intercettazione che può monitorare tutte le comunicazioni, il messaggio previsto può essere consegnato al destinatario e mantenuto segreto agli altri.
La crittografia utilizza spesso tecniche matematiche per ottenere proprietà desiderabili di segretezza. È spesso associato al processo di conversione di un normale testo in chiaro in un testo cifrato, ovvero un testo che solo il destinatario può decodificare. Il processo che converte il testo in chiaro in testo cifrato è noto come cifratura, mentre il processo di conversione dal testo cifrato al testo in chiaro è detto decifrazione. Un cifrario (o cifrario) è un algoritmo per eseguire la crittografia o la decrittografia – una serie di passaggi ben definiti che possono essere seguiti come una procedura.
La crittografia non è qualcosa di nuovo, né solo per le criptovalute. È ampiamente utilizzato nella vita quotidiana quando è necessario proteggere le informazioni, come le password delle transazioni bancarie, le password degli account e-mail e le transazioni di e-commerce.
La blockchain e le criptovalute utilizzano la crittografia in diversi modi: per i portafogli, le transazioni, la sicurezza e i protocolli che preservano la privacy. Per esempio:
- Crittografia a chiave pubblica utilizzata in una transazione
- Hashing per il mining di Bitcoin
- Alberi di Merkle per il posizionamento delle transazioni nei blocchi
Possiamo quasi dire che se non si capisce la crittografia, non si capiscono le criptovalute. Per imparare meglio, immergiamoci nel mondo della crittografia.
Crittografia simmetrica e asimmetrica e funzioni di hash.
La classificazione degli algoritmi crittografici si basa sul numero di chiavi utilizzate per la crittografia e la decrittografia: crittografia simmetrica, asimmetrica e funzioni hash.
Ciascuna ha applicazioni specifiche che sono insostituibili l’una per l’altra. Ad esempio, la crittografia asimmetrica è necessaria per generare le coppie di chiavi private/pubbliche, mentre le funzioni di hash sono necessarie per produrre impronte digitali uniche.
Crittografia simmetrica
La crittografia simmetrica utilizza un’unica chiave sia per la crittografia che per la decrittografia. Il mittente del messaggio utilizza la chiave per criptare il testo in chiaro e invia il testo cifrato al destinatario, che applica la stessa chiave per decriptare il messaggio e recuperare il testo in chiaro. I sistemi a chiave simmetrica sono più veloci e semplici (rispetto a quelli a chiave asimmetrica), ma non risolvono il problema dello scambio di chiavi tra mittente e destinatario se la chiave non è nota in anticipo.
Gli schemi di crittografia simmetrica si dividono ulteriormente in cifrari a blocchi e cifrari a flusso.
Cifrari a blocchi
I cifrari a blocchi suddividono l’input in blocchi di dimensioni fisse (ad esempio, 128 bit) e ciascuno dei blocchi viene elaborato da diverse funzioni con la chiave segreta. L’algoritmo determina la lunghezza del blocco, la chiave e le funzioni utilizzate nel processo.
Alcuni cifrari a blocchi comunemente utilizzati sono:
Standard di crittografia dei dati (DES)
- Lunghezza del blocco = 64 bit
- Lunghezza della chiave = 56 bit
Creato da IBM, il DES è stato uno dei cifrari simmetrici a blocchi più diffusi nei primi anni ’70 ed è uno degli algoritmi di crittografia più studiati. È stato adottato come standard federale dal National Bureau of Standards (USA) nel 1976 e incluso negli standard ANSI come algoritmo di crittografia dei dati per il settore privato nel 1981.
All’inizio del XXI secolo, il DES era considerato insicuro, soprattutto a causa della lunghezza relativamente breve della chiave segreta, che lo rendeva vulnerabile agli attacchi di forza bruta.
Standard di crittografia avanzata (AES)
- Lunghezza del blocco = 128 bit
- Lunghezza della chiave = 128, 192 o 256 bit
AES, un moderno cifrario simmetrico a blocchi, è uno dei cifrari più diffusi al mondo. Sviluppato nel 1997 da Vincent Rijmen e Joan Daemen, è stato successivamente approvato come standard di crittografia federale negli Stati Uniti nel 2002.
AES è considerato un cifrario solido e sicuro. Nel corso degli anni si sono verificati numerosi attacchi contro diverse implementazioni di AES, ma riguardano casi particolari e non sono considerati una minaccia per l’algoritmo AES stesso.
Triplo DES (3DES)
- Lunghezza del blocco = 64 bit
- Lunghezza della chiave = 56, 112 o 168 bit
Il cifrario 3DES è stato sviluppato perché la crittografia DES, inventata all’inizio degli anni ’70 e protetta da una chiave a 56 bit, si è rivelata troppo debole e facile da violare con i moderni computer dell’epoca.
Cifrari di flusso
I cifrari a flusso sono più flessibili dei cifrari a blocco, in quanto sono progettati per crittografare i singoli caratteri (di solito cifre binarie) di un messaggio in chiaro uno alla volta, utilizzando una trasformazione di crittografia che varia nel tempo. Al contrario, i cifrari a blocchi tendono a crittografare blocchi di testo in chiaro utilizzando contemporaneamente una trasformazione di crittografia fissa.
Nel complesso, l’hardware dei cifrari a flusso è più veloce di quello dei cifrari a blocchi. I cifrari di flusso sono anche più appropriati e, in alcuni casi, obbligatori (ad esempio, in alcune applicazioni di telecomunicazione) quando il buffering è limitato o quando i caratteri devono essere elaborati singolarmente al momento della ricezione. Poiché la propagazione degli errori è limitata o nulla, i cifrari a flusso possono essere vantaggiosi anche in situazioni in cui gli errori di trasmissione sono altamente probabili.
Alcuni cifrari a flusso popolari includono:
RC4
- Lunghezza della chiave = fino a 2.048 bit
L’RC4 è un cifrario a flusso di dimensione variabile con operazioni orientate ai byte, ampiamente utilizzato nei protocolli più diffusi. Ad esempio, viene utilizzata per proteggere il traffico Internet (Transport Layer Security, noto come TLS) o per proteggere le reti wireless (Wired Equivalent Privacy, o WEP).
Pad unico (OTP)
- Lunghezza della chiave = lunghezza del messaggio
La teoria alla base del One-Time Pad (OTP) prevede che la chiave abbia almeno la stessa lunghezza del messaggio (il testo in chiaro) e sia composta da numeri veramente casuali. Ogni lettera del testo in chiaro viene “mescolata” con un elemento dell’OTP. In questo modo si ottiene un testo cifrato che non ha alcuna relazione con il testo in chiaro quando la chiave è sconosciuta. All’estremità ricevente, lo stesso OTP viene utilizzato per recuperare il testo in chiaro originale.
Salsa20
- Lunghezza della chiave = 32 byte
Salsa20 è un cifrario presentato al progetto eSTREAM, in corso dal 2004 al 2008, che doveva promuovere lo sviluppo di cifrari a flusso. È considerato un algoritmo ben progettato ed efficiente. Non esistono attacchi noti ed efficaci alla famiglia di cifrari Salsa20.
Crittografia asimmetrica
La crittografia asimmetrica è nota anche come crittografia a chiave pubblica (PKC). Utilizza due chiavi diverse per la crittografia e la decrittografia. La chiave che deve essere tenuta segreta si chiama chiave privata, mentre quella che non deve essere tenuta segreta si chiama chiave pubblica. Ad esempio, se A vuole inviare un messaggio a B e assicurarsi che B sia l’unica persona in grado di comprenderlo, A può crittografare il messaggio utilizzando la chiave pubblica in modo che solo B possa decifrarlo utilizzando la chiave privata.
Descritta per la prima volta pubblicamente dal professore dell’Università di Stanford Martin Hellman e dallo studente laureato Whitfield Diffie nel 1976, la crittografia asimmetrica è descritta come un crittosistema a due chiavi in cui due parti possono impegnarsi in una comunicazione sicura su un canale di comunicazione non sicuro senza dover condividere una chiave segreta comune.
La chiave pubblica e la chiave privata sono diverse, ma sono matematicamente collegate. Ma la relazione matematica è utilizzabile solo al momento della crittografia e della decrittografia, e altri non possono ricavare la chiave privata anche se conoscono la chiave pubblica.
Gli algoritmi di crittografia asimmetrica sono ampiamente utilizzati nelle criptovalute. Ad esempio, l’indirizzo del portafoglio viene creato a partire da una chiave pubblica e solo chi possiede la chiave privata è in grado di utilizzare il denaro al suo interno.
Alcuni popolari schemi di crittografia asimmetrica includono:
RSA
La chiave pubblica e la chiave privata non sono scelte arbitrariamente. Devono essere generati attraverso procedure specifiche. La chiave pubblica consiste in due numeri interi grandi (e, n) e la chiave privata in due numeri interi grandi (d, n). I tre numeri e, d e n sono correlati in un modo particolare, che richiede un po’ più di matematica:
Supponiamo di utilizzare un codificatore che trasforma tutti i testi in chiaro inglesi in numeri arabi. Ad esempio, “Hey! Hey! Hey!” viene tradotto in “7! 7! 7!” e “bitconnnnnnnnnect” viene tradotto in “83333331”. Ora Alice vuole inviare il messaggio “Ciao” (che viene tradotto in “2”) a Bob.
Il metodo più semplice per Alice di inviare il messaggio a Bob è dire direttamente a Bob “2”. Ma Alice e Bob non vogliono che il loro messaggio sia visto da nessun altro. Fortunatamente, Bob conosce l’RSA. Ha creato una coppia di chiavi pubbliche/private e ha chiesto ad Alice di codificare il messaggio “2” utilizzando la chiave pubblica da lui fornita.
Alice cripta quindi il messaggio “2” utilizzando la chiave pubblica di Bob (5, 14) e il messaggio crittografato diventa “4”, che significa “Errore del server di traduzione”. Anche se un origliatore vedesse il loro messaggio, non avrebbe idea del motivo per cui stanno inviando “4”.
Bob sa che il “4” non è il vero messaggio di Alice. Decifra quindi il messaggio con la sua chiave privata, che non ha comunicato a nessuno (nemmeno ad Alice). La chiave privata è (11, 14) e, applicando alcune procedure di decrittazione, Bob scopre che il vero messaggio è “2”.
Illustriamo in una tabella come funziona il processo sopra descritto:
Bob riceve solo il messaggio criptato “4”. Ma applicando la decrittazione con la sua chiave privata, ha recuperato con successo il vero messaggio “2”.
Quindi, come ottenere la chiave pubblica (5, 14) e la chiave privata (11, 14)?
Questo processo è chiamato generazione di chiavi RSA.
Per coloro che sono interessati, è possibile consultare la crittografia RSA.
Crittografia a curva ellittica (ECC)
L’ECC è un algoritmo di crittografia asimmetrica alternativo all’RSA. Allo stesso modo, consente agli utenti di creare una coppia di chiavi pubbliche/private, ma gli algoritmi/procedure utilizzati sono diversi da quelli RSA.
Ad esempio, per la curva ellittica (vedi sotto), la formula è y2 = x3 + ax + b, dove a e b sono i coefficienti che determinano la forma della curva.
Si parte da un punto specifico della curva. Successivamente, utilizziamo una funzione (chiamata funzione punto) per trovare un nuovo punto. Ripetiamo la funzione punto per percorrere la curva fino a raggiungere l’ultimo punto. Esaminiamo l’algoritmo:
Si tratta di un’ottima funzione trapdoor perché, se si conosce la posizione del punto di partenza (A) e il numero di hop necessari per raggiungere il punto finale (E), è molto facile trovare il punto finale. D’altra parte, se si conoscono solo le posizioni del punto di partenza e del punto di arrivo, è quasi impossibile scoprire quanti salti ci sono voluti per arrivarci. Quindi, in questo esempio, possiamo definire la chiave pubblica e la chiave privata come:
- Chiave pubblica: Punto di partenza A, punto di arrivo E
- Chiave privata: Numero di hops da A a E
Per essere più generali, per una data curva ellittica (come mostrato di seguito), la chiave pubblica è (P, G), dove P è il punto iniziale e G è il punto finale (una speciale curva predefinita). [constant] punto EC), e la chiave privata è k (k è un numero intero e P = k * G).
Algoritmo di scambio di chiavi Diffie-Hellman
L’algoritmo Diffie-Hellman viene utilizzato per stabilire un segreto condiviso che può essere utilizzato per comunicazioni private durante lo scambio di chiavi crittografiche su una rete pubblica.
Tradizionalmente, la comunicazione criptata tra due parti richiedeva lo scambio di chiavi attraverso un canale fisico sicuro, come ad esempio liste di chiavi cartacee trasportate da un corriere fidato. Il metodo di scambio di chiavi Diffie-Hellman consente a due parti che non si conoscono a priori di stabilire congiuntamente una chiave segreta condivisa su un canale non sicuro. Questa chiave può quindi essere utilizzata per crittografare le comunicazioni successive utilizzando un cifrario a chiave simmetrica (come discusso in precedenza).
Per semplificare l’algoritmo, utilizziamo la seguente immagine per presentare la procedura di questa crittografia. Si noti che la lettera P all’inizio è scelta a caso in una curva ellittica e G è una radice primitiva di P. Le chiavi private di a e b sono scelte a caso.
Alice e Bob possono ora utilizzare la stessa chiave segreta (3) per crittografare il messaggio tra loro senza conoscerla in anticipo.
Funzioni Hash
Le funzioni di hash, chiamate anche message digest e one-way encryption, comprimono il testo in chiaro in un testo di lunghezza fissa, chiamato valore hash (o digest). È impossibile recuperare il valore hash nel testo in chiaro.
Una funzione hash deve soddisfare tre proprietà di sicurezza:
1) Resistente alle collisioni
È computazionalmente impossibile trovare due stringhe di input diverse che, applicate alla funzione hash, abbiano lo stesso risultato.
Può essere espresso come segue:
È difficile trovare x e y, dove H(x) = H(y), ma x non è uguale a y.
Si noti che devono esserci collisioni, poiché ci stiamo muovendo da uno spazio di input molto più grande t (qualsiasi stringa) a uno spazio di output fisso (2^256).
Applicazione: L’hash come digest di un messaggio. Se sappiamo che H(x) = H(y), è sicuro che x = y.
Esempio: Per riconoscere un file già visto, ricordate il suo hash. Questo funziona perché l’hash è piccolo.
2) Nascosto
Dato H(x), non è fattibile trovare x. Ciò si spiega con il fatto che, se viene fornita la versione hash di x, non si troverà x.
Applicazione della proprietà di nascondere: Impegno
È l’analogia digitale del prendere un valore (un numero), sigillarlo in una busta e mettere la busta sul tavolo, dove chiunque può vederla, impegnandosi così a mantenere il segreto su quanto contenuto nella busta. In seguito, la busta può essere aperta e il valore estratto, ma è sigillata. Quindi, impegnatevi per un valore e rivelatelo in seguito.
L’algoritmo di impegno fa due cose:
1. Impegnarsi in un messaggio: Restituisce due valori: un impegno e una chiave. L’impegno è lo stesso della busta messa sul tavolo; la chiave è necessaria per aprirla.
2. In seguito, riveliamo a qualcuno il messaggio originale e gli facciamo verificare che corrisponde all’originale, fornendogli l’impegno e la chiave.
3) A misura di puzzle
Se qualcuno vuole puntare a una determinata funzione hash, allora acquisisce un certo valore di y. Se una parte dell’input viene scelta in modo casuale, è difficile trovare un altro valore per indirizzare il valore della funzione hash.
Dato un output y della funzione di hash, se k è scelto da una distribuzione casuale, non è possibile trovare un x, tale che l’hash di k|x(k concatenato con x) sia y: H(k|x) = y.
Funzioni di hash popolari
Digest del messaggio (MD)
La famiglia MD comprende le funzioni hash MD2, MD4, MD5 e MD6. È stata adottata come standard Internet RFC 1321 ed è una funzione hash a 128 bit.
I digest MD5 sono stati ampiamente utilizzati nel mondo del software per garantire l’integrità dei file trasferiti. Ad esempio, i server di file spesso forniscono una somma di controllo MD5 precalcolata per i file, in modo che l’utente possa confrontare la somma di controllo del file scaricato con essa.
Funzione di hashish sicuro (SHA)
La famiglia SHA è composta da quattro algoritmi SHA: SHA-0, SHA-1, SHA-2 e SHA-3. Pur appartenendo alla stessa famiglia, sono strutturalmente diversi.
SHA-0 è stato pubblicato dal National Institute of Standards and Technology (NIST) degli Stati Uniti nel 1993. Aveva pochi punti deboli, ma non divenne molto popolare.
Successivamente, nel 1995, è stato progettato SHA-1 per correggere le presunte debolezze di SHA-0. Le collisioni contro l’algoritmo SHA-1 completo possono essere prodotte utilizzando l’attacco shattered, e la funzione hash dovrebbe essere considerata rotta.
La famiglia SHA-2 comprende altre quattro varianti di SHA: SHA-224, SHA-256, SHA-384 e SHA-512, a seconda del numero di bit del valore di hash. I sistemi SHA-256 e SHA-512 sono comunemente utilizzati. SHA-512 è più sicuro di SHA-256 e spesso è più veloce di SHA-256 su macchine a 64 bit.
Nell’ottobre 2012 il NIST ha scelto l’algoritmo Keccak come nuovo standard SHA-3. Keccak offre molti vantaggi, come prestazioni efficienti e buona resistenza agli attacchi.
RIPEMD
RIPEMD è una famiglia di funzioni di hash crittografiche che comprende RIPEMD, RIPEMD-128 e RIPEMD-160. Esistono anche versioni a 256 e 320 bit di questo algoritmo. Il RIPEMD-160 è una versione migliorata e la più utilizzata della famiglia.
Le ultime parole: Applicazione pratica della crittografia
La crittografia ha una storia sorprendentemente lunga, ma con possibilità di utilizzo future apparentemente infinite. Il processo è alla base delle criptovalute e dei portafogli attuali.
Per maggiori informazioni sui diversi tipi di portafogli di criptovalute, leggere Che cos’è un portafoglio crittografico? Guida per principianti.
Due diligence e ricerca personale
Tutti gli esempi elencati in questo articolo sono solo a scopo informativo. L’utente non deve interpretare tali informazioni o altro materiale come consulenza legale, fiscale, di investimento, finanziaria, di sicurezza informatica o di altro tipo. Nulla di quanto contenuto nel presente documento costituisce una sollecitazione, una raccomandazione, un’approvazione o un’offerta da parte di Crypto.com di investire, acquistare o vendere monete, token o altri asset crittografici. I rendimenti derivanti dall’acquisto e dalla vendita di criptovalute possono essere soggetti a imposte, compresa l’imposta sulle plusvalenze, nella vostra giurisdizione. Le descrizioni dei prodotti o delle caratteristiche di Crypto.com hanno uno scopo puramente illustrativo e non costituiscono un’approvazione, un invito o una sollecitazione.
Le performance passate non sono una garanzia o una previsione di quelle future. Il valore delle criptovalute può aumentare o diminuire e voi potreste perdere tutto o una parte consistente del vostro prezzo di acquisto. Quando valutate un asset crittografico, è essenziale che facciate le vostre ricerche e la vostra due diligence per esprimere il miglior giudizio possibile, poiché ogni acquisto sarà di vostra esclusiva responsabilità.
Condividi con gli amici
Sei pronto per avventurarti nel mondo delle criptovalute?
Ottieni subito la guida per configurare
il tuo account Crypto.com
Cliccando sul pulsante Invia, riconosci di aver letto l' Informativa sulla privacy di Crypto.com dove illustriamo come usiamo e proteggiamo i tuoi dati personali.