HMAC y usando un campo aleatorio criptográficamente seguro como mensaje

0

Diga que tengo una gran aplicación para la que me gustaría crear una API segura. La forma estándar de hacerlo sería trabajar con una clave de API pública y una clave de API secreta y proporcionárselas al usuario. A continuación, en cada solicitud de API, los mensajes se firman utilizando un MAC en la clave secreta y (en parte) el mensaje.

Ahora, ya que esta aplicación es grande, no quiero tener que seleccionar mi campo de mensaje por cada puerta de enlace API (por ejemplo, si mi solicitud de API fue para responder una pregunta, message=answer , si mi solicitud de API fue para publicar un comentario message=comment etc ...).

Por conveniencia, me gustaría agregar un campo aleatorio criptográficamente seguro, que se agrega en cada solicitud (llamemos a este campo nuestro salt ). De esta manera puedo escribir una verificación de solicitud que cubra todas las situaciones.

Mis preguntas son ahora:

¿Es una buena idea y por qué (no)?

    
pregunta JohannesB 06.05.2018 - 23:07
fuente

1 respuesta

1

Un elemento único (a menudo aleatorio) añadido a un mensaje se llama nonce . Puede usarse como una defensa contra ataques de repetición (es decir, un atacante que puede observar una solicitud legítima correctamente firmada podría luego reproducir esa solicitud exacta para hacer que el servidor vuelva a realizar la misma acción). Como tal, puede ser muy útil (suponiendo que verifique que un nonce dado pueda usarse una sola vez).

Sin embargo, si lo entiendo correctamente, desea calcular el MAC para el nonce / salt en lugar de para los datos reales del mensaje. Esto no funcionará, ya que solo las partes del mensaje que están incluidas en el MAC están protegidas, por supuesto. Le sugiero que serialice todo su mensaje en un formato adecuado (por ejemplo, JSON), calcule el MAC sobre él y envíe ambos en la solicitud. De esa manera, la firma / MAC no es una parte del mensaje propiamente dicho, y la verificación se puede realizar sin conocer la estructura del mensaje en sí.

    
respondido por el Marc Schütz 07.05.2018 - 11:55
fuente

Lea otras preguntas en las etiquetas