Un aspecto importante es si hay algún tipo de material clave almacenado en el dispositivo que se puede usar para autenticar el dispositivo o si un usuario puede simplemente tomar un dispositivo nuevo, descargar la aplicación e iniciar sesión.
Si hay tal material clave en el dispositivo, es posible que el servidor aplique límites de velocidad por dispositivo. Otras formas de aplicar los límites de tasa del lado del servidor (como los límites de tasa por IP o por nombre de usuario) son posibles vectores de ataque DoS. Esto es cierto independientemente de si el límite de velocidad se implementa haciendo que el servidor realice cálculos pesados de la CPU como parte de la validación de la contraseña o mediante bloqueos temporales.
Cuando tiene el control tanto del código del cliente como del servidor, puede diseñar un protocolo en el que la parte pesada de la validación de la CPU se realice en el lado del cliente, pero el servidor sigue haciendo un hash con sal para asegurarse de que todavía tiene los beneficios del servidor. validación lateral. Obviamente, si implementa tal cosa desde cero, existe un riesgo de vulnerabilidades introducidas por fallas en el diseño o la implementación.
La ventaja de hacer el lado del cliente de parte intensiva de CPU es que elimina principalmente el vector de ataque DoS. Una desventaja de hacer el lado de cliente de parte intensiva de CPU es que el cliente puede estar limitado en recursos de CPU.
La combinación de los enfoques anteriores es posible. En el primer inicio de sesión, puede hacer que el cliente realice el hashing durante varios segundos, por ejemplo, enviando un salt al cliente y que haga muchas rondas de hashing; finalmente, el servidor realiza la última ronda del hashing con un salt diferente. Si se acepta la contraseña, el dispositivo envía un token que permitirá al cliente autenticarse en la misma cuenta con un hash secundario mucho más barato en el futuro. El servidor puede imponer un límite sobre la cantidad de intentos de inicio de sesión fallidos con el token que se permiten antes de que el token caduque y el cliente vuelva al hash más lento.
Una vez más, debo advertir que hay muchas formas de introducir fallas de seguridad en un diseño como este, por lo que hay que evitar el riesgo de ataques de fuerza bruta.