Length extension: perché H(secret||msg) non è un MAC
Le funzioni hash Merkle-Damgård (MD5, SHA-1, SHA-2) elaborano a blocchi mantenendo uno stato interno che è anche l'output finale. Questo permette di continuare l'hash.
L'attacco
Chi autentica con tag = H(secret || message) è vulnerabile: conoscendo tag e la lunghezza del segreto, l'attaccante inizializza lo stato dell'hash a tag e aggiunge dati, producendo un tag valido per message || padding || extra — senza mai conoscere il segreto.
hashpump -s TAG -d "message" -a "&admin=true" -k 16Difesa
Non costruire MAC così. Usa HMAC, progettato per resistere (doppio hash con chiave). SHA-3/BLAKE2 non hanno il difetto, ma HMAC resta lo standard interoperabile.