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?
- Práctica recomendada para la autorización / acción de Facebook en dispositivos móviles sin complementos
- ¿Qué versiones de Android e iOS es Adobe AIR 3.0 captive runtime compatible con?
- Funcionalidad de las pantallas táctiles y la entrada del usuario
- ¿Cuáles son los honorarios a desarrollar en iOS, Android y WP?
- Elementos de la interfaz de usuario de iOS que portaban en Android
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
- Consumo de energía de WebSockets
- Firebase: ¿Puedo usar el nuevo kit de cuentas de Facebook para autenticar usuarios de aplicaciones?
- Codename One Animation Trouble (también en Solitaire demo)?
- ¿Cuál es la mejor manera de incluir un número de compilación para el seguimiento de Google Analytics de la aplicación nativa?
- mejor manera de configurar un repositorio de proyectos multiplataforma de phonegap
- Caché de aplicación iOS PhoneGap
- No se eliminan las cookies del navegador móvil (cromo, safari) en la sesión de cierre
- ¿Está justificado utilizar C / C ++ para iOS / Android código de plataforma cruzada en este caso?
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
- Incluir un identificador de usuario en cada mensaje.
- Incluya una marca de tiempo en cada mensaje.
- 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.
- Incluya el valor de hash en el encabezado de la solicitud.
En el lado del servidor
- 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).
- Compruebe en su base de datos si el ID de usuario es válido.
- 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
. - Compare con el valor hash presentado en su encabezado, que tienen que ser iguales.
- 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
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/
- Tenemos que limpiar todo el proyecto de Android en Eclipse cada vez que se edita un archivo XML
- EasyTracker (GA) cada lanzamiento de la aplicación informó como nuevo usuario