Solución:
A partir de sus comentarios, debe cifrar los datos con una clave local para las versiones actuales de Android y las antiguas.
Android Keystore está diseñado para generar y proteger sus claves. Pero no está disponible para el nivel de API por debajo de 18 y tiene algunas limitaciones hasta el nivel de API 23.
Necesitará una clave de cifrado simétrica aleatoria, por ejemplo, AES. La clave AES se utiliza para cifrar y descifrar sus datos. Voy a resumir sus opciones para generarlo y almacenarlo de forma segura según el nivel de API de Android.
-
Nivel de API <18: el almacén de claves de Android no está presente. Solicite una contraseña al usuario, obtenga una clave de cifrado a partir de la contraseña. El inconveniente es que debe solicitar la contraseña cuando se inicia la aplicación. La clave de cifrado no se almacena en el dispositivo. Se calcula cada vez que se inicia la aplicación utilizando la contraseña
-
Nivel de API> = 18 <23: Android Keystore disponible sin soporte AES. Genere una clave AES aleatoria con el proveedor criptográfico predeterminado (sin usar AndroidKeystore). Genere un par de claves RSA en el almacén de claves de Android y cifre la clave AES mediante la clave pública RSA. Almacene la clave AES cifrada en Preferencias compartidas de Android. Cuando se inicia la aplicación, descifre la clave AES usando la clave privada RSA
-
Nivel de API> = 23: almacén de claves de Android disponible con soporte AES. Genere una clave AES aleatoria usando en Android Keystore. Puedes usarlo directamente.
Para cifrar puede usar AES/CBC/PKCS7Padding
algoritmo. También requiere un vector de inicialización aleatoria (IV) para cifrar sus datos, pero puede ser público.
Alternativas:
-
Nivel de API> 14: Llavero de Android: KeyChain es un almacenamiento de credenciales para todo el sistema. Puede instalar certificados con claves privadas que las aplicaciones pueden utilizar. Utilice una clave preinstalada para cifrar / descifrar su clave AES como se muestra en el segundo caso anterior.
-
Token externo: Las claves protegidas no se almacenan en el dispositivo. Puede utilizar un token externo que contenga un par de claves pública / privada que le permita cifrar la clave AES. Se puede acceder al token mediante bluetooth o NFC
No puede colocar la clave de cifrado dentro de su archivo apk. Es posible que desee mantenerlo en un servidor remoto y descifrarlo usando el servidor. O puede dificultar las cosas para otros codificando la clave y guardándola en lugares no obvios. Pero no existe una solución a prueba de balas para esto.