Leyendo Ingeniería de seguridad por Ross Anderson, chapter 2.4.7.1 Password Manglers tuvo una idea que finalmente parece resolver el problema que tengo con el actual 'Necesito para recordar una contraseña * fuerte para demasiadas soluciones de sistemas.
* ) mis contraseñas se generan aleatoriamente, con un tamaño que depende del nivel de importancia del servicio utilizado, con un mínimo de 8 caracteres y un máximo típico de aproximadamente 16 caracteres.
Un breve desglose de lo que no me gusta de las soluciones existentes:
- escríbalos: no es seguro, no siempre se puede acceder a la lista;
- guárdelos en un archivo cifrado: no siempre accesible;
- use un software dedicado: no siempre accesible.
Así que, en resumen, estaba buscando una solución que es:
- siempre disponible cuando está conectado a internet;
- seguro (nadie puede robar o trabajar mis contraseñas).
Por lo tanto, mi pregunta es:
¿Es seguro usar PBKDF2 para generar una contraseña, basado en mi contraseña maestra (12 caracteres ASCII imprimibles generados al azar) y usando el nombre de dominio del sitio web (stackexchange.com) como un "salt"?
<?php
$password = $_POST['password'];
$salt = $_POST['publicIdentifier'];
function passKey($password, $salt) {
$iterationCount = pow(2, 18); // 262.144 iterations
$outputLength = 20; // because this should be 'secure enough'?
// Step 1: get the derived key
$generated = hash_pbkdf2('sha256', $password, $salt, $iterationCount, $outputLength, true); // returns binary output
// Step 2: encode as Base91
$generated = base91_encode($generated); // because we want 'special characters' in our password string (websites often require this)
// Step 3: return the password, sliced down to required length
return substr($generated, 0, $outputLength);
}
echo 'generated password: '.passKey($password, $salt);
¿Dado que la solución se alojaría en mi propio servidor web de confianza y solo sería accesible a través de SSL / TLS?
Si el atacante tiene acceso al código utilizado (publicado arriba), el 'publicIdentifier' y posiblemente una lista de las contraseñas generadas, ¿ protegería el esquema anterior contra el atacante al descubrir la contraseña maestra?
Me preocupa que el uso de una cadena corta , no generada aleatoriamente como una sal pueda comprometer la fortaleza de PBKDF2?