¿Cómo implementar WSS UsernameToken cuando la contraseña en el servidor tiene sal y hash?

4

Actualmente estoy intentando escribir un servicio web para el cliente y el requisito es usar WS Security. En el lado del servidor, tienen contraseñas almacenadas como SHA-1 (salt + contraseña).

Según la especificación de WSS, el encabezado de seguridad contendrá el resumen de nonce, timestamp y password como SHA-1 (nonce + timestamp + password_user_entered). Luego, en el servidor usted hace SHA-1 (nonce_from_header + timestamp_from_header + password_from_database) y lo compara con el resumen de la contraseña del encabezado. Este tipo de implica que las contraseñas en el back-end deben estar en texto claro. Supongo que funcionaría si las contraseñas en el back-end son solo SHA-1 (contraseña) porque puede indicar a los clientes que construyan un resumen como SHA-1 (nonce + timestamp + SHA-1 (contraseña)) pero no puedo hacer Funciona con contraseñas saladas.

En mi caso, ya que las contraseñas en el back-end son hash y salted, no podré autenticar al usuario ya que en el servidor solo podré hacer SHA-1 (nonce_from_request + timestamp_from_request + hashed_salted_password_from_database) que no coincidirá con el resumen de la solicitud. Por lo tanto, parece que, de alguna manera, Salt debe encontrar su camino al cliente para que puedan crear un resumen de contraseña que se pueda usar en el servidor.

Parece que una solución es tener un servicio web al que llames primero y que envíes un nombre de usuario y que obtengas sal para ese usuario. Luego crea el resumen de la contraseña como SHA-1 (nonce + timestamp + SHA-1 (salt_from_server + password)) y lo usa en el encabezado de svc web principal. ¿Es esta una buena solución o hay una mejor manera estándar de la industria para lidiar con escenarios similares?

Gracias.

    
pregunta Michail 23.02.2012 - 20:17
fuente

1 respuesta

2

No estoy seguro de a qué especificación particular de WS-Security se refiere. Sin embargo, por lo que veo, esta especificación (gracias a @logicalscope) solo da una sugerencia en cuanto a cómo hash tu contraseña. Además, la especificación establece que:

  

Tenga en cuenta que PasswordDigest solo se puede utilizar si la contraseña de texto sin formato   (o contraseña equivalente) está disponible tanto para el solicitante como para el   destinatario.

Entonces, en su caso, la contraseña NO está disponible para el destinatario. Sólo la contraseña ya hash.

Otro punto importante a tener en cuenta es este comentario sobre la especificación:

  

Sin embargo, a menos que esta contraseña digerida se envíe en un canal seguro o   El token está cifrado, el resumen no ofrece una seguridad adicional real.   sobre el uso de wsse: PasswordText.

sugeriría usar texto simple PasswordText pero asegúrate de que el canal sea, por ejemplo. SSL protegido (si no lo has hecho de todos modos). De esta manera, no necesita cambiar la forma en que se almacenan sus contraseñas, puede hacerlas de la forma que desee y la contraseña aún se transporta de forma segura desde el usuario a su aplicación.

    
respondido por el Yoav Aner 24.02.2012 - 09:14
fuente

Lea otras preguntas en las etiquetas