RFC 3414 (pubblicato nel 2002) specifica un metodo per generare le chiavi in base alla password nella sua Appendice , che in pratica prende ogni "passphrase" e continua a ripeterlo fino a quando non c'è una stringa da 1 MB, a quel punto prende lo SHA1 o MD5 di quei dati da usare come chiave:
/**********************************************/
/* Use while loop until we've done 1 Megabyte */
/**********************************************/
while (count < 1048576) {
cp = password_buf;
for (i = 0; i < 64; i++) {
/*************************************************/
/* Take the next octet of the password, wrapping */
/* to the beginning of the password as necessary.*/
/*************************************************/
*cp++ = password[password_index++ % passwordlen];
}
SHAUpdate (&SH, password_buf, 64);
count += 64;
}
SHAFinal (key, &SH); /* tell SHA we're done */
Dichiara inoltre un requisito di sicurezza di lunghezza minima:
SNMP implementations (and SNMP configuration applications) must ensure that passwords are at least 8 characters in length.
E poi fa l'osservazione:
Please note that longer passwords with repetitive strings may result in exactly the same key. For example, a password 'bertbert' will result in exactly the same key as password 'bertbertbert'.
Sembra essere una ben nota "soluzione" al minimo di 8 caratteri per ripetere il tuo input: Se vuoi usare la password a
, inserisci aaaaaaaa
. Infatti, in entrambi i casi verrà effettivamente convertito in a
ripetuto 1048576 volte (1 MB) e quindi sottoposto a hash. Se stai provando a forzare la password, le password a
, aa
, aaa
e aaaaaa....aaaaaa
sono tutte identiche (e non è necessario provare tutte le varianti).
Tutto quello che ho capito sulla sicurezza delle password e l'hashing mi dicono che questo non è solo un disegno stupido, ma in realtà mina l'algoritmo hash e riduce la sicurezza. Esiste davvero un vantaggio per questo metodo di generazione delle chiavi? Come diavolo è entrato in una RFC esplicitamente preoccupata per la sicurezza?