Secure Hash Algorithm

famiglia di cinque diverse funzioni crittografiche di hash

Con il termine SHA si indica una famiglia di cinque diverse funzioni crittografiche di hash sviluppate a partire dal 1993 dalla National Security Agency (NSA) e pubblicate dal NIST come standard federale dal governo degli USA. La sigla SHA sta per Secure Hash Algorithm.

Come ogni algoritmo di hash, l'SHA produce un message digest, o "impronta del messaggio", di lunghezza fissa partendo da un messaggio di lunghezza variabile. La sicurezza di un algoritmo di hash risiede nel fatto che la funzione di non sia reversibile (non sia cioè possibile risalire al messaggio originale conoscendo solo questo dato) e che 2 messaggi diversi non devono mai fornire lo stesso digest. Gli algoritmi della famiglia sono denominati SHA-1, SHA-224, SHA-256, SHA-384 e SHA-512: le ultime 4 varianti sono spesso indicate genericamente come SHA-2, per distinguerle dal primo. Quest'ultimo produce un digest del messaggio di soli 160 bit, mentre gli altri producono digest di lunghezza in bit pari al numero indicato nella loro sigla (SHA-256 produce un digest di 256 bit). L'SHA-1 è il più diffuso algoritmo della famiglia SHA ed è utilizzato in numerose applicazioni e protocolli.

La sicurezza di SHA-1 è stata in parte compromessa dai crittoanalisti. [1] Sebbene non siano ancora noti attacchi alle varianti SHA-2, esse hanno un algoritmo simile a quello di SHA-1 per cui sono in atto sforzi per sviluppare algoritmi di hashing alternativi e migliorati.[2][3] Un concorso aperto per la realizzazione di una nuova funzione SHA-3 è stato formalmente annunciato nel Federal Register il 2 novembre 2007.[4] "Il NIST sta avviando un concorso per lo sviluppo di uno o più algoritmi di hashing aggiuntivi attraverso una competizione pubblica, come per il processo di sviluppo dell'AES."[5] Le iscrizioni si concluderanno il 31 ottobre 2008 e la proclamazione del vincitore e la pubblicazione del nuovo standard sono previste per il 2012.

SHA-0 e SHA-1

 
Un'iterazione all'interno della funzione di compressione di SHA-1. A, B, C, D ed E sono parole di stato a 32 bit; F è una funzione non lineare che varia;  n denota una rotazione del bit di sinistra di n posti; n varia per ogni operazione.   denota l'addizione modulo 232. Kt è una costante.

La specifica originale dell'algoritmo fu pubblicata nel 1993 come Secure Hash Standard, FIPS PUB 180, dal NIST. Ci si riferisce spesso a questa versione come SHA-0 per distinguerla dalle successive versioni. Fu ritirata dall'NSA breve tempo dopo la pubblicazione e fu soppiantata da una versione rivista, pubblicata nel 1995 (FIPS PUB 180-1) e solitamente nota come SHA-1. L'SHA-1 differisce dall'SHA-0 unicamente per una sola rotazione di bit nel processo di preparazione del messaggio della sua funzione di compressione ad una via; ciò fu fatto, secondo l'NSA, per correggere un difetto nell'algoritmo originale, il quale riduceva la sicurezza crittografica di SHA-0. Ad ogni modo, l'NSA non fornì nessuna ulteriore spiegazione chiarificante. Sono state in seguito riportate debolezze sia nel codice dell'SHA-0 sia in quello dell'SHA-1. L'SHA-1 appare offrire maggiore resistenza agli attacchi, a supporto dell'asserzione dell'NSA che il cambiamento aumentò la sicurezza.

L'SHA-1 (così come l'SHA-0) produce un digest di 160 bit da un messaggio con una lunghezza massima di 264-1 bit ed è basato su principi simili a quelli usati da Ronald L. Rivest del MIT nel design degli algoritmi MD4 e MD5.

L'insieme SHA-2

 
Una iterazione della funzione di compressione negli algoritmi della famiglia SHA-2.

