¿Cómo funciona el protocolo de contraseña segura remota?

TLDR: SRP es un esquema de validación y hashing de contraseñas criptográficamente fuerte que puede distribuir la autenticación entre múltiples hosts.

El protocolo de contraseña remota segura (SRP) es una implementación de un acuerdo de clave autenticada con contraseña. (PAKE) Un PAKE es un método criptográfico en el que dos o más partes pueden establecer un canal de comunicación cifrado basado en el conocimiento de los participantes de una o más contraseñas. ¿Entonces que significa eso?

La mayoría de las solicitudes de autenticación de contraseña involucran a un cliente y servidor que usa una contraseña estática a través de un canal encriptado. Este enfoque puede ser vulnerable al hombre en el medio y, a veces, a los ataques de fuerza bruta. SRP aborda estos problemas mediante una combinación de hashing criptográficamente fuerte basado en credenciales precompartidas y autenticación distribuida.

Cuando la cuenta de usuario se configura, el servidor almacena una contraseña simple precompartida y un valor de sal aleatorio. La contraseña se transmite en el momento de la autenticación, pero el valor de sal aleatorio no. Cuando el usuario intenta autenticarse, la sal aleatoria no transmitida se usa como parte de la negociación de la clave de sesión / clave de cifrado única. El servidor y el cliente usan esta información para generar una clave de sesión segura (canal encriptado) para continuar con la autenticación. El paso final es que el servidor y el cliente se validen mutuamente mediante el cifrado criptográfico de la clave de sesión, la contraseña y la sal aleatoria. Todo el proceso se puede asegurar aún más al tener más servidores de autenticación en el proceso.

Ejemplo: el cliente puede autenticarse utilizando dos o más servidores. Cada uno puede tener credenciales precompartidas diferentes y claves de referencia cruzada de forma independiente entre ellos.

Los cálculos de autenticación no son tan complicados y hay múltiples implementaciones de código abierto disponibles. (OpenSSL, etc.)