Che cos'è l'hash crittografico? [una guida per principianti]
Pubblicato: 2019-08-07Sommario
Che cos'è un hash crittografico?
Hash crittografico spiegato
Proprietà della funzione hash crittografica
Algoritmi di hashing comuni
Hashing nelle criptovalute
Funzioni di hash nell'archiviazione delle password
Incartare
È probabile che nel giorno in cui tu e i tuoi amici avete inventato un codice per scambiarvi messaggi che nessun altro poteva capire. Per lo meno conoscevi persone del genere.
Alcuni ragazzi del genere hanno preso sul serio questo gioco e hanno continuato a trasformarlo in una carriera.
Altri sono diventati maghi, i cosiddetti mentalisti. Con l'aiuto dei codici, usano i loro "poteri mentali" per indovinare carte, numeri, ecc.
Quel semplice gioco per bambini è diventato ciò che è noto come crittografia, hashing e tutte le altre funzioni, che producono codice apparentemente illeggibile da un dato input.
Oggi ci immergeremo nel magico mondo della codifica per vedere cos'è un hash crittografico , il suo funzionamento interno e le sue applicazioni.
Quindi, senza ulteriori indugi, saltiamoci dentro.
Che cos'è un hash crittografico?
La funzione hash crittografica è un tipo di funzione hash utilizzata per scopi di sicurezza . Ha diverse proprietà che lo distinguono da quello non crittografico. Analizziamolo passo dopo passo.
Che cos'è un hash?
L'hashing è il metodo utilizzato per comprimere i dati.
Tuttavia, non è la tipica compressione che tutti conoscono, come un file .zip o .rar.
L'hashing crea un codice per i dati utilizzando un algoritmo hash . Il codice rappresenta una stringa di caratteri, che funge da "impronta digitale" di quel file.
Sappiamo tutti che le impronte digitali sono piccole, ma contengono un'enorme quantità di dati. Sai, cose come i nostri nomi, volti, indirizzi e altre informazioni sensibili. L'hashing è simile: prende un dato di dimensioni arbitrarie e lo trasforma in una sequenza di caratteri relativamente piccola.
Indipendentemente dalle dimensioni dell'input, durante l'hashing si ottiene sempre un output a lunghezza fissa .
Esempi di funzioni hash
Quindi ecco un esempio di come questo accade. Per questa dimostrazione, utilizzeremo l' algoritmo di hash sicuro a 256 bit , noto come SHA-256. È uno degli algoritmi di hashing più comuni e, a quanto pare, è utilizzato anche da Bitcoin .
Messaggio | Hash del messaggio |
Ciao | 3639EFCD08ABB273B1619E82E78C29A7DF02C1051B1820E99FC395DCAA3326B8 |
Benvenuto in TechJury | B7FFC27E0A6F559E1F63A927B6132A42124CC790F9EFD0FCFF4C3B653AA0DF4B |
(Il contenuto di questo intero articolo) | 9247D0E6C7A2A45976DCC3D2393A52658B6DDFC846d8AF5743400EA12FB9DE74 |
Vedi, sebbene i messaggi siano di lunghezze diverse, ottengono tutti un hash di 64 caratteri. Questo è anche noto come valore hash o digest .
Otterrai lo stesso risultato a lunghezza fissa se esegui l'hashing di un libro o anche del contenuto di un'intera libreria. Puoi farlo anche con altri tipi di dati: video, immagini, ecc.
La cosa fantastica degli hash è che otterrai un valore hash completamente diverso anche se apporti la minima modifica . È noto come effetto valanga .
Quindi, se la tua ragazza/fidanzato elimina tutte le foto che hai del tuo ex, ad esempio, l'hash della cartella cambierà. In questo modo, saprai che qualcosa non va senza controllare ogni immagine.
Vediamo un altro esempio di come una funzione hash sia utile in pratica. Per il prossimo esempio, ho eseguito l'hashing del nostro " Che cos'è una VPN? "articolo, e si presenta così:
Poi ho cancellato una parola dall'articolo e l'ho riscritta. Ecco il risultato:
La rimozione di una singola parola ha cambiato completamente i valori hash . Ciò è particolarmente utile se si desidera verificare se sono state apportate modifiche a un file.
È ancora più utile quando hai a che fare con grandi quantità di informazioni. Ad esempio, una blockchain di criptovaluta che memorizza migliaia di transazioni ogni giorno.
Ora approfondiamo e vediamo cosa significa veramente l' hash crittografico .
Hash crittografico spiegato
Quando hai bisogno di sicurezza e privacy, entra in gioco l' hash crittografico . Lo svantaggio dell'hashing crittografico è che di solito è più lento degli altri tipi di hash . Se hai bisogno di hash rapidamente e non hai bisogno di sicurezza di alto livello, l'hashing non crittografico è migliore. Ad esempio, se stai creando un indice di alcuni dati non sensibili.
La principale differenza tra l'hashing non crittografico e quello crittografico è che quest'ultimo è estremamente difficile da violare. Nota che non è impossibile. Tuttavia, l' hashing crittografico rende quasi impossibile craccare un hash.
Perché una funzione hash sia un hash crittografico, deve avere diverse proprietà.
Proprietà della funzione hash crittografica
Se vuoi usare l'hashing per scopi crittografici, ci sono diversi requisiti che la funzione hash deve soddisfare per essere considerata sicura.
Proprietà #1 – Velocità
Se ti piacciono le parole fantasiose, le funzioni di hash crittografiche dovrebbero essere efficienti dal punto di vista computazionale. Ciò significa che la funzione di hashing dovrebbe essere in grado di produrre un hash in una frazione di secondo .
Fonte
Proprietà n. 2 – l'effetto valanga
L'effetto valanga significa che anche un piccolo cambiamento nel messaggio si tradurrà in un grande cambiamento nel valore hash .
Messaggio | Hash del messaggio |
Benvenuto in TechJury | B7FFC27E0A6F559E1F63A927B6132A42124CC790F9EFD0FCFF4C3B653AA0DF4B |
Benvenuto in Techjury | 66251AE6324F670BF988465E49B9CEAA2F8C4E72E1D61336D3794301116C092B |
L'uso di una "j" minuscola nel secondo messaggio modifica completamente il codice hash .
Questo è un semplice esempio di funzione hash , ma rende l'idea. È molto pratico e può mostrare rapidamente se dei dati sono stati modificati.
Proprietà n. 3 – la funzione hash crittografica dovrebbe essere deterministica
Ciò significa che non importa quante volte usi una funzione hash per lo stesso input , otterrai sempre lo stesso output . Questo è ovvio poiché se ottieni hash casuali per lo stesso messaggio, l'intero processo sarebbe privo di significato.
Proprietà n. 4 – Resistenza pre-immagine (funzione unidirezionale)
Ciò significa che è davvero difficile raggiungere l'input tramite l'output.
In parole semplici, non è possibile invertire la funzione hash crittografica per accedere ai dati. Tuttavia, questo non significa che sia impossibile vedere il messaggio.
Ecco l'accordo.
Esistono due metodi per trovare il messaggio con hash.
- Per confrontare l'hash con un elenco esistente di hash, come questo: Dehash.me. Di solito, i criminali informatici hanno i propri database di messaggi tradotti (dehashed).
- Per eseguire un attacco di forza bruta.
Per craccare un hash con la forza bruta, devi scegliere un messaggio, eseguirne l'hash e confrontarlo con l'hash che hai. Scenario migliore: lo ottieni dal primo tentativo. Tuttavia, le possibilità che ciò accada sono estremamente ridotte.
Scenario peggiore: lo trovi dal tuo ultimo tentativo. Ciò significa che devi eseguire l'hashing di tutti i messaggi possibili e confrontarli con quello che hai. Il numero è diverso, a seconda dell'algoritmo di hash .
Per fare un esempio, usiamo SHA-256. In tal caso, dovresti trovare 2 256 -1 valori hash prima. Sicuro di dire che non può essere fatto in diverse vite e lasciarlo così.
Ora.
La proprietà di resistenza pre-immagine dell'hash crittografico gioca un ruolo significativo nel dibattito tra hashing e crittografia .
Vedi: puoi decrittografare un messaggio crittografato, ma non puoi fare lo stesso per un hash crittografico .
Puoi pensare all'hashish come a un frullato. Non puoi estrarre il messaggio da un hashish allo stesso modo in cui non puoi estrarre la banana e il latte da un frullato.
La crittografia, d'altra parte, è più simile a una cassaforte. Protegge i tuoi oggetti di valore, ma c'è sempre una chiave che lo apre.
Proprietà n. 5 – Resistenza alla collisione
Ciò significa che due messaggi diversi non dovrebbero essere in grado di produrre lo stesso valore hash . Da un punto di vista matematico, questo è comunque impossibile.
Sai già che i valori hash hanno una lunghezza fissa. Ciò significa che ci sono combinazioni di output limitate . Gli ingressi, invece, sono un numero infinito . Quindi, in teoria, c'è la possibilità che due messaggi diversi possano produrre gli stessi hash .
Tuttavia, la funzione di hash in crittografia rende praticamente trascurabili le probabilità di una collisione di hash .
Aspetto.
Tutte queste proprietà garantiscono la sicurezza e l'usabilità di un hash crittografico . Quindi è il momento di incontrare le diverse funzioni di hash crittografico.
Algoritmi di hashing comuni
Esistono diverse classi (famiglie) di algoritmi hash. La differenza fondamentale tra loro è il valore hash che ciascuno produce e le sue proprietà di sicurezza.
Ecco quelli più comunemente usati:
Algoritmo di sintesi dei messaggi (MD)
MD5 era la funzione di hash scelta da molte aziende, ma è stata interrotta nel 2004. Un algoritmo di hash è considerato rotto quando si verifica una collisione riuscita o un attacco pre-immagine contro di esso. Tuttavia, molti siti Web continuano a utilizzare la funzione di hashing MD5 per la verifica dei file.
Ad esempio, quando scarichi un file, puoi confrontare il suo hash con quello sul sito per assicurarti che nessuno lo abbia manomesso.
La famiglia MD è composta da MD2, MD3, MD4, MD5 (tutti questi sono rotti) e MD6 (che non è così popolare).
Ecco l' esempio della funzione hash di MD5.
Messaggio | Hash MD5 |
Giuria tecnica | FECE553512085FF6B5E213C8EFF9F30D |
MD5 produce un valore hash a 128 bit con una lunghezza di 32 caratteri.
A causa dei suoi difetti, l'algoritmo Message Digest non è più considerato una funzione hash crittografica .
Algoritmo di hash sicuro (SHA)
La più grande famiglia di funzioni hash crittografiche è composta da quattro classi:
- SHA-0
- SHA-1
- SHA-2
- SHA-3
SHA-0 aveva molti difetti e non è stato ampiamente utilizzato. SHA-1 ha provato a ripararli, ma si è rotto nel 2005.
SHA-2 e le sue sottoclassi sono comunemente usate oggi fino a quando SHA-3 non si dimostra una funzione ancora più sicura.
La famiglia SHA-2 è composta da quattro membri: SHA-224, SHA-256, SHA-384 e SHA-512, che differiscono per il numero di bit dei loro valori hash . Finora, non c'è stato un attacco riuscito all'algoritmo di hash crittografico SHA-2 .
Ecco alcuni esempi di funzioni hash che utilizzano la classe SHA-2.
Messaggio | Giuria tecnica |
SHA-256 | FF3E4985DAFF59392EAE60DEC66EC823CAF9575B81903729053A999B9B2C708E |
SHA-384 | 77653BC173A561E3378373F64E447FB3AEDC691F387BB599656E6AB63B9C5D34 523C298C59C94802A478F8C3F36E9CDF |
SHA-512 | C975F1074E969FAEA76C15084881F7694DE4D542F9E4DF934AFA52470952A362 25F7ED63D023AB05746DDAFDFED96D57A7AF5344EB91589A09952D102DD3AB04 |
RACE Integrity Primitives Evaluation Message Digest (RIPEMD)
Inizialmente, RIPEMD è stato creato per un progetto dell'Unione Europea chiamato RIPE. Ci sono cinque funzioni hash nella famiglia RIPEMD.
- RIPEMD
- RIPEMD-128
- RIPEMD-160
- RIPEMD-256
- RIPEMD-320
Nel 2004 si è verificata una collisione nella funzione hash RIPEMD originale . Ecco perché non è più in uso. Attualmente, RIPEMD-160 è il più comune. Ecco come appare:
Messaggio | RIPEMD-160 digest |
Giuria tecnica | ca25dc64fb00c8becb21eddf50805fbc106eed00 |
idromassaggio
Questo nome di funzione di hash crittografico non ha nulla a che fare con il produttore degli elettrodomestici. La galassia Whirlpool ha ispirato il nome dell'algoritmo.
La cosa interessante dell'algoritmo di hashing Whirlpool è che uno dei suoi creatori è Vincent Rijmen, il co-creatore di AES, Advanced Encryption Standard .
Whirlpool è una funzione hash a 512 bit e il suo digest rappresenta una stringa di 128 caratteri.
Questo è un esempio della funzione hash crittografica .
Messaggio | Whirlpool hash |
Giuria tecnica | 2E9A775FA4450549FCB6F6CDC4761865715D46FF8003E93CC614EF7C9E3D42A93 D5A663B4E48674C5155417D686D81ABDBC12FB32A1B650C5E44F24E80156E7D |
Questi sono gli algoritmi di hashing più comuni oggi.
Quindi, ora che conosci le basi dell'hashing, vediamo le sue applicazioni nella vita reale.
Hashing nelle criptovalute
Abbiamo già spiegato cos'è Bitcoin e come funziona la blockchain , quindi andremo dritti all'hashing.
La funzione di hash crittografico è essenziale per le criptovalute poiché garantisce una delle caratteristiche più importanti della blockchain: l' immutabilità .
Poiché le blockchain di criptovaluta gestiscono un gran numero di transazioni, usano l'hashing. Questo è un approccio molto più pratico e sicuro rispetto a mantenere ogni record di ogni singola transazione nel registro.
Nel caso di Bitcoin, i minatori eseguono una serie di funzioni SHA-256 per creare l'hash di un blocco. Quindi quest'ultimo riceve un timestamp. Una volta che i nodi raggiungono il consenso, il blocco viene aggiunto alla blockchain. Non solo il blocco ha il proprio hash , ma contiene anche l' hash del precedente , concatenandoli così tutti insieme.
A causa dell'effetto valanga non sono possibili tentativi di manomissione di un blocco. Nel caso in cui qualcuno tenti di modificare una transazione in un blocco, deve modificare anche tutte le successive. Un'operazione del genere richiederebbe così tanta potenza di calcolo e tempo, che è praticamente impossibile .
Ciò rende l'hashing una caratteristica cruciale nella sicurezza della blockchain.
Ora.
Diverse criptovalute utilizzano algoritmi di hashing diversi nella loro blockchain.
Bitcoin, ad esempio, utilizza SHA-256 per la sua prova di lavoro. Tuttavia, Bitcoin utilizza due algoritmi di hashing per generare un indirizzo pubblico (chiave): SHA-256 e RIPEMD-160. Questo è stato fatto da Satoshi Nakamoto per fornire una migliore protezione per le chiavi pubbliche e per ridurre le probabilità di collisione.
Ethereum, d'altra parte, utilizza l' algoritmo hash Keccak-256 , che è il fondamento di SHA-3.
Al momento in cui scriviamo, non c'è stato un attacco riuscito a nessuno di questi algoritmi.
Anche se non sei nel mercato delle criptovalute, utilizzi comunque le funzioni di hashing ogni giorno.
Com'è quello?
Funzioni di hash nell'archiviazione delle password
Esistono quattro tecniche principali che le aziende utilizzano per archiviare le nostre password: in testo semplice, con crittografia e con una funzione di hash . L'ultimo metodo è una combinazione di due o più di queste tecniche.
Vediamo quali sono le differenze.
Memorizzazione di password in testo normale: un grande no
La memorizzazione delle password in testo semplice è, beh... esattamente come sembra.
Come questo:
Nome utente: John Smith
Password: johnsmith93
Il database dell'azienda contiene le stesse informazioni – utente: John Smith, pass: johnsmith93.
Questo dovrebbe essere evitato se le aziende apprezzano la privacy dei loro clienti. (Speriamo che qualcuno di Facebook lo legga.)
Lo svantaggio di questo metodo è ovvio: se i criminali informatici si infiltrano nel database dell'azienda, possono vedere tutti i nomi utente e le password.
Memorizzazione delle password utilizzando la crittografia
La crittografia è un modo migliore per proteggere le password. Trasforma la tua password in una sequenza illeggibile di numeri e lettere.
Ecco come funziona:
Nome utente: John Smith
Password: johnsmith93
Quando l'azienda utilizza la crittografia per proteggere la tua password, la voce del database ha questo aspetto:
Nome utente: John Smith
Password: I8Zdy1QBthsk2ie1HHsl+66bf20fDDcdCtXURqa07iQ=
Se un criminale informatico ottiene questa password, è inutile: non può usarla per violare l'account. Tuttavia, può, in teoria, essere decifrato.
Nel caso in cui un malintenzionato ottenga la tua password crittografata, può decrittografarla utilizzando vari strumenti. Tuttavia, richiede più tempo e richiede maggiori capacità informatiche rispetto al semplice ottenere una password di testo normale.
Fortunatamente, esistono algoritmi di crittografia abbastanza potenti da essere un metodo sicuro per proteggere le password.
Memorizzazione delle password tramite un algoritmo di hashing
Hash e crittografia vengono spesso scambiati per la stessa cosa e usati in modo intercambiabile. Eppure, c'è una differenza cruciale tra loro.
La funzione hash, come la crittografia, trasforma anche la tua password in una sequenza illeggibile di numeri e lettere. La differenza cruciale è che funziona solo in un modo . A differenza della decrittazione, non è possibile invertire il processo di hashing.Detto questo, se un criminale informatico ottiene l'hash della tua password, di solito non può farci nulla.
Ci sono molte funzioni hash disponibili, ma usiamo SHA-256 per il nostro esempio.
Nome utente: John Smith
Password (con hash): e7c95991f28e529b4d3b37611e5f3b6a6a43600ce148af0c42d3d38c06365af5
Ora.
Sebbene l'hash non possa essere ripristinato al suo testo originale, esistono grandi elenchi di messaggi e relativi hash. Sfortunatamente, gli attori malintenzionati possono ancora hackerare la tua password se ottengono il suo valore hash. Per fortuna, se usi una password complessa, le possibilità che ciò accada sono incredibilmente ridotte. Useremo un esempio diverso in questo caso.
Esempi di funzioni hash nell'archiviazione delle password
Supponiamo che la tua password sia 123456. (Non usarla mai, crea invece una password complessa .)
Ecco il suo hash se usiamo l' algoritmo di hashing SHA-256 :
8d969eef6ecad3c29a3a629280e686cf0c3f5d5a86aff3ca12020c923adc6c92
Sfortunatamente, questo hash si configura in un elenco di messaggi cancellati.
Il problema è ancora più grande perché molte persone usano la stessa password. Quindi, se un database viene violato e i criminali informatici trovano l'hash di una password, possono utilizzarlo per ogni utente che utilizza la stessa password. Per non parlare del fatto che molte persone usano la stessa password per account diversi, il che li tirerà fuori dalla padella e nel fuoco.
Tuttavia, puoi fare diverse cose per evitare che ciò accada.
Innanzitutto, usa una password complessa e crea password diverse per account diversi.
L'altra cosa che puoi fare è aggiungere " sale " all'hash. Un hash salato aggiunge un valore aggiuntivo alla tua password e produce un hash della password diverso per ogni input.
Ad esempio, ogni utente che utilizza la password 123456 e “sali” otterrà un hash diverso.
Ogni esempio è un hash salato di 123456.
$2y$10$pIxpMnhlQmt1t.EUYK1G/eHkb7Roo/XhPybKyFZSAqk/50BW10a8.
$2y$10$sCLqOpeA4R.St/8IaUWF9.m01MM4YbY.qTwbCY3.K5z.cd5lwxL6W
Quindi, qual è il modo migliore in cui un'azienda può proteggere la tua password?
È una combinazione di tutte le tecniche sopra menzionate, come fa Dropbox, ad esempio.
Fonte: Dropbox
Quindi è così che affronti l'hashing ogni giorno, senza nemmeno rendertene conto.
Incartare
Per riassumere, l'hashing ha molti vantaggi.
Puoi eseguire l'hashing di qualsiasi tipo di dati, sia per l'indicizzazione che per il controllo delle alterazioni. Ciò rende l'hashing utile per contratti, download, archiviazione di password, ecc.
Anche le criptovalute si evolvono. Non solo quelli che abbiamo ora, ma i nuovi giocatori si stanno preparando per unirsi al divertimento. Anche Facebook rilascerà Libra , quindi siamo tenuti a fare ancora più uso dell'hashing.
Forse Facebook aprirà la strada ad altre grandi aziende per rilasciare le proprie criptovalute - e perché non nuovi meccanismi di hashing? Solo il tempo lo dirà.
Arrivederci alla prossima!
FAQ
Puoi pensare al valore hash come all'impronta digitale di qualsiasi informazione: un file, una cartella, un blocco di transazioni, ecc. Una volta applicata una funzione di hashing a qualsiasi dato, quest'ultimo riceve un valore hash.
Consiste in una stringa di caratteri di lunghezza fissa, come questa:
Informazione | Valore hash |
Ciao | D44426ACA8AE0A69CDBC4021C64FA5AD68CA32FE |
La crittografia è il metodo che protegge i dati utilizzando codici (come hashing e crittografia).
Gli sviluppatori applicano la crittografia ogni volta che è necessaria una maggiore sicurezza e privacy. Trasforma il testo normale (o altri dati) in una stringa illeggibile di caratteri casuali. Ciò garantisce la sicurezza delle informazioni da occhi indiscreti.
La funzione hash è l'operazione che trasforma dati di dimensioni casuali in una corrispondente stringa di caratteri di lunghezza fissa , nota anche come valore hash .
Esistono due classi di funzioni hash: funzione hash non crittografica e crittografica . Quest'ultimo viene utilizzato nelle criptovalute e nell'archiviazione delle password e fornisce una maggiore sicurezza.