SHA-256

Indice dei contenuti

    SHA-256 (Secure Hash Algorithm 256-bit) è una funzione hash crittografica della famiglia SHA-2, progettata dalla NSA e standardizzata dal NIST nel 2001 (FIPS 180-4). Produce un digest di 256 bit (32 byte), tipicamente rappresentato come stringa esadecimale di 64 caratteri. È lo standard di fatto per l’integrità dei dati, le firme digitali, i certificati TLS e il Proof of Work di Bitcoin.

    Costruzione Merkle-Damgård

    SHA-256 è costruito secondo lo schema Merkle-Damgård: il messaggio viene suddiviso in blocchi da 512 bit con padding, e una funzione di compressione ff viene applicata iterativamente partendo da un valore iniziale fisso (IV):

    H0=IVHi=f(Hi1,Mi)SHA-256(m)=HkH_0 = \text{IV} \qquad H_i = f(H_{i-1}, M_i) \qquad \text{SHA-256}(m) = H_k

    La funzione di compressione esegue 64 round di operazioni su parole da 32 bit usando rotazioni, shift, XOR e addizioni modulari, con 64 costanti derivate dalle parti frazionarie delle radici cubiche dei primi 64 numeri primi.

    Proprietà di sicurezza

    SHA-256 soddisfa le tre proprietà fondamentali delle funzioni hash crittografiche: pre-image resistance (22562^{256} operazioni per trovare un input dato il digest), second pre-image resistance (22562^{256}) e collision resistance (21282^{128} per il paradosso del compleanno — irraggiungibile con hardware attuale e futuro prevedibile). Nessuna vulnerabilità pratica è stata trovata in SHA-256, a differenza dei predecessori MD5 (rotto nel 2004) e SHA-1 (rotto con SHAttered nel 2017).

    Vulnerabilità Length Extension

    La costruzione Merkle-Damgård introduce la vulnerabilità length extension attack: conoscendo H(m)H(m) e la lunghezza di mm, è possibile calcolare H(mpaddingm)H(m \| \text{padding} \| m') senza conoscere mm. Per le API MAC questo è pericoloso: non usare SHA256(secret || message) come MAC, ma HMAC-SHA256 che è immune per costruzione.

    Usi principali

    SHA-256 è la primitiva più usata nell’ecosistema crittografico: firma digitale RSA-SHA256 e ECDSA-SHA256 nei certificati TLS, nell’HTTPS e nelle firme di aggiornamenti software; HMAC-SHA256 per l’autenticazione delle API; alberi di Merkle in Bitcoin (ogni blocco contiene SHA256 (SHA256 (header))), in Git (per i blob) e in Certificate Transparency; derivazione di chiavi con HKDF-SHA256 in TLS 1.3.

    La famiglia SHA-2 comprende anche SHA-224, SHA-384 e SHA-512, con output e sicurezza crescenti. SHA-512 è preferibile su architetture a 64 bit dove è più veloce di SHA-256 per dati di grandi dimensioni.

    Ultimo aggiornamento: