Esta pregunta es sobre un problema de programación específico que estoy teniendo: quiero asegurarme de que mi código (y el algoritmo de software) sean suficientes para almacenar las credenciales de usuario en una base de datos.¿Mi algoritmo de seguridad de PHP almacena efectivamente las credenciales del usuario?
// Get a 32 character salt like '69Mt6nexL1rsjWnu011S53MpB/WmT4Vl'
$passwordSalt = Security::generateBase64Salt();
$user = new User();
$user->setUsername($_POST['username']);
// $_POST['password'] comes in as a 128 character string
// Client side javascript is used to sha512 the string before sending it over POST
// see http://pajhome.org.uk/crypt/md5/
// This prevents novice eavesdroppers from capturing the raw password in plaintext
$user->setPassword(
hash('sha512', $passwordSalt.$_POST['password'])
);
$user->setPasswordSalt($passwordSalt);
$user->save();
Aquí está la entrada de la base de datos para una determinada contraseña:
Contraseña:
69a78a7586a111b8a567b2d4f42f93f01fb59d337f7fa3c35949a66b246095778c1fa01ff4026abace476091e1e9a183bbdec1c31b12ce3f786921895c98cf6f
Sal:
69Mt6nexL1rsjWnu011S53MpB/WmT4Vl
Preguntas:
- ¿Hay alguna heredar defectos con este algoritmo?
- ¿Está bien almacenar la sal en la misma base de datos y tabla que el hash salt + password?
- ¿Tener una contraseña grande de 128 caracteres provocará problemas de rendimiento de inicio de sesión (en una magnitud de varios segundos) si tengo varios cientos de miles de usuarios en la tabla?
- ¿Se pueden revertir estos datos para producir la contraseña original?
para la diversión:
voy a PayPal $ 5 si me puede proporcionar la contraseña original utilizando la sal y la sal + hash de la contraseña.
¿Qué sentido tiene utilizar una sal si la envía en texto sin cifrar y anteponiendo su contraseña con ella? Yo mezclaría la contraseña con la sal al menos. – Jeroen
Tu doble hashing la contraseña ¿verdad? Una vez que el cliente (sin sal), luego otra vez en el lado del servidor (con sal)? –
Correcto. Gracias por tu increíble respuesta a continuación también. =] –