Cifrado de datos GWT RPC y problema de gwt-crypto

Tengo una aplicación GWT, que está implementada en el motor de la aplicación. La aplicación es básicamente un simulador de exámenes. Todas las preguntas y respuestas del examen se almacenan en un archivo XML en el servidor. Utilizo el analizador JAXB para analizar el archivo XML y enviar una lista de objetos al cliente a través de GWT RPC.

Noté que durante el tránsito (servidor -> cliente), todos los datos son visibles en texto plano en Firebug. Dado que los datos (preguntas y respuestas del examen) son de mi propiedad intelectual (IP) y algo a lo que le doy mucho valor, me preocupa que sea muy fácil robar esos datos. Por lo tanto, estoy tratando de encontrar formas de realizar un cifrado básico y ofuscar el contenido cuando se envía desde el servidor al cliente.

Después de buscar en Google, me encontré con el proyecto gwt-crypto y, en unos minutos, pude lograr el resultado exacto que quería. El servidor cifraría los datos y el cliente los descifraría. En Firebug, mostraría los datos en formato cifrado y no como texto sin formato.

Sin embargo, encontré un problema. Después de implementar el cifrado / descifrado, noté que mi aplicación no se cargaba dentro de la red de mi empresa, que obviamente está protegida por un firewall. La aplicación funciona perfectamente desde casa o incluso en una red 3G en mi teléfono. Otra versión de la aplicación, que no utiliza cifrado / descifrado, funciona perfectamente desde la red de mi empresa. Confirmé esto creando 2 versiones exactamente iguales de la aplicación, con la única diferencia entre una bandera booleana, que determina si el cifrado / descifrado está habilitado o deshabilitado.

Tengo las siguientes preguntas aquí:

  1. ¿Cuál es la mejor manera de lograr el resultado que quiero lograr? ¿Es gwt-crypto una buena solución para eso? Estoy de acuerdo con cualquier enfoque simple para ofuscar los datos durante el tránsito. No tiene por qué ser un algoritmo sofisticado.

  2. ¿Cuál podría ser la posible razón por la que una aplicación GWT, con el cifrado / descifrado habilitado, no funciona dentro de un firewall? Realmente no tengo ni idea de esto.

Agradeceré cualquier ayuda sobre este tema.

preguntado el 27 de agosto de 11 a las 17:08

Para que quede claro, usted comprende que el usuario puede simplemente tomar capturas de pantalla para capturar su propiedad intelectual. ¿Dónde intenta proteger los datos? ¿Solo en tránsito, o incluso cuando llega al navegador del cliente? -

GregS - Lo entiendo perfectamente. Solo quiero ponerle las cosas difíciles a un usuario medio. Intento protegerlo solo en tránsito. Ciertamente pueden llegar al extremo de tomar capturas de pantalla o volver a escribir el contenido nuevamente, o ver la fuente y copiarla y pegarla. Simplemente no me gusta la idea de exponer una gran parte del contenido en texto plano a través de Firebug u otras herramientas similares. Entonces, esto NO es una cuestión de hacer un sistema 100% seguro. Si tiene una solución mejor, estoy dispuesto a intentarlo. Gracias. -

Para el tránsito, usaría SSL en lugar de intentar hacer el suyo con GWT-crypto. -

Tienes razón. Pero GAE no admite SSL para dominios personalizados (AFAIK) y no quiero usar el dominio myappid.appspot.com para mi aplicación. Gracias. -

Estás buceando por una madriguera de conejo aquí. Nada de lo que pueda hacer hará que sea imposible para los usuarios extraer sus datos, y nada de lo que probablemente implemente lo dificultará siquiera un poco. Por ejemplo, puedo usar Firebug o las herramientas de desarrollo de Chrome para ver el DOM calculado y extraer el texto después de que su código lo haya descifrado. Creo que está sobrestimando el valor de sus datos para otras personas y quiénes son sus posibles adversarios. -

1 Respuestas

