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

Debo desarrollar una aplicación de separación telefónica . Necesito cifrar mis peticiones al lado del servidor y descifrar . HTTPS no es una solución, porque tengo que firmar las solicitudes para estar seguro de que los datos no son falsos. Puedo usar cualquier criptografía asíncrona (la aplicación generará claves private/public y enviará clave pública al servidor). Pero de esta manera tengo que mantener mi clave privada en el dispositivo.

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

Puedo usar sqlclipher (para cifrar mi base de datos SQLite local) e integrarla en mi aplicación phonegap . Genial, pero aquí tengo que mantener la clave secreta para la base de datos 🙂

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

Cualquiera que tenga acceso al teléfono puede obtener esta clave secreta. Así que aquí tengo el mismo problema 🙂

Por favor, dame cualquier sugerencia.

¡Gracias!

Aplicación ps para iOS y Android

2 Solutions collect form web for “Protección de almacenamiento local en la aplicación de parche”

Hay que diferenciar entre encriptación y autenticación.

En primer lugar, sugiero utilizar https para cifrar sus mensajes y transferirlos de forma segura.

En segundo lugar, sugiero utilizar HMAC para la autenticación de sus mensajes. Básicamente funciona así:

  • Genere una cadena secreta conocida por su aplicación y el servidor en tiempo de compilación. Guarda este secreto directamente en el código fuente de la aplicación para que nunca se transmita al servidor o desde éste. Esta podría ser la principal diferencia con su método de clave privada / pública: compila el derecho secreto en su aplicación en lugar de escribirlo más tarde en algún almacenamiento accesible por el usuario. "Justo en tu aplicación" significa en el caso de Phonegap NO en tus archivos HTML / JS sino en el código fuente nativo! Tienes que puentear el accesor a javascript si es necesario.

  • Establezca un ID de usuario (= clave, largo, aleatorio!) En su aplicación cuando el usuario inicie su aplicación por primera vez. Si desea autenticar a sus usuarios, es probable que tenga algún tipo de mecanismo de inicio de sesión / contraseña. (Guarde el identificador de usuario, así como un HMAC generado desde el ID de usuario y el secreto compartido en el dispositivo.) Cada vez que lea el ID de usuario, compruébelo contra el hash para asegurarse de que el ID de usuario no fue falsificado.

En tu aplicación

  1. Incluir un identificador de usuario en cada mensaje.
  2. Incluya una marca de tiempo en cada mensaje.
  3. Calcular el hash HMAC de una cadena de poner juntos desde el mensaje, la dirección del servidor, el URI de la solicitud y el secreto compartido.
  4. Incluya el valor de hash en el encabezado de la solicitud.

En el lado del servidor

  1. Compruebe si la marca de hora es válida, por ejemplo, no más de 2 minutos más o menos. Esto evita ataques de repetición (al menos después de 2 minutos).
  2. Compruebe en su base de datos si el ID de usuario es válido.
  3. Calcular el hash HMAC de una cadena de poner juntos desde el mensaje, la dirección del servidor, el URI de la solicitud y el secreto compartido. Incluir la URI de la solicitud impide que la gente envíe la misma solicitud válida a otro URI en su servidor; Por ejemplo, en los entornos REST es una gran diferencia si envía la misma solicitud DELETE a /comment/1 o /user/1 .
  4. Compare con el valor hash presentado en su encabezado, que tienen que ser iguales.
  5. Si cualquier comprobación falla, envíe un error. De lo contrario, envíe la respuesta.

Existe la posibilidad de obtener el secreto compartido y la información acerca de cómo calcula el hash HMAC descompilando su código fuente. No veo cómo 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 seguridad de Android

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

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

Desde el wiki:

PhoneGap se limita generalmente a las características de seguridad 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, pruebe en http://code.google.com/p/crypto-js/

  • Android equivalente de NSUserDefaults en iOS
  • Cifrado de cadena de Java
  • ¿Puedes abrir una aplicación de iOS desde un esquema de url de HTTP?
  • HTML5 SQLite vs Base de datos nativa en caso de PhoneGap
  • Arquitectura limpia contra MVPC / MVC / MVP
  • ¿Cómo manejar el despliegue de aplicaciones móviles de plataforma con etiqueta blanca?
  • El audio multipartito en WebRTC en iOS / Android se distorsiona
  • Cómo cargar e importar un archivo CSS / JS desde el teléfono en el teléfono?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.