Ocultar clave de cifrado en la aplicación de Android

Quiero ocultar algunos datos que es ingresado por el usuario en el teléfono del usuario cifrado. Por lo que sé puedo cifrar / descifrar datos usando un valor de clave / semilla, pero si ocultar el valor de clave en código, sé que se puede encontrar de alguna manera (por ejemplo, la descompilación del código Java).

¿Tiene alguna sugerencia para hacer el proceso más difícil?

Es imposible ocultar la clave en la aplicación de tal manera que un hacker ingenioso no será capaz de sacarlo. Usted puede tratar de ofuscar la clave y hacer que sea difícil de encontrar, pero siempre será capaz.

Vea esto: https://www.excelsior-usa.com/articles/java-obfuscators.html#examples

La mejor opción sería exigir a sus usuarios que especifiquen un PIN o una contraseña y utilizarlo como clave de cifrado. De esta forma, si el dispositivo se pierde o es robado, la clave sigue siendo segura y también evita que alguien descompilie su aplicación y obtenga la clave de cifrado para todas las instancias de su aplicación.

Una de las nuevas características de Ice Cream Sandwich (Android 4.0) es el keychain API . Desde la página de Destacados de la Plataforma (énfasis mío):

Android 4.0 facilita que las aplicaciones administren la autenticación y las sesiones seguras. Un nuevo API de llavero y el almacenamiento cifrado subyacente permiten que las aplicaciones almacenen y recuperen claves privadas y sus correspondientes cadenas de certificados. Cualquier aplicación puede utilizar la API de llavero para instalar y almacenar certificados de usuario y CA de forma segura .

Si está haciendo esto para los datos de nombre de usuario / contraseña, debe realizar la comprobación implementando un autenticador .

Desde android no tiene ningún almacenamiento seguro en él (al menos como de 2,2), usted tendría que escribir su propio.

La única manera de hacerlo con seguridad es encriptar con una clave derivada de una contraseña suministrada por el usuario (PBKDF2 / RFc2898 es el camino a eso). Crypto es tan seguro como tu llave y si lo guardas en el teléfono de todos modos, entonces alguien puede encontrarlo y usarlo. Esto le permite al usuario almacenar la clave sin recordar realmente una tecla AES grande.

Puede haber bibliotecas que hagan esto por android. Escribí uno para Windows Phone que se puede encontrar aquí si desea alguna base para la forma de hacerlo.

Si el cifrado / descifrado todo sucede en el microteléfono, un hacker determinado será capaz de romperlo. Puede hacer que la vida más difícil mediante obfustication, o (si es apropiado para su aplicación), la adición de entrada de usuario en el código de cifrar / descifrar.

Si su aplicación requiere conectividad de red, puede valer la pena cargar parte del código a un servidor que se ejecuta en otro lugar, de modo que los datos cifrados vivan en el dispositivo, pero las claves se descargan en tiempo de ejecución. Aún no es una prueba de hack, pero reduce los riesgos a los datos confidenciales en un dispositivo robado.

  • Cifrado de datos en Android
  • Práctica recomendada para descifrar archivos grandes con menos memoria
  • Error de descifrado: Bloqueo de pad dañado
  • Rutinas de cifrado y descifrado de PHP y JAVA
  • Confundido acerca de cómo funciona el cifrado de Android
  • Uso de Android NDK para el cifrado de datos pasados ​​de la aplicación normal de Android
  • Encriptación AES para .NET, Java (android) e iOS
  • Encriptación AES 128 en Java Descifrado en PHP
  • Cómo cifrar la base de datos Android sqlite?
  • Android: descifra texto RSA utilizando una clave pública almacenada en un archivo
  • Cifrado con AES-256 y el vector de inicialización
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.