Usar SSL es el camino correcto a seguir.

En su caso, dadas las limitaciones de AppEngine SSL, debe cargar su HTML normalmente desde un dominio que no sea SSL y usar RPC entre sitios para cargar sus datos a través de un dominio SSL.

Actualizar:

What is the best way to achieve the result that I want to achieve?

Si desea proteger los datos en tránsito, la única opción segura es SSL / HTTP. Por lo general, también es el más simple, ya que no requiere que cambie el código de la aplicación, solo la configuración del servidor. En su caso particular (appengine con dominio privado), requiere más trabajo como se describe arriba.

 Is gwt-crypto a good solution for that?

No. gwt-crypto usa una clave para encriptar / desencriptar los datos. También necesita una forma segura de distribuir esta clave.

I'm fine with any simple approach to obfuscate the data during transit.

Seguridad a través de la oscuridad en no seguridad. Es una falsa sensación de seguridad, que es incluso más peligrosa que la falta de seguridad. Es suficiente que solo uno de los estudiantes técnicamente capaces lo descifre y pronto todos lo harían.

El posible ataque sería así:

  1. Busque en la red, obtenga el nombre de usuario / contraseña del usuario.
  2. Inicie sesión como ese usuario, haga que el navegador cargue los datos del examen, que ahora no están encriptados en la memoria.
  3. Volcar el DOM e inspecciónelo para ver si tiene preguntas del examen.

-

What could be the possible reason for a GWT app, with encryption/decryption
enabled, not working inside a firewall?

Utilice firebug para asegurarse de que las conexiones de red sean idénticas, excepto por el contenido cifrado. Los cortafuegos no deberían funcionar a tanta profundidad. Hable con el administrador de sistemas al respecto.

Respondido 28 ago 11, 11:08

Gracias, Peter. Pasé por ese enlace, pero me está costando mucho relacionarlo con mi requisito y con su sugerencia. Admito que no tengo el conocimiento suficiente para entenderlo. Entonces, ¿podrías dar más detalles sobre cómo hacerlo? Solo quiero ofuscar el contenido y no preocuparme realmente por hacerlo muy seguro, en este momento. Una solución simple, como gwt-crypto, cumpliría muy bien con mis requisitos. - DFB

Peter, tu actualización es definitivamente útil. SSL para dominios personalizados está en la hoja de ruta de GAE y ya está vencido. Estoy esperando a que me lo proporcionen. Estoy dispuesto a aceptar el riesgo e ir con la oscuridad (en lugar de la seguridad real) en este punto porque los datos que estoy publicando ahora son un subconjunto del conjunto completo, que seguirá en unos meses. No estoy discutiendo nada de lo que dijo, y estoy de acuerdo en que SSL es el camino a seguir. Intentaré hablar con el administrador del sistema. Mientras tanto, ¿conoces alguna alternativa? No puedo publicar todos los datos visibles en texto sin formato para todos. Gracias. - DFB

Intenté hacer algunas pruebas habilitando SSL en una de mis aplicaciones de prueba implementadas en GAE. Noté que en el lado del cliente, todavía podía ver el contenido que venía del servidor en texto sin formato en Firebug. ¿Es así como se supone que funciona o me falta algo en mis pruebas? - DFB

Sí, Firebug está "dentro" del navegador. Ve la comunicación después de que sale del HTTPS. - Peter Knego

Así también lo interpreté yo. Gracias por confirmar esto. Entonces, SSL "no" va a resolver mi problema. Usando gwt-crypto para el cifrado, al menos cuando veo los datos recibidos de la llamada RPC desde el servidor, muestra información cifrada. El cliente realiza el descifrado y muestra las preguntas en la interfaz de usuario. Obviamente, eso no lo hace seguro de ninguna manera, pero al menos agrega una capa adicional de oscuridad. Peter, muchas gracias por responder pacientemente a cada una de mis preguntas y guiarme en la dirección correcta. - DFB

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.