Nel 2001 il NIST pubblicò quattro funzioni di hash addizionali facenti parte della famiglia SHA, ognuna con un digest più lungo di quello originale, collettivamente denominate SHA-2 (anche se questo termine non è mai stato ufficialmente standardizzato). Queste varianti sono note, come detto, con la lunghezza in bit del digest generato a seguire la sigla ufficiale dell'hash: SHA-224, SHA-256, 'SHA-384 e SHA-512, con, rispettivamente, hash di 224, 256, 384 e 512 bit. Da notare che gli ultimi tre algoritmi furono ufficializzati come standard nel 2002 mentre l'SHA-224 fu introdotto nel febbraio del 2004: quest'ultimo presenta un hash di lunghezza identica a quella di 2 chiavi del Triple DES.

Tutte queste varianti sono brevettate dal governo americano ma rilasciate con licenza libera.[6].

Gli algoritmi SHA-256 e SHA-512 lavorano, rispettivamente, con word di 32 e 64 bit rispettivamente: utilizzano un numero differente di rotazioni e di costanti addizionali ma la loro struttura è sostanzialmente identica. Gli algoritmi SHA-224 e SHA-384 sono semplicemente versioni troncate dei precedenti due, con hash calcolati con differenti valori iniziali.

Gli algoritmi SHA-2 non hanno ricevuto, a differenza dell'SHA-1, molta attenzione dalla comunità dei crittoanalisti per cui la loro sicurezza in campo crittografico non è stata del tutto provata. Gilbert e Handschuh (2003) hanno studiato queste nuove varianti e non hanno trovato vulnerabilità [7].


SHA-3 (in sviluppo)

La competizione che porterà al rilascio del nuovo standard SHA-3 è stata ufficialmente lancianta il 2 novembre 2007[8]. Gli algoritmi potranno essere inviati fino al 31 ottobre 2008 e porteranno alla selezione dell'algoritmo nel 2012.

Comparazione delle funzioni SHA

Nella tabella sottostante sono riportate le caratteristiche principali degli algoritmi della famiglia SHA (Per Stato interno si intende la somma interna dopo ogni compressione di un blocco di dati).


Algoritmo e
variante
Dimensione dell'output (bit) Dimensione dello stato interno (bit) Dimensione del blocco (bit) Max. dimensione del messaggio (bit) Dimensione della word (bit) Passaggi Operazioni Collisioni trovate
SHA-0 160 160 512 264 − 1 32 80 +,and,or,xor,rotl
SHA-1 160 160 512 264 − 1 32 80 +,and,or,xor,rotl Attacco 263
SHA-2 SHA-256/224 256/224 256 512 264 − 1 32 64 +,and,or,xor,shr,rotr Nessuna
SHA-512/384 512/384 512 1024 2128 − 1 64 80 +,and,or,xor,shr,rotr Nessuna


Applicazioni

L'SHA-1 è il più utilizzato algoritmo della famiglia SHA. Costituisce la base di numerose applicazioni e protocolli, inclusi il TLS ed SSL, il PGP, l'SSH, l'S/MIME e l'IPsec. L'SHA-1 è anche utilizzato in sistemi di controllo versione, come il Git, per identificare la revisione dei software e come somma di controllo per verificare l'integrità di file di grosse dimensioni in cataloghi online.

Gli algoritmi SHA sono anche utilizzati negli algoritmi per la firma digitale dei documenti, quali ad esempio l'HMAC, e sono stati presi come base per i cifrari a blocchi SHACAL.

Voci correlate

Note

Collegamenti esterni

Siti Internet per il calcolo degli hash

Standard: SHA-0, SHA-1, SHA-2, SHA-3...

Crittoanalisi

Implementazioni

  • The OpenSSL Project – The widely used OpenSSL crypto library includes free, open-source implementations of SHA-1, SHA-224, SHA-256, SHA-384, and SHA-512
  • Crypto++ Crypto++, libreria libera in C++ con schemi crittografici
  • Bouncy Castle The Bouncy Castle Library is a free Java and C# class library that contains implementations of the SHA-1, SHA-224, SHA-256, SHA-384 and SHA-512 algorithms as well as other algorithms like Whirlpool, Tiger, RIPEMD, GOST-3411, MD2, MD4 and MD5.

Tutorial e codici d'esempio

Vettori di test

The NESSIE project test vectors for SHA-1, SHA-256, SHA-384, and SHA-512.

Database di reverse lookup per SHA-1

  • HASHsearch - decodifica gli hash MD5 e SHA1 (480 000+ stringhe)

-->

  Portale Matematica: accedi alle voci di Wikipedia che trattano di matematica