Comparta una clave pública desde una aplicación para verificar la autenticidad de los datos enviados

2

Soy bastante nuevo en temas de seguridad de la información y estoy buscando orientación para implementar la transmisión segura de datos estadísticos de una aplicación a un servidor. Además, no quiero ningún conocimiento sobre los datos almacenados en el servidor.

Este es mi enfoque:

  1. Un desarrollador crea un par de claves y coloca la clave pública en la aplicación.
  2. La aplicación genera una clave pública y una clave privada cuando se inicia por primera vez. Envía la clave pública al servidor y obtiene una identificación de usuario a cambio. Luego descarta la clave pública generada.
  3. Cada vez que la aplicación envía datos, lo hace cifrando los datos con la clave pública del servidor y firmándola con su propia clave privada.
  4. El desarrollador puede recuperar los datos para cada ID de usuario del servidor y verificar la autenticidad con la clave pública almacenada con la ID de usuario.

Y aquí están mis preguntas:

  1. ¿Es suficiente enviar la clave pública generada en el dispositivo una vez o debo usar un esquema más sofisticado para verificar que este usuario exacto envíe los datos? No hay login y no me importa quién es el usuario. Pero quiero asegurarme de que un atacante no pueda enviar datos erróneos falsificando la ID de usuario sin ser detectado.
  2. ¿Qué debo hacer para detectar los datos faltantes? Está bien si algunos datos se pierden debido a problemas de red. Estoy considerando usar enteros ascendentes en los datos cifrados. Esto revelaría si alguien roba la clave privada y el número actual de la aplicación y envía datos incorrectos.
  3. Finalmente, ¿hay algunas implementaciones concretas que un usuario sin experiencia como yo pueda usar sin desordenar?
pregunta Paul 08.09.2017 - 17:34
fuente

1 respuesta

1

Pregunta 1

Los tipos de ataque MiTM se pueden evitar fácilmente mediante la implementación de cifrado y firma digital. Ya que está encriptado y firmado los datos que se envían, y suponiendo que el dispositivo del cliente no está comprometido, es justo decir que incluso los datos fueron alterados, lo sabrá si implementó eso correctamente. Puede fortalecer su sistema utilizando TLS más la fijación de claves públicas, de esa forma, incluso alguien quiere interceptar, el cliente lo sabrá porque el certificado es diferente.

Pregunta 2

No puede hacer mucho al respecto si solo utiliza criptografía asimétrica y firma digital. Para obtener más detalles, consulte enlace . Sin embargo, si está dispuesto a pedirle al cliente que escriba una OTP, la clave maestra solo la conocerán ambas partes y se intercambiará de forma segura. Puede detectar este tipo de ataque incluso si la clave privada se ha filtrado ya que la OTP puede cambiar con el tiempo o al aumentar los contadores, dependiendo de la OTP que utilice. Eche un vistazo a RFC 4226 y RFC 6238 para tener una idea de ello. Tenga en cuenta que la máquina generadora de OTP debe ser diferente del dispositivo de comunicación y no debe haber conexión entre ellos.

Pregunta 3

Depende del lenguaje informático que esté utilizando, puede intentar encontrar una API o marco OpenPGP, este es el único software que sé que puede hacer lo que quiera sin mucho conocimiento (aún requiere cierto aprendizaje, no tanto Como hacerlo desde cero. Si no puede, no tiene suerte ya que hacer cosas criptográficas de una manera correcta requiere muchos pasos y un largo tiempo de aprendizaje. P.ej. primero debe cifrar los datos, luego calcular el hash de la misma, firmarlos con la clave privada, empacar todas las cosas en un paquete y finalmente enviarlas al servidor. La mayoría de estos pasos están separados en un marco al que debe llamar a cada uno de ellos individualmente.

    
respondido por el Hartman 14.09.2017 - 15:17
fuente

Lea otras preguntas en las etiquetas