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.
- ¿Debemos usar el proveedor de seguridad de google con OkHttp?
- ¿Dónde debo hash las contraseñas de usuario?
- Falla de confiabilidad de la aplicación en la aplicación v3
- Características de seguridad en Android
- Solicitudes seguras de servicio web
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í?
- ¿Cómo puedo verificar / confiar en la ubicación de un dispositivo iOS o Android desde el servidor?
- Hacer una aplicación de Android que no se puede desinstalar / eliminar
- Aplicación del sistema Android 101
- ¿Es seguro guardar los tokens de acceso / actualización de Oauth2 en las Preferencias compartidas de Android?
- No se pudo enviar la solicitud de Amazon AppStore: "La información sensible como la contraseña se repite en texto sin cifrado"
- ¿Cómo puedo proteger una aplicación de Android a un dispositivo?
- ¿Cómo puedo evitar que alguien se comunique con mi servidor, excepto mi aplicación de Android?
- ¿Existe una manera de almacenar de forma segura los datos de usuario en un dispositivo Android?
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
- Error en la conversión de fechas en java
- Android Studio Picasso gif loading image para marcador de posición