RFC 3414 (publicado en 2002) especifica un método para generar claves basadas en contraseñas en su Apéndice , que esencialmente toma cualquier "frase de contraseña", y continúa repitiéndola hasta que haya una cadena de 1MB, momento en el cual toma el SHA1 o el MD5 de esos datos para usarlos como clave:
/**********************************************/
/* 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 */
También establece un requisito de seguridad de longitud mínima:
SNMP Las implementaciones (y las aplicaciones de configuración SNMP) deben garantizar que las contraseñas tienen al menos 8 caracteres de longitud.
Y luego hace la observación:
Tenga en cuenta que Las contraseñas más largas con cadenas repetitivas pueden dar como resultado exactamente la misma llave Por ejemplo, una contraseña 'bertbert' dará como resultado exactamente la misma clave que la contraseña 'bertbertbert'.
Parece ser una "solución alternativa" conocida del mínimo de 8 caracteres para simplemente repetir su entrada: Si desea usar la contraseña a
, simplemente ingrese aaaaaaaa
. De hecho, en cualquier caso, en realidad se convertirá a a
repetido 1048576 veces (1MB), y luego se troceará. Si está tratando de forzar la contraseña bruta, las contraseñas a
, aa
, aaa
y aaaaaa....aaaaaa
son todas idénticas (y no es necesario que pruebe todas las variaciones).
Todo lo que entiendo sobre seguridad de contraseña y hash me dice que esto no es solo un diseño estúpido, sino que en realidad socava el algoritmo hash y reduce la seguridad. ¿Existe realmente un beneficio para este método de generación de claves? ¿Cómo diablos entró esto en un RFC explícitamente preocupado por la seguridad?