2011-10-18 18 views
13

Quiero ocultar algunos datos que el usuario ingresa en el teléfono del usuario cifrado. Hasta donde yo sé, puedo encriptar/desencriptar datos usando un valor clave/inicial, pero si oculto el valor clave en el código, sé que se puede encontrar de alguna manera (por ejemplo, descompilando el código Java).Ocultar la clave de cifrado en la Aplicación de Android

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

Respuesta

6

Es imposible ocultar la clave en la aplicación de modo que un pirata informático con recursos no pueda extraerla. Puede intentar ofuscar la clave y dificultar su búsqueda, pero siempre podrá hacerlo.

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

La mejor opción sería exigir a los usuarios especificar un PIN o contraseña y usar eso como la 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 descompile su aplicación y obtenga la clave de cifrado para todas las instancias de su aplicación.

+0

Por favor, ver a mi pregunta relacionada: http://stackoverflow.com/questions/30951805/encrypt-on-server-side-and-decrypt-on-client-side –

+0

@slayton Acerca del uso de la contraseña como clave de cifrado : ¿La contraseña se guardará hash y luego el valor hash será la clave o se usará la contraseña directamente como clave? Solo pidiendo conocimiento –

2

Si está haciendo esto para los datos de nombre de usuario/contraseña, debe finalizar la implementación de un Authenticator.

0

Si todo el cifrado/descifrado ocurre en el teléfono, un hacker determinado podrá descifrarlo. Puede hacer que su vida sea más difícil si usa la función de ocultación o, si corresponde, si es necesario para su aplicación, agregando datos del usuario al código de cifrado/descifrado.

Si su aplicación requiere conectividad de red, podría valer la pena descargar parte del código a un servidor que se ejecute en otro lugar, de modo que los datos cifrados vivan en el dispositivo, pero las claves se descargan en tiempo de ejecución. Todavía no es a prueba de intrusos, pero reduce los riesgos para los datos confidenciales en un dispositivo robado.

1

Dado que Android no tiene ningún almacenamiento seguro (al menos a partir de 2.2), tendría que escribir el suyo.

La única manera de hacerlo de manera segura es encriptar con una clave derivada de una contraseña proporcionada por el usuario (PBKDF2/RFc2898 es el camino hacia eso). Crypto es tan seguro como su clave y si almacena eso en el teléfono de todos modos, alguien puede encontrarlo y usarlo. Esto le permite hacer que el usuario almacene la clave sin recordar realmente una clave AES grande.

Puede haber bibliotecas que hacen esto para Android. Escribí uno para el teléfono de Windows que se puede encontrar here si quieres una base para saber cómo hacerlo.

3

Una de las nuevas funciones de Ice Cream Sandwich (Android 4.0) es keychain API. Del (el énfasis es mío) Platform Highlights page:

Android 4.0 hace que sea más fácil para las aplicaciones para administrar la autenticación y sesiones seguras. Una nueva API de llavero y almacenamiento cifrado subyacente permite a las aplicaciones almacenar y recuperar claves privadas y sus cadenas de certificados correspondientes . Cualquier aplicación puede usar la API de llavero para instalar y almacenar certificados de usuario y CA de manera segura.

+0

¿Conoces algún tutorial/código de muestra ?! Gracias. –

Cuestiones relacionadas