Almacenar SHA256 en un servidor sql

1

Necesito desarrollar una pasarela de pago y me acabo de dar cuenta de que necesito almacenar una clave HMAC_SHA256_V1 para las operaciones de autenticación. La forma en que se hace esto es: el navegador llama a un servicio WCF que responde con la información firmada con mi clave HMAC_SHA256_V1 y luego el navegador envía por POST con una solicitud con esa información para abrir la página de pago de la puerta de enlace (mediante redirección). Y esa clave es la misma que tengo que usar para verificar la respuesta de la pasarela de pago.

Entonces, creo que puedo almacenar esa clave en una fila de configuración dentro de una tabla de SqlServer de una fila, así que aquí está mi pregunta: ¿necesito tomar alguna medida, como cifrar la clave o realizar alguna acción en orden? para proteger esta información?

    
pregunta MirlvsMaximvs 08.03.2016 - 11:03
fuente

1 respuesta

2

No estoy seguro del flujo de trabajo, así que avísame si estoy fuera.

Creo que la situación es que te estás comunicando con un servicio. Realiza una solicitud al servicio y este responde, firmando la respuesta con un HMAC. Luego, verifica que el HMAC sea correcto para garantizar que la solicitud se originó en el servicio (autenticidad) y que no ha sido modificado por un intermediario (integridad).

Para que un HMAC sea efectivo, la clave debe ser secreta . Si la clave no es secreta, entonces un atacante puede modificar el mensaje o simular que es el servicio, de manera que el destinatario no puede decirle que está recibiendo mensajes modificados o que no está hablando con su compañero deseado. Y si está dispuesto a renunciar tanto a la integridad como a la autenticidad, no tiene sentido utilizar el HMAC en absoluto. Por lo tanto, la clave HMAC debe ser secreta para ser efectiva.

Exactamente qué protecciones son apropiadas para mantener la clave en secreto depende de la aplicación. Por ejemplo, almacenarlo en una tabla de base de datos puede hacer que se exponga si su aplicación tiene una Vulnerabilidad a la Inyección de SQL . Me parece arriesgado si tiene una arquitectura que podría ser vulnerable a SQLi (consideraría cualquier aplicación que tome la entrada del usuario y la use como parte de una consulta SQL como potencialmente vulnerable a SQLi). Almacenar la clave en un archivo de disco podría ser vulnerable a un ataque de recorrido de ruta .

Al final, ningún sistema será perfecto. Tendrá que ajustar la cantidad de seguridad a la sensibilidad de su aplicación. Un truco es combinar múltiples medidas de seguridad , por ejemplo, almacenando una clave HMAC cifrada en la base de datos y almacenando la clave para descifrarlo en otro lugar (tal vez un archivo fuera de la raíz de su web). Entonces, un atacante necesitaría obtener tanto la clave HMAC cifrada como su clave de descifrado para ejecutar un ataque exitoso. Cuanto más pueda separar la clave HMAC y su clave de descifrado, más segura será su aplicación (y será menos conveniente para implementar y operar).

    
respondido por el Neil Smithline 08.03.2016 - 23:44
fuente

Lea otras preguntas en las etiquetas