Echemos un vistazo a los documentos de desarrolladores de Android "Sistema de almacén de claves de Android" . Tendremos que desglosar esto según cómo utilice el objeto KeyStore
. Si está utilizando el KeyStore KeyStore.getInstance("AndroidKeyStore")
de Android, entonces:
1) Si el dispositivo en el que se está ejecutando la aplicación tiene almacenamiento seguro respaldado por hardware, entonces
El material clave puede estar vinculado al hardware seguro (por ejemplo, Trusted Execution Environment (TEE), Secure Element (SE)) del dispositivo Android. Cuando esta función está habilitada para una clave, su material clave nunca se expone fuera del hardware seguro.
El artículo "Android keystore system" ofrece más información sobre cómo usar esta función.
2) Si el dispositivo no tiene almacenamiento seguro respaldado por hardware, entonces:
El material clave nunca entra en el proceso de solicitud. Cuando una aplicación realiza operaciones criptográficas con una clave de Android Keystore, el texto sin formato, el texto cifrado y los mensajes que deben firmarse o verificarse se incorporan a un proceso del sistema que realiza las operaciones criptográficas.
Es de suponer que este proceso del sistema está escrito en C, donde tienen más control sobre la administración de la memoria y pueden poner a cero la clave correctamente cuando está fuera del alcance de su aplicación (lo que me lleva a mi perorata sobre los recolectores de basura ...)
3) Si por alguna razón usa KeyStore.getInstance("JKS")
como en los ejemplos aquí , tal vez usted necesita acceso a las claves privadas por alguna razón, o necesita cargar / almacenar las claves privadas en un archivo .jks
- luego No, no puede borrarlo : porque el recolector de basura Java es < a href="https://stackoverflow.com/q/38665202/1907046"> famoso por devolver la memoria al sistema operativo sin borrarla o reducirla a cero . De los documentos del desarrollador de Android , no veo ninguna evidencia de que el recolector de basura Dalvik funcione. diferente.
Además, uno de los mecanismos del recolector de basura Java es hacer una copia de cualquier variable de pila a la que su programa hace referencia actualmente y luego liberar la pila antigua. Esto significa que una copia de su clave privada puede ser devuelta al sistema operativo incluso antes de que quede fuera del alcance.
Línea inferior: Si el objeto KeyStore de Android se usa correctamente, sus claves privadas permanecerán de manera segura dentro del Entorno de Ejecución Confiable (TEE), Elemento Seguro (SE)) o el proceso del Sistema.
Si, por alguna razón, trae la clave privada a su aplicación, entonces todas las apuestas están desactivadas porque en Java / Dalvik / Android, una vez que algo está en la memoria de su aplicación, es casi imposible borrarlo o reducirlo a cero.