PRT96919
Aggiornato il: 21-08-2023 11:23
Un hash crittografico è una funzione matematica che prende in input dati di qualsiasi lunghezza e restituisce una stringa di lunghezza fissa, solitamente in formato esadecimale. L’obiettivo principale di un hash crittografico è quello di convertire dati in ingresso in un formato che sia difficile da invertire o decriptare, creando quindi un “digest” o “impronta digitale” unica dei dati originali.
Caratteristiche degli hash crittografici
- Unidirezionalità: È molto difficile e teoricamente impraticabile risalire ai dati originali a partire dall’hash. Questo rende gli hash utili per archiviare in modo sicuro le password (evitare di salvarle in chiaro) o verificare l’integrità dei dati.
- Riproducibilità: Data la stessa input, un hash crittografico produce sempre lo stesso output.
- Variazione minima: Una piccola modifica nei dati di input dovrebbe produrre un hash completamente diverso. Questa proprietà è fondamentale per rilevare anche le minime alterazioni nei dati.
- Avalanching: Un piccolo cambiamento nei dati di input dovrebbe causare un cambiamento significativo nell’hash risultante.
- Efficienza: Calcolare l’hash deve essere computazionalmente veloce, ma invertire il processo (dall’hash ai dati originali) dovrebbe essere estremamente difficile.
Uso degli hash nella pratica
Gli hash crittografici sono ampiamente utilizzati in vari contesti, tra cui:
- Verifica delle password: Invece di archiviare le password in chiaro, i sistemi spesso archiviano gli hash delle password. Quando un utente cerca di accedere, l’hash della password inserita viene confrontato con l’hash memorizzato.
- Integrità dei dati: Gli hash crittografici vengono utilizzati per verificare che i dati trasmessi o archiviati non siano stati modificati in modo non autorizzato.
- Firme digitali: In crittografia a chiave pubblica, le firme digitali sono spesso create mediante hash crittografici per garantire l’autenticità e l’integrità di un messaggio o di un documento.
- Blockchain: Gli hash crittografici sono essenziali per la creazione di blocchi all’interno di una blockchain. Ogni blocco contiene l’hash del blocco precedente, creando una struttura che collega i blocchi in modo sicuro e immutabile.
- Generazione di numeri casuali: Gli hash crittografici possono essere utilizzati per generare numeri pseudo-casuali a partire da un seed.
È importante notare che sebbene gli hash crittografici siano progettati per essere resistenti all’inversione, la sicurezza dipende dalla scelta di un buon algoritmo hash e dall’utilizzo corretto nel contesto appropriato. Con l’aumento della potenza di calcolo, gli algoritmi hash più vecchi possono diventare vulnerabili, quindi è necessario utilizzare algoritmi aggiornati e considerare regolarmente l’adozione di standard di sicurezza più recenti.
Hash di uso comune: MD5, SHA 256, bcrypt
Ecco alcuni esempi di algoritmi di hash comunemente utilizzati nella pratica, insieme a come utilizzarli in PHP e Python:
- MD5 (Message Digest Algorithm 5):
- Descrizione: MD5 è uno degli algoritmi di hash più vecchi e ampiamente noti. Tuttavia, a causa delle vulnerabilità scoperte nel corso degli anni, non è più considerato sicuro per scopi crittografici.
- Uso in PHP:
php
-
$data = "Salve, questa è una prova.";
$hash = md5($data);
echo $hash;
- Uso in Python (utilizzando il modulo
hashlib
):python -
-
import hashlib
data = b"Hello, world!"
hash_object = hashlib.md5(data)
hash_hex = hash_object.hexdigest()
print(hash_hex)
-
- SHA-256 (Secure Hash Algorithm 256-bit):
- Descrizione: SHA-256 è parte della famiglia di algoritmi Secure Hash Algorithm (SHA-2). È ampiamente utilizzato per scopi crittografici e per garantire l’integrità dei dati.
- Uso in PHP:
php
-
$data = "Hello, world!";
$hash = hash("sha256", $data);
echo $hash;
- Uso in Python (utilizzando il modulo
hashlib
):python -
-
import hashlib
data = b"Ciao mondo!"
hash_object = hashlib.sha256(data)
hash_hex = hash_object.hexdigest()
# conversione in stringa esadecimaleprint(hash_hex)
-
- bcrypt:
- Descrizione: bcrypt è un algoritmo di hash appositamente progettato per l’hashing delle password. Include meccanismi di “salatura” e iterazioni multiple per aumentare la sicurezza.
- Uso in PHP (utilizzando il modulo
password_hash
):php
-
$password = "mypassword";
$hashed_password = password_hash($password, PASSWORD_BCRYPT);
echo $hashed_password;
- Uso in Python (utilizzando il modulo
bcrypt
):python
-
-
import bcrypt
password = b"mypassword"
hashed_password = bcrypt.hashpw(password, bcrypt.gensalt())
print(hashed_password)
-
Questi sono solo alcuni esempi di algoritmi di hash e dei loro utilizzi in PHP e Python. È importante scegliere l’algoritmo giusto in base alle esigenze di sicurezza e agli standard attuali. Inoltre, quando si tratta di hash di password, è consigliabile utilizzare librerie e funzioni specifiche progettate per la gestione sicura delle password, come password_hash
in PHP e il modulo bcrypt
in Python.
Immagine di copertina: un hash re-immaginato da Midjourney

Ingegnere informatico per passione, consulente per necessità, docente di informatica; ho creato Trovalost.it e ho scritto quasi tutti i suoi contenuti. Credits immagini: pexels.com, pixabay.com, wikipedia.org, Midjourney, StarryAI, se non diversamente specificato. Questo sito non contiene necessariamente suggerimenti, pareri o endorsement da parte del proprietario del progetto e/o espressi a titolo personale. Per contatti clicca qui