cifrado del cuerpo de la solicitud HTTP API

1

Estoy creando una API web para un juego simple. La API es solo para SSL y utiliza tokens de tiempo limitado para la autenticación del usuario. Me gustaría cifrar el contenido de una solicitud específica para evitar trampas.

Comprendo que para ello tendré que poner a disposición algunas claves de cifrado de la aplicación cliente (a las que el usuario tiene acceso completo), por lo que la solución no será 100% segura contra la ingeniería inversa.

Aún así, siento que algo es mejor que nada y me pregunto cuál sería el mejor enfoque.

He encontrado un par de alternativas:

  1. Hardcode es un secreto compartido en el código fuente de la aplicación.
  2. Use el token de sesión actual del usuario en combinación con algún algoritmo de ofuscación y use el resultado como clave de cifrado.

No me gustan particularmente ninguno de estos, así que quería comprobar si hay una mejor manera. ¿Alguna idea?

    
pregunta Shade 02.08.2017 - 18:26
fuente

1 respuesta

3

Como ha indicado correctamente, si el usuario tiene control sobre su dispositivo, no es posible detener el engaño. Puede supervisar la entrada de GPS, aplicar el código inverso al motor, identificar el cifrado (si corresponde) y enviar la solicitud en consecuencia.

La ofuscación es cuestionable, puede ralentizar (pero no detiene) al atacante. Dañará sus propias capacidades de depuración y diseño limpio.

El diseño adecuado es el siguiente: envíe la solicitud en texto sin cifrar para su API, pero firme. Su API debe rechazar todas las solicitudes que están firmadas incorrectamente. Solo agrega un campo de parámetro más a tu api, que contiene la firma.

Puede usar su propia PKI o generación de hash simple (si el rendimiento es un problema). Por supuesto, el atacante todavía puede aplicar un motor inverso a la firma algo, pero supongamos que no tiene la habilidad.

Editar: te sugiero que incluyas la marca de tiempo en la API para evitar ataques de repetición. (Por supuesto, la marca de tiempo debe firmarse digitalmente junto con el resto de los datos). De esta manera, sus usuarios no pueden guardar cadenas URL de ubicación y reproducirlas manualmente cuando están no en esa área. Sin marcas de tiempo, podrían hacerlo independientemente del uso del cifrado.

    
respondido por el goteguru 07.08.2017 - 13:31
fuente

Lea otras preguntas en las etiquetas