Recentemente ho imparato a conoscere i codici di autenticazione dei messaggi su uni e il docente ha detto che è importante usare un padding per rendere il messaggio un multiplo intero di una certa lunghezza prima dell'hashing perché altrimenti la funzione hash "many" consente di aggiungere dati senza cambiare l'hash.
Non l'ho capito. È in una diapositiva.
Questa diapositiva mostra anche questa intitolata "implementazione effettiva":
HMAC(Key, M) = H((Key ⊕ opad) ∥ H(Key ⊕ ipad ∥ M))
Significato dei simboli:
M: message
H: cryptographic hash function
Key: symmetrical key
opad, ipad: inner/outer padding
∥: concatenation
⊕: XOR
Prima di tutto, trovo la "effettiva implementazione" piuttosto scomoda. Probabilmente dovrebbe essere opad
e ipad
n
volte con n*length(opad) ≥ length(key)
e n*length(ipad) ≥ length(key)
.
Ma soprattutto, trovo che sia difficile da credere e non riesco a trovare nulla su Internet. Questo si verifica effettivamente con le funzioni hash crittografiche ?