Questa frase si applica in particolare quando HMAC viene utilizzato in combinazione con la crittografia. HMAC può essere usato da solo se ti interessa solo il messaggio autenticità : garantisce chi ha prodotto il messaggio, ma non nasconde il contenuto del messaggio. Questa frase non si applica in questo caso. Quando HMAC viene utilizzato solo per l'autenticità, l'HMAC viene calcolato sul testo in chiaro e questo è quanto.
Quando vuoi avere sia la segretezza che l'autenticità, cioè quando vuoi nascondere il contenuto del messaggio e garantirne l'origine, allora hai bisogno di crittografia autenticata . Esistono modalità operative che forniscono la crittografia autenticata; GCM, che è menzionato nell'articolo, è una scelta popolare e una buona scelta.
È anche possibile cobble un meccanismo di crittografia autenticato combinando un meccanismo di crittografia (come un codice di blocco in modalità CTR o CBC) con un meccanismo di autenticazione (come HMAC). Tuttavia, farlo correttamente è sottile. Ci sono due modi principali per farlo: encrypt-then-MAC o MAC-then-encrypt. La frase che citi dice che dovresti fare encrypt-then-MAC, cioè criptare prima il messaggio e quindi autenticare il risultato finale (che è il testo cifrato incluso IV). Questa è una buona raccomandazione di principio , ma non è facile da implementare correttamente.
La raccomandazione contro GCM è negativa. Sì, fallisce se il IV viene riutilizzato. Tuttavia una libreria crittografica decente chiamerà l'RNG da solo per generare un IV, eliminando il rischio di riutilizzo IV (a meno che il sistema RNG non sia rotto, nel qual caso anche la generazione della chiave è interrotta). (Esistono cattive librerie crittografiche che richiedono al chiamante di eseguire tutti gli impianti idraulici, evitarli.) È molto più semplice utilizzare una libreria GCM correttamente che assemblare correttamente HMAC e crittografia. La raccomandazione poco chiara di fare encrypt-then-HMAC contraddice la raccomandazione n. 1 dell'articolo contro la "zuppa cripto".
A meno che tu non abbia una buona ragione per farlo, e tu capisci perfettamente cosa stai facendo, usa sempre le librerie crittografiche di livello più alto che fanno ciò di cui hai bisogno . Utilizzare un livello di protocollo che si basa su TLS ed eseguire la verifica del certificato, se possibile, utilizzare il meccanismo di crittografia del disco o del disco del sistema operativo e della password invece di eseguire il rollover, utilizzare librerie crittografiche che eseguono internamente tutte le chiamate RNG e la generazione IV e aggiungerle devi scendere al livello crittografico, ecc.