Editar : actualizado para poner más énfasis en el objetivo: tranquilidad para el usuario y no reforzar la seguridad.
Después de leer algunas discusiones aquí sobre el hashing de contraseñas del lado del cliente, todavía me pregunto si podría estar bien usarlo en una situación particular.
Específicamente, me gustaría que el cliente, un programa Java, modificara su contraseña usando algo como PBKDF2, usando como combinación una combinación de su dirección de correo electrónico y una porción de bytes constante-específica . La idea es que el hash sea reproducible para la autenticación, pero es de esperar que no sea vulnerable a los ataques de ingeniería inversa (para descubrir la contraseña literal) aparte de la fuerza bruta si los datos del servidor están comprometidos.
Goz :
El hashing del lado del cliente es para la tranquilidad del usuario que el servidor nunca recibe su contraseña literal, incluso si de todos modos existe la seguridad de que la hashing esté almacenada. Otro beneficio adicional (¿o tal vez un pasivo?) Es que el costo de hashing de un PBKDF2 iterado o similar recae en el cliente.
Las características del entorno son:
- Todas las comunicaciones cliente-servidor están encriptadas.
- Los mensajes reproducidos no están permitidos. es decir. el hash enviado desde el cliente no puede ser utilizado efectivamente como contraseña por un intruso.
- Las direcciones IP de prohibición de ingreso y de inclusión en listas negras son posibles para varios intentos de inicio de sesión fallidos en un corto período de tiempo. Esto puede ser por cuenta de usuario o para todo el sistema.
Preocupaciones:
- "Evite crear esquemas de autenticación caseros".
- La sal es determinista para cada usuario, incluso si los hashes producidos serán específicos para esta aplicación debido a los bytes extra (idénticos) que se arrojan a la sal. ¿Esto es malo?
- Las autenticaciones en el extremo del servidor se realizarán sin demora significativa, sin el costo de hashing. ¿Aumenta esto la vulnerabilidad al ataque de autenticación de fuerza bruta distribuida?
- Los clientes malintencionados pueden proporcionar un hash débil para sus propias cuentas. En realidad, no estoy demasiado preocupado por esto.
- ¿Debería el servidor volver a limpiar los hashes del cliente antes de almacenar?
¿Pensamientos?