Cifrado de datos para la aplicación móvil de Android

8

Estoy creando una aplicación móvil para Android. Esta es mi primera aplicación móvil, por cierto.

Decidí almacenar los datos utilizados en mi aplicación en una base de datos SQLite en el dispositivo Android de destino.

Los datos que estoy almacenando se refieren a los datos financieros del usuario, por lo que he decidido cifrar los datos antes de almacenarlos en la base de datos. Pero no quiero agotar todos los recursos del teléfono móvil para realizar el cifrado y descifrado.

BouncyCastle hará el truco. Pero me preocupa que alguien descompile el código, obtenga la clave de seguridad y descifre los datos. ¿Hay alguna alternativa para esto? Cualquiera de tus ideas son bienvenidas.

    
pregunta Thusitha Nuwan 07.12.2012 - 09:41
fuente

1 respuesta

11

No inserte una clave codificada en su aplicación; eso proporciona poco más que una ofuscación trivial para cualquier persona que realice ingeniería inversa en su aplicación.

Para generar una clave para el cifrado, use un algoritmo de derivación de claves como PBKDF2 , que esencialmente realiza cientos de rondas de una función hash en una contraseña, combinando los resultados para producir una clave segura. Para ayudar a entender por qué necesita un algoritmo de derivación de claves, eche un vistazo a esta otra respuesta .

Los beneficios de PBKDF2 son:

  • Cantidad configurable de rondas, para adaptar la velocidad de cálculo a su dispositivo mientras se mantiene un margen de seguridad razonable contra la fuerza bruta.
  • Seguridad comprobable, es decir, es al menos tan potente como la función hash subyacente.
  • Puede producir cualquier clave de tamaño.
  • Fácil de implementar (ya hay una implementación de Java para usted)

Esencialmente, permite que el usuario ingrese su contraseña, luego calcula la clave con PBKDF2 y luego la usa para descifrar / cifrar los datos.

Ahora, en lo que respecta al cifrado real, sugiero encarecidamente que te limites a algo fácil si no has tratado con criptografía antes. Los cifrados de bloque deben usarse en un modo de operación y requieren un vector de inicialización (IV) para estar seguros. Hay muchos detalles de la implementación que deben ser exactamente correctos para que realmente estén seguros, por lo que en este caso, sugiero leer otras preguntas para entenderlos mejor.

    
respondido por el Polynomial 07.12.2012 - 10:15
fuente

Lea otras preguntas en las etiquetas