1. Overview of Contents (Panoramica dei contenuti)
Questo documento include le specifiche per gli algoritmi hash sicuri (SHAs) del Federal Information Processing Standard (FIPS) degli Stati Uniti d'America (USA), codice per implementare gli SHAs, codice per implementare HMAC (Hashed Message Authentication Code, [RFC2104]) basato sugli SHAs, e codice per implementare HKDF (funzione di derivazione chiavi basata su HMAC, [RFC5869]) basata su HMAC. Le specifiche per HMAC e HKDF non sono incluse poiché appaiono altrove nella serie RFC [RFC2104] [RFC5869].
NOTA: Gran parte del testo seguente è tratto da [SHS], e le affermazioni sulla sicurezza degli algoritmi hash ivi descritti sono fatte dal governo degli Stati Uniti, l'autore di [SHS], non dagli autori elencati di questo documento. Vedere anche [RFC6194] riguardo alla sicurezza di SHA-1.
Il testo seguente specifica gli algoritmi hash sicuri, SHA-224 [RFC3874], SHA-256, SHA-384 e SHA-512, per calcolare una rappresentazione condensata di un messaggio o di un file di dati. (SHA-1 è specificato in [RFC3174].) Quando un messaggio di qualsiasi lunghezza < 2^64 bit (per SHA-224 e SHA-256) o < 2^128 bit (per SHA-384 e SHA-512) viene immesso in uno di questi algoritmi, il risultato è un output chiamato message digest. I message digest variano in lunghezza da 224 a 512 bit, a seconda dell'algoritmo. Gli algoritmi hash sicuri sono tipicamente utilizzati con altri algoritmi crittografici, come algoritmi di firma digitale e codici di autenticazione messaggi con chiave hash, la generazione di numeri casuali [RFC4086], o nelle funzioni di derivazione chiavi.
Gli algoritmi specificati in questo documento sono chiamati sicuri perché è computazionalmente infeasibile (1) trovare un messaggio che corrisponde a un dato message digest, o (2) trovare due messaggi diversi che producono lo stesso message digest. Qualsiasi modifica a un messaggio in transito comporterà, con altissima probabilità, un message digest diverso. Ciò si tradurrà in un fallimento della verifica quando l'algoritmo hash sicuro viene utilizzato con un algoritmo di firma digitale o un algoritmo di autenticazione messaggi con hash a chiave.
Il codice qui fornito supporta stringhe di input di lunghezza arbitraria in bit. Il codice di esempio di SHA-1 da [RFC3174] è stato anche aggiornato per gestire stringhe di input di lunghezza arbitraria in bit. Il permesso è concesso per tutti gli usi, commerciali e non commerciali, di questo codice.
Questo documento rende obsoleto [RFC4634], e le modifiche rispetto a tale RFC sono riassunte nell'appendice.
Gli OID ASN.1 (identificatori di oggetti) per gli algoritmi SHA, tratti da [RFC4055], sono i seguenti:
id-sha1 OBJECT IDENTIFIER ::= { iso(1)
identified-organization(3) oiw(14)
secsig(3) algorithms(2) 26 }
id-sha224 OBJECT IDENTIFIER ::= { joint-iso-itu-t(2)
country(16) us(840) organization(1) gov(101)
csor(3) nistalgorithm(4) hashalgs(2) 4 }
id-sha256 OBJECT IDENTIFIER ::= { joint-iso-itu-t(2)
country(16) us(840) organization(1) gov(101)
csor(3) nistalgorithm(4) hashalgs(2) 1 }
id-sha384 OBJECT IDENTIFIER ::= { joint-iso-itu-t(2)
country(16) us(840) organization(1) gov(101)
csor(3) nistalgorithm(4) hashalgs(2) 2 }
id-sha512 OBJECT IDENTIFIER ::= { joint-iso-itu-t(2)
country(16) us(840) organization(1) gov(101)
csor(3) nistalgorithm(4) hashalgs(2) 3 }
La sezione 2 seguente definisce la terminologia e le funzioni utilizzate come building block per formare questi algoritmi. La sezione 3 descrive le operazioni fondamentali sulle parole da cui sono costruiti questi algoritmi. La sezione 4 descrive come i messaggi vengono riempiti fino a un multiplo intero della dimensione di blocco richiesta e quindi analizzati in blocchi. La sezione 5 definisce le costanti e le funzioni composite utilizzate per specificare gli algoritmi hash. La sezione 6 fornisce la specifica effettiva per le funzioni SHA-224, SHA-256, SHA-384 e SHA-512. La sezione 7 fornisce puntatori alla specifica dei codici di autenticazione messaggi con chiave HMAC e alla specifica di una funzione di derivazione chiavi con estrazione ed espansione basata su HMAC.
La sezione 8 fornisce codice di esempio per gli algoritmi SHA, per gli HMACs basati su SHA e per la funzione di derivazione chiavi con estrazione ed espansione basata su HMAC.