2012-09-17 11 views
9

Necesito almacenar información confidencial en una aplicación de Android. Si lo pongo en un archivo de recursos, parece que es trivial que otra aplicación pueda navegar y leer ese archivo simplemente usando PackageManager.getResourcesForApplication().Dónde almacenar información global sensible como claves API en la aplicación de Android?

¿Dónde está el lugar correcto para poner información como esta que no queremos que la gente pueda espiar fácilmente?

¿Debería estar en un archivo java compilado? ¿O los archivos de clases también son fáciles de leer? Además, si están en archivos java, ¿es posible hacer referencia a ellos desde archivos XML que los necesitan (por ejemplo, para la clave de la API de google maps)?

+3

Todo lo que distribuye en su apk es legible. Solo colóquelo en los recursos/archivos java, siempre que no tenga valor alguno, como las claves APA. Si es su número de tarjeta de crédito, no lo escriba en absoluto. La clave api Maps funciona solo en XML IIRC – zapl

+2

En el sitio ProGuard, mencionan [DexGuard] (http://www.saikoa.com/dexguard) que permite una mejor ocultación de, por ejemplo, cadenas estáticas (claves API). Si vale la pena gastar algo de dinero no es un problema comprobar lo que ofrecen. – harism

Respuesta

9

Su APK se recuperará del dispositivo y se romperá de todos modos. (Después de todo, algunos dispositivos están rooteados.) Cualquier cosa que codifique allí, no importa dónde, será encontrada y extraída. Por supuesto, si la ganancia potencial corrobora el esfuerzo. De lo contrario, la seguridad por oscuridad, como la ofuscación, puede ser el camino a seguir.

El manejo de secretos reales debe basarse en algún tipo de entrada, especialmente las contraseñas.

Afortunadamente, las claves de API, si se usan como se supone que deben hacerlo, no son necesariamente un verdadero secreto.

-3

si solo desea denegar el acceso a sus datos desde otras aplicaciones, puede usar SharedPreferences. Solo use Contex.getSharedPreferences (/ prefs file name /, Context.MODE_PRIVATE); De acuerdo con la documentación MODE_PRIVATE, significa que la aplicación llamante solo puede acceder al archivo creado (o todas las aplicaciones que comparten el mismo ID de usuario).

+0

Esto no responde la pregunta que se hace. El solicitante está preocupado por los activos distribuidos con la aplicación, no con el almacenamiento de la información determinada después de la instalación. Por ejemplo, un archivo distribuido en 'res/raw /'. – Dallas

4

Google tiene algunas buenas recomendaciones al respecto en billing. Para resumir: use el servidor remoto, ofusque y use nonces aleatorio seguro. No hay nada seguro en tu apk, ya que siempre se puede usar ingeniería inversa y la ofuscación solo funciona contra ataques simples.

+2

Si desclasifica por favor especifique por qué. Gracias – Warpzit

Cuestiones relacionadas