Pregunta

Estamos en el proceso de escribir una aplicación nativa de Windows (MFC) que serán subiendo algunos datos para nuestra aplicación web. La aplicación de Windows permitirá usuario conectarse y después de que va a subir periódicamente algunos datos para nuestra aplicación web. Subir se llevará a cabo a través de HTTP POST sencilla para nuestra aplicación web. La preocupación que estoy teniendo es ¿cómo podemos asegurar que la carga en realidad procedían de nuestra aplicación, y no de rizo o algo por el estilo. Creo que estamos viendo algún tipo de cifrado de clave pública / privada aquí. Pero no estoy seguro de si de alguna manera podemos simplemente incrustar una clave pública en nuestra aplicación ejecutable victoria y terminar con esto. ¿O sería que la clave pública sea demasiado fácil de extraer y utilizar fuera de nuestra aplicación?

De todos modos, estamos construyendo ambas partes (cliente y servidor) por lo que casi cualquier cosa es una opción, pero tiene que trabajar a través de HTTP (S). Sin embargo, no podemos controlar el entorno de ejecución de aplicación victoria (cliente), además de que el usuario que ejecuta la aplicación en su / su sistema es el único que va a ganar algo por jugar con el sistema.

¿Fue útil?

Solución

En última instancia, no es posible demostrar la identidad de una aplicación de esta manera cuando se está ejecutando en una máquina que no es dueño. Se podría incorporar teclas, jugar con los hashes y sumas de comprobación, pero al final del día, cualquier cosa que se basa en código que se ejecuta en la máquina de otra persona puede ser falsificada. Las claves pueden ser extraídos, código puede ser inversa engineered- todo es la seguridad por oscuridad.

Podrá pasar el tiempo trabajando en la validación de datos y la limpieza, y si realmente quiere conseguir algo, asegurar al usuario final con un certificado de cliente. Todo lo demás es sólo una pérdida de tiempo y una falsa sensación de seguridad.

Otros consejos

Acerca de lo mejor que podría hacer sería utilizar HTTPS con certificados de cliente. Presumiblemente con WinHTTP 's interfaz.

  

Pero no estoy seguro de si de alguna manera podemos simplemente incrustar una clave pública en nuestra aplicación ejecutable victoria y hacerse con él.

Si el cliente ha de identificarse a sí mismo con el servidor, que tendría que ser la clave privada incrustado.

  

O eso sería demasiado fácil de extraer y utilizar fuera de nuestra aplicación?

Si usted no controla el entorno de ejecución de la aplicación cliente, cualquier cosa que su aplicación puede hacer se puede analizar, automatizado y reproducida por un atacante que hace que el control de medio ambiente.

Se puede poner capas ofuscador todo el procedimiento de comunicaciones, si es necesario, pero que nunca solucionar el problema. juegos multijugador han estado tratando de hacer esto durante años para luchar contra la trampa, pero al final es sólo una carrera de armamentos de ofuscación que no se puede ganar. Ventisca tiene manera más recursos que usted, y no pueden manejarlo bien.

Usted no tiene control sobre los binarios una vez que su aplicación se distribuye. Si toda la firma y el cifrado de la lógica residen en su ejecutable que se puede extraer. codificadores inteligentes se darán cuenta de código y construir sistemas interoperables cuando hay suficiente motivación para hacerlo. Es por eso que el DRM no funciona.

Un sistema complejo atar una clave para la dirección MAC de un PC, por ejemplo, es segura de fracasar.

No confíe en un ejecutable o sistema en particular, pero confía en sus usuarios. Confiar a cada uno de ellos con un archivo de clave privada protegida por una contraseña y les explican cómo esa llave los identifican como los remitentes de los contenidos en su servicio.

Desde que está controlando el cliente, es posible que así integrar la llave en la aplicación, y asegurarse de que los usuarios no tienen acceso de lectura a la imagen de aplicación - se necesita para separar la lógica de 2 niveles - 1 que el usuario ejecuta, la otra que se conecta al servicio a través de HTTP (S) -. ya que el usuario siempre tendrá acceso de lectura a una aplicación que está corriendo

Si he entendido bien, los datos se envían de forma automática después el usuario inicia sesión -. Esto suena como sólo se necesita la parte de servicio

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top