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')`