Entiendo por qué los certificados de cliente SSL no se utilizan ampliamente (es necesario instalarlos, problemas con las máquinas compartidas, etc.). Por otro lado, cuando inicio sesión en el servidor, la contraseña se le envía y se encuentra en la memoria del servidor. Además, si el certificado del servidor se filtró y hubo una falsificación de DNS, hay poca protección contra la obtención de la contraseña por MITM. Si bien los ataques de este tipo son raros, todavía ocurren (ver diginotar).
Salí con un esquema muy simple: como no se usa mucho, asumo que algo está mal con él:
En la configuración de contraseña:
- Se genera sal aleatoria (por cliente, servidor o ambos)
- El cliente obtiene sal y contraseña y siembra el PRNG seguro cifrado previamente acordado
- La clave pública y el archivo salt están almacenados en el servidor
Al iniciar sesión:
- La sal se envía al cliente
- El cliente regenera la clave privada
- La autenticación se retransmite en el desafío / respuesta entre el servidor
¿Existe alguna desventaja de dicho esquema (excepto la sobrecarga computacional / de transferencia adicional)?