studio programacion predeterminado nougat móviles libro interno desarrollo curso compartido cambiar aplicaciones almacenamiento android key-management

predeterminado - manual de programacion android pdf



Almacenamiento seguro de Android (3)

¿Hay una clase incorporada en Android para realizar esta tarea?

Aparte de java.io.File , no.

¿O debería buscar bibliotecas de terceros?

Puedes intentarlo, pero sospecho que la mayoría se verá como la solución que ya rechazaste. La mayoría de los almacenes de datos seguros incluyen contraseñas y suponen que las contraseñas se guardan en otro lugar (por ejemplo, en la cabeza de un usuario). Por ejemplo, OI Safe tiene un sistema basado en Intención para permitir que las aplicaciones almacenen cosas en la caja fuerte, pero luego el usuario participa en el desbloqueo de la caja fuerte, IIRC.

Quiero almacenar información pequeña pero crítica como las claves AES en mi aplicación de Android. ¿Cuál sería la forma recomendada de hacer esto? No quiero las claves de código duro como parte de mi aplicación.

Miro el KeyStore pero realmente no resuelve mi problema. Puede almacenar mis claves dado que puedo proporcionar una contraseña. Luego necesito encontrar un lugar seguro para almacenar esta contraseña, que es el mismo que mi problema original.

¿Hay una clase incorporada en Android para realizar esta tarea? ¿O debería buscar bibliotecas de terceros? Usar NDK también es aceptable para mí.

Actualizar:

Esperaba encontrar una API de Android para el almacenamiento que garantice que solo la aplicación que almacenó cierta información pueda recuperarla. El sistema operativo Android podría haber aplicado esto mediante la firma de firmas de la aplicación. De esta manera, mi aplicación puede generar una clave aleatoria en la primera ejecución y almacenarla en un almacenamiento seguro para su uso posterior. ¿Hay alguna API para esto?


Tienes que distinguir aquí entre claves y datos de la aplicación.

KeyPairGenerator y KeyGenerator de "AndroidKeyStore" almacenan las claves que generan desde su aplicación bajo un alias en KeyStore y asocian las claves a su aplicación. Si el dispositivo tiene "hardware seguro", puede especificar que se utilice y las claves se almacenarán allí.

No hay contraseña para las claves. Utiliza el alias para especificar qué clave desea utilizar. Solo tu aplicación puede recuperar las claves que había generado.

consulte: https://developer.android.com/training/articles/keystore.html

Para los datos privados de su aplicación, si entiendo "... una API de Android para almacenamiento de modo que garantice que solo la aplicación que almacenó cierta información pueda recuperarla ...", puede ver esto:

https://developer.android.com/guide/topics/data/data-storage.html#filesInternal https://developer.android.com/guide/topics/data/data-storage.html#db


Una solución, si termina usando la API de KeyStore, es generar su contraseña dinámicamente en tiempo de ejecución cada vez que la aplicación necesite acceder al KeyStore. Si basa su algoritmo de contraseña en una variable simple, pero variable, vinculada a la instalación específica, como el MEID del dispositivo (u otra identificación específica del dispositivo físico obtenida en el tiempo de ejecución), podría proporcionar una clave para el bloqueo que se vuelve cada vez más difícil. para recoger.

Ejemplo: use un ID del dispositivo físico, córtelo en tres posiciones y agréguelos a la posición final en la cadena de ID, luego agregue sus iniciales a la cadena programáticamente. Creo que este enfoque brindaría una capa de seguridad que no se puede romper fácilmente a menos que el intruso sepa cómo se creó la clave (es decir, tiene su código fuente).

MEID = MEID + "fluffy" + "2008";

Donde MEID es una cadena con una identificación del dispositivo, "mullido" es el nombre del gato de tu mejor amigo y "2008" es el año de un evento importante en tu vida. Luego alimente esta nueva cadena en una matriz, analice un número que se adapte a usted (el día del mes en que obtuvo su licencia de conducir, por ejemplo), tome tres caracteres y suelte esos caracteres al final de la cadena. Recorte desde la parte frontal de la cadena hasta la cantidad de posiciones que necesita para su clave y listo. Esta no debería ser una tarea que requiera mucho uso del procesador, por lo que, con un código de tolerancia a fallas para las variables, debería poder ejecutar esto en su proceso principal, incluso sin preocuparse demasiado de obtener una ANR del sistema. Si realmente quieres ponerte froggy, convierte la cadena en bits en algún punto y ''bitwise op'' los cambios. ¡Viola, una clave dinámica de baja sobrecarga que es exclusiva del dispositivo en el que se ejecuta!

EDITAR:

Como señaló @RedWarp, descompilar un .apk está siempre dentro del ámbito de posibilidad para cualquier código objeto con las herramientas y la motivación adecuadas. Si la generación "clave" es un proceso realmente importante, es imprescindible abstraer el gen clave fuera del alcance de la aplicación.

El punto real que estoy tratando de hacer con esta respuesta es que pensar un poco puede ir en una dirección con respecto a la seguridad mínima. Una seguridad más fuerte es más profunda que una simple respuesta de mi parte.