Funzioni hash

L’integrità senza autenticazione viene utilizzata per rilevare errori nella comunicazione. Garantire l’integrità crittografica significa che un attaccante non può trovare nessuna soluzione senza l’utilizzo di una chiave!

Funzione hash Mappa un dato di una qualsiasi lunghezza in una stringa di lunghezza fissa.

Funzioni hash crittografiche

Hash resistenze alle collisioni, che quindi non può generare lo stesso output da due diversi input. Le funzioni crittografiche generano output non prevedibile, tramite un approccio simil pseudo random, e la dimensione n del digest è scelta in modo da rendere molto improbabile che due input differenti generino lo stesso output, quindi

Oltre a garantire l’integrità, le funzioni hash crittografiche hanno molte applicazioni, tra cui:

  • funzioni pseudo random, come ad esempion MD5, che è stata deprecata perchè ormai non più sicura come schema crittografico, ma comunque buona per altro
  • alla base di alcuni schemi crittografici, come ad esempio alcune funzioni MAC

Le funzioni hash danno una sicurezza agli utenti sui siti di mirroring.

Collision resistance

Sicurezza

La sicurezza di una funzione has è determinata da n, che è la lunghezza del digest, e quindi possono essere generati risultati. L’attacco più efficiente per una funzione hash è il birthday attack (probabilistico), che viene usato per trovare due dati che generano lo stesso digest. A questo tipo di attacco bastano operazioni, quindi il vero livello di sicurezza di una funzione hash è .

title: Esempio
Un digesti di 160 bit ha un livello di sicurezza 80 bit.

Le funzioni

MD5

Deprecato, ma ancora utilizzato per alcune cose al di fuori della crittografia

SHA1

Deprecato perchè è stata trovata una collisione. Il digest è di 160bit, quindi ha una sicurezza effettiva di 80bit.

SHA2

Basato su SHA1, e reso più forte da alcune patch. È tutt’ora utilizzato. Ha diverse versioni di dimensioni differenti: - SHA224 - SHA256 - SHA384 - SHA512

SHA3

Costruito su primitive differenti a SHA1 e SHA2, quindi dovrebbe essere ancora più sicuro. Anche questo protocollo ha diverse dimensioni: - SHA3-224 - SHA3-256 - SHA3-384 - SHA3-512

title: Attenzione!
Bisogna fare attenzione a concatenare le stringhe!
`H('builtin' || 'security') == H('built' || 'insecurity') == H('builtinsecurity')`
 
Per farlo in modo corretto, si può inserire una virgola, oppure aggiungere la lunghezza della prima parola all'inizio.
 
`H('builtin,security')`
`H('7builtinsecurity')`