Android Keystore, valor seguro de la clave

Estoy investigando currenlty usando el Keystore asegurado / mejorado introducido en Android 4.3.

Me gustaría almacenar una clave de cifrado dentro de este almacén de claves, esta clave se utiliza para cifrar un db sqllite y los valores contenidos en mis preferencias compartidas.

Cuando echo un vistazo a la muestra de KeyStore en el SDK veo lo siguiente:

public static final String ALIAS = "my_key" 

Si alguien pudiera descompilar mi código, sería capaz de ver el alias de texto claro (= la clave para recuperar la clave de cifrado del almacén de claves) y por lo tanto podrían obtener una referencia a mi clave de cifrado. ¿Cómo puedo administrar securly mi ALIAS? O estoy perdiendo el punto aquí?

El alias no es información sensible. Cada almacén de claves está asociado con una contraseña y cada clave tiene su propia contraseña (opcional). Esos son los valores que deben mantenerse seguros.

Sin la (s) contraseña (s), un atacante no puede leer su material clave a pesar de conocer el alias.

La siguiente respuesta es para 4.3+. Hubo grandes cambios en las clases de KeyStore y KeyChain en esta versión. Vea aquí para más información

Keystore acceso al Keystore está restringido por el UID: a su aplicación se le asigna un UID durante la instalación.

Esto es lo que impide que otras aplicaciones / procesos accedan a su par de claves / clave privada . El deamon keystore hará cumplir esto.

Esto puede requerir opcionalmente un pin de dispositivo para encriptación adicional. Consulte http://developer.android.com/reference/android/security/KeyPairGeneratorSpec.Builder.html#setEncryptionRequired ()

Todo el punto de usar el software / hardware keystore es superar la situación que usted describe – que es cualquier datos codificados en su aplicación se puede leer en la descompilación por lo que no sería seguro.

@Duncans respuesta hace que parezca que usted necesita para mantener una contraseña alrededor. Le aconsejo que genere un par de claves usando el keystore y luego use esto para cifrar una clave AES que puede usar para cifrar cualquier cosa que desee (mucho más rápido que usar una clave RSA)

Puede utilizar su clave privada de hardware / sortware keystore respaldada como keyStore.getEntry(alias, null); Y no pasar ningún tipo de contraseña.

Vea SecretKeyWrapper.java para un buen ejemplo de esto

  • Verificación de facturación de Android en la aplicación
  • Permitir que sólo mis aplicaciones Android ejecuten api de punto final en java
  • Conexión a un servicio web desde una aplicación de Android con seguridad
  • Características de seguridad en Android
  • Cómo evitar la captura de pantalla en Android
  • SecurityException: No se puede iniciar el servicio Intención {act = com.google.android.c2dm.intent.REGISTER pkg = com.google.android.gms (tiene extras)}
  • De android - CHANGE_COMPONENT_ENABLED_STATE
  • APP de Android que consume un servicio web cómo autenticar usuarios
  • Cómo cifrar y descifrar archivos en Android?
  • Aplicación del sistema Android 101
  • ¿cómo se comprueban los permisos de seguridad de Android en tiempo de ejecución?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.