Estoy trabajando en un sitio web con cuentas y quiero un esquema de inicio de sesión que no exponga las contraseñas o los hashes de los usuarios en caso de una falla total de seguridad. Apreciaría enormemente algunos comentarios sobre este esquema de autenticación:
- El cliente recupera el desafío de autenticación del servidor
- La contraseña está hash a un entero de 32 bytes en el cliente
- Integer se usa para crear un par de llaves, PK, usando un generador estático de par de llaves
- Se genera una clave de sesión temporal, SK
- El desafío está firmado con PK
- SK.public y la firma de desafío están cifradas con PK.private y la clave pública del servidor
- El cifrado se envía al servidor con nombre de usuario
- El servidor descifra el cifrado utilizando la clave pública asociada para el nombre de usuario, verifica la firma del desafío y permite que SK.public se use por x tiempo
Editar: soy un tonto, esto no agrega ningún nivel de seguridad. Si el generador es estático, entonces literalmente no tiene ninguna ventaja sobre un hash. Este fue super obvio y debería haberlo captado, pero aún así es un buen recordatorio de no intentar crear nuevos protocolos a menos que realmente sepas lo que estás haciendo.