He implementado la autenticación PBKDF2 para algunos servicios web.
Al cliente se le proporciona la siguiente información, para que pueda duplicar la función PBKDF2:
- el algoritmo de hash (SHA256)
- una contraseña secreta que tiene 30 bytes de longitud
- el número de iteraciones (4096)
- la longitud de hash (32)
Se espera que el cliente genere un sal aleatorio criptográficamente seguro y lo use en la función PBKDF2. El hash PBKDF2 resultante y una codificación base64 de la sal se agregan a un encabezado de Autorización X en cada solicitud.
por ejemplo Autorización X: 882fac38qkf98ff1ed29W4bd2f95P214 = & & = 2c55a195
Todas las solicitudes se realizan a través de https: //. Siempre he tenido la impresión de que debería generarse una nueva sal en cada solicitud, ya que esto evita los ataques de la tabla del arco iris ... ¿pero es realmente necesario?
Digamos que alguien rompe la capa TLS, para que puedan ver el hash de la contraseña y la sal que se usó. Tienen la intención de romper esta contraseña y, por lo tanto, crean una tabla de arco iris utilizando esta sal visible. Dudo que vayan a descifrar una contraseña de 30 bytes, pero si lo hacen, ahora tienen la contraseña que le enviamos al cliente.
En este punto, con la contraseña, pueden realizar cualquier solicitud que deseen. No importa si se usa una nueva sal en futuras solicitudes. No es necesario crear otra tabla de arco iris para descifrarlas, porque ya tenemos la contraseña.
¿Hay algo que estoy pasando por alto o malentendido? ¿Es beneficioso generar un nuevo salt y ejecutar la función PKDF2 en cada solicitud?