Cos'è hash?

Funzioni di Hash

Una funzione di hash è un algoritmo che prende un input di dati di qualsiasi dimensione (chiamato "messaggio") e produce un output di dimensione fissa (chiamato "hash" o "digest"). Le funzioni di hash sono progettate per essere deterministiche, cioè, lo stesso input produce sempre lo stesso output hash. Sono ampiamente utilizzate in informatica e crittografia per vari scopi, tra cui l'indicizzazione di dati in tabelle hash, il confronto di file, la verifica dell'integrità dei dati e la creazione di firme digitali.

Caratteristiche principali:

  • Determinismo: Per lo stesso input, la funzione di hash produce sempre lo stesso output.
  • Calcolo efficiente: Il calcolo dell'hash deve essere veloce.
  • Resistenza alla preimmagine (one-wayness): È computazionalmente infattibile trovare un input che produca un determinato hash. Questa proprietà è strettamente legata alla sicurezza nelle applicazioni crittografiche.
  • Resistenza alla seconda preimmagine: Dato un input e il suo hash, è computazionalmente infattibile trovare un diverso input che produca lo stesso hash.
  • Resistenza alla collisione: È computazionalmente infattibile trovare due input diversi che producano lo stesso hash. Le collisioni sono inevitabili, dato che lo spazio degli input è molto più grande dello spazio degli output, ma una buona funzione di hash le rende estremamente rare.

Applicazioni:

  • Tabelle Hash: Le funzioni di hash sono usate per mappare chiavi a posizioni in una https://it.wikiwhat.page/kavramlar/Tabella%20Hash, permettendo un accesso efficiente ai dati.
  • Verifica dell'integrità dei dati: Calcolare l'hash di un file e confrontarlo con un hash precedentemente salvato permette di verificare che il file non sia stato alterato. Download di software spesso includono un checksum (un tipo di hash) per questo scopo.
  • Archiviazione di password: Le password non dovrebbero mai essere salvate in chiaro. Invece, vengono hashate e l'hash viene salvato. Quando un utente tenta di accedere, la password inserita viene hashata e confrontata con l'hash salvato. Questo impedisce che le password vengano compromesse in caso di violazione del database. Si utilizzano anche tecniche di https://it.wikiwhat.page/kavramlar/Salt per rafforzare la sicurezza.
  • Firme digitali: Gli hash sono usati per creare firme digitali efficienti. Invece di firmare l'intero documento, si firma l'hash del documento. Questo è molto più veloce, soprattutto per documenti di grandi dimensioni. È una parte fondamentale della https://it.wikiwhat.page/kavramlar/Firma%20Digitale.
  • Blockchain: Le funzioni di hash sono fondamentali per la blockchain, collegando blocchi consecutivi e garantendo l'integrità della catena. Ogni blocco contiene l'hash del blocco precedente, creando una catena immutabile.

Esempi di algoritmi di hash:

  • MD5 (Message Digest Algorithm 5): Ormai considerato obsoleto per motivi di sicurezza, ma ancora usato per checksum non crittografici.
  • SHA-1 (Secure Hash Algorithm 1): Anche questo considerato obsoleto per motivi di sicurezza.
  • SHA-2 (Secure Hash Algorithm 2): Una famiglia di funzioni di hash che include SHA-224, SHA-256, SHA-384 e SHA-512. Considerato sicuro per molte applicazioni.
  • SHA-3 (Secure Hash Algorithm 3): Una diversa famiglia di funzioni di hash rispetto a SHA-2.
  • BLAKE2: Un algoritmo di hash veloce e sicuro.
  • bcrypt: Una funzione di hash progettata specificamente per l'hashing di password. Utilizza un https://it.wikiwhat.page/kavramlar/Salt e un fattore di costo per rallentare il calcolo dell'hash, rendendo più difficile la cracking delle password.
  • argon2: Un'altra funzione di hash progettata per l'hashing di password, con resistenza a diversi tipi di attacchi.

Considerazioni sulla sicurezza:

È fondamentale scegliere un algoritmo di hash appropriato per l'applicazione. Gli algoritmi più vecchi, come MD5 e SHA-1, sono stati dimostrati vulnerabili ad attacchi di collisione e non dovrebbero essere usati per applicazioni crittografiche. SHA-2 e SHA-3 sono generalmente considerati sicuri, ma è importante rimanere aggiornati sulle ultime ricerche e raccomandazioni. Per l'hashing di password, bcrypt e argon2 sono le scelte preferite a causa della loro elevata resistenza agli attacchi di forza bruta. La scelta della funzione di hash dipende sempre dal contesto specifico e dai requisiti di sicurezza.