Protección de almacenamiento local en la aplicación phonegap

Debería desarrollar una aplicación de directory telefónico . Necesito encriptar mis requestes al lado del server y luego descifrar . HTTPS no es una solución, porque necesito firmar requestes para asegurarme de que los datos no son falsos. Puedo usar cualquier cryptography asíncrona (la aplicación generará keys private/public y enviará keys públicas al server). Pero de esta manera tengo que mantener mi key privada en el dispositivo.

La pregunta es: ¿cómo puedo mantener la key privada en el dispositivo de forma segura?

Puedo usar sqlclipher (para encriptar mi SQLite DB local) e integrarlo en mi aplicación phonegap . Genial, pero aquí tengo que save la key secreta para la database 🙂

 var db = window.sqlitePlugin.openDatabase({name: "DB", key: "secret1"}); 

Cualquiera que tenga acceso al teléfono puede get esta key secreta. Entonces aquí tengo el mismo problema 🙂

Por favor, dame cualquier sugerencia.

¡Gracias!

Aplicación ps para iOS y Android

Tienes que diferenciar entre encriptación y authentication.

Primero, sugiero utilizar https para cifrar sus posts y transferirlos de forma segura.

Segundo, sugiero utilizar HMAC para la authentication de sus posts. Básicamente funciona así:

  • Genere una cadena secreta conocida para su aplicación y el server en time de compilation. Almacena este secreto directamente en el código fuente de su aplicación para que nunca se transmita hacia o desde el server. Esta podría ser la principal diferencia con su enfoque de key privada / pública: comstack el derecho secreto en su aplicación en lugar de escribirlo más adelante en un almacenamiento accesible para el usuario. "Justo en su aplicación" significa que en el caso de Phonegap NO en sus files HTML / JS, ¡sino en el código fuente nativo! Tienes que unir el acceso a Javascript si es necesario.

  • Establezca una identificación de usuario (= key, larga, aleatoria) en su aplicación cuando el usuario inicie su aplicación por primera vez. Si desea autenticar a sus usuarios, probablemente tenga algún tipo de mecanismo de inicio de session / contraseña. (Guarde la identificación de usuario, así como una HMAC generada a partir de la identificación de usuario y el secreto compartido en el dispositivo. Cada vez que lea la identificación de usuario, verifique contra el hash para asegurarse de que la identificación de usuario no fue falsificada).

En tu aplicación

  1. Incluya un ID de usuario en cada post.
  2. Incluya una timestamp en cada post.
  3. Calcule el hash de HMAC a partir de una cadena compuesta del post, la dirección del server, el URI de request y el secreto compartido.
  4. Incluya el valor de hash en su encabezado de request.

En el lado del server

  1. Compruebe si la timestamp es válida, por ejemplo, no más de 2 minutos o less. Esto evita los ataques de repetición (al less después de 2 minutos).
  2. Comtesting tu database si la identificación del usuario es válida.
  3. Calcule el hash de HMAC a partir de una cadena compuesta del post, la dirección del server, el URI de request y el secreto compartido. Incluir el URI de request evita que las personas envíen la misma request válida a otro URI en su server; por ejemplo, en entornos REST es una gran diferencia si envía la misma request de ELIMINAR a /comment/1 o /user/1 .
  4. Compárelo con el valor de hash enviado en su encabezado, tienen que ser iguales.
  5. Si falla alguna comprobación, envíe un error. De lo contrario envíe la respuesta.

Existe la posibilidad de get el secreto compartido e información sobre la forma en que calcula el hash de HMAC al descomprimir su código fuente. No veo forma de evitar este riesgo. … sin profundizar en el desarrollo nativo:

Llavero iOS

https://developer.apple.com/library/ios/documentation/Security/Conceptual/keychainServConcepts/iPhoneTasks/iPhoneTasks.html

Funciones de security de Android

http://developer.android.com/training/articles/security-tips.html

De forma pnetworkingeterminada, PhoneGap no proporciona la function de encryption por sí sola. Los dispositivos basados ​​en iOs y Android (por encima de la versión Gingerbread) admiten el encryption de disco completo. Pero esto no está disponible para los desarrolladores de PhoneGap / Cordova.

De la wiki:

PhoneGap generalmente se limita a las funciones de security de la plataforma en la que se está ejecutando.

Consulte https://github.com/phonegap/phonegap/wiki/Platform-Security

Para alguna solución basada en JS, testing en http://code.google.com/p/crypto-js/