Per vedere la forza dei metodi di hash stessi, si prega di dare un'occhiata allo keylength.com website. Vedrai che anche SHA-256 ha un margine di sicurezza abbastanza ampio.
Inoltre, l'algoritmo HMAC è praticamente ignaro degli attacchi all'algoritmo di hash sottostante. HMAC è impermeabile al problema del compleanno, che dimezza la forza chiave della metà dell'output dell'hash. Non si applica semplicemente perché l'avversario non ha la chiave segreta e quindi non può provare a creare collisioni. Questo è il motivo per cui anche HMAC-SHA1 è abbastanza sicuro.
Ora la velocità dell'hash dipende dall'ambiente di esecuzione. Ma in generale si possono fare le seguenti ipotesi:
- SHA-1 è generalmente più veloce di qualsiasi implementazione SHA-2 sulla stessa piattaforma;
- SHA-512 è più veloce di SHA-256 su macchine a 64 bit (poiché utilizzano l'aritmetica a 64 bit internamente);
- SHA-256 è più veloce di SHA-512 su macchine a 8, 16 e 32 bit.
Utilizzare SHA-1 se si prevedono problemi di compatibilità. Altrimenti si può anche andare per SHA-512 (e tagliare il risultato a un numero ragionevole di bit). Lo stato interno e la maggiore sicurezza di SHA-512 potrebbero essere un leggero vantaggio. Ho riscontrato problemi con i clienti che non accettavano alcuna forma di SHA-1 a causa di problemi generali dell'algoritmo; in altre parole, il fatto che non sia sicuro in generale potrebbe ostacolare l'accettazione.
noti che SHA-384 e meno noti SHA-512/256 e SHA-512/224 metodi hash sono una forma particolare di SHA-512, tagliato a 384, 256 e 224 bit in uscita. Quindi la velocità di questi algoritmi è identica. L'unica differenza, a parte la dimensione dell'output, è che queste forme speciali utilizzano internamente diversi valori iniziali. In caso contrario, il taglio SHA-512 a 384 bit è sicuro e veloce come SHA-512/384. Dovresti comunque usare SHA-384 per rimanere compatibile.
La dimensione della chiave di input non dipende dalla funzione di hash sottostante. La chiave è prima mascherata in XOR e quindi sottoposta a hash dalla funzione di hash sottostante; gli algoritmi di hash possono prendere quantità di dati virtualmente illimitate come input.
Si consiglia di utilizzare una dimensione della chiave che è almeno la dimensione del metodo hash utilizzato, altrimenti si potrebbe degradare il margine di sicurezza fornito dal metodo HMAC. Potrebbero esserci delle penalità minori per le prestazioni se la dimensione della chiave impone all'hash dell'algoritmo di hash più blocchi.
Si potrebbe anche utilizzare lo standard (imminente) SHA-3 nel senso che sarebbe sicuro. Al momento HMAC-SHA-3 non ha molto senso. HMAC è effettivamente eccessivo per SHA-3 (Keccak); SHA-3 dovrebbe essere sicuro anche senza il costrutto HMAC. [Modifica] ormai KMAC è stato standardizzato come costrutto MAC per SHA-3.
Oltre a ciò, i costrutti SHA-2 hanno - in qualche modo sorprendentemente - mostrato una buona resistenza contro l'analisi della cripta durante la competizione SHA-3. Quindi non è necessario eseguire l'upgrade a SHA-3.
la [pagina wikipedia] (http://en.wikipedia.org/wiki/SHA-2#Comparison_of_SHA_functions) ha alcuni benchmark di prestazioni per loro. – jbabey