2012-09-28 17 views
6

Estamos desarrollando una aplicación segura para Android. Se requiere que los usuarios mantengan encriptados los sistemas de archivos de sus dispositivos, pero debemos verificar este hecho y prohibir el uso de la aplicación. ¿Es posible verificar si el sistema de archivos está encriptado? También hay algunos dispositivos con Android < 3.0 que admiten el cifrado, por ejemplo Motorola RAZR. Sería interesante saber sobre el cifrado en tales dispositivos.Compruebe si el sistema de archivos Android está encriptado

Respuesta

8

Si su aplicación está registrada como a device admin, puede llamar al getStorageEncryptionStatus() en DevicePolicyManager para conocer el estado de cifrado del dispositivo, para API Nivel 11 y superior.

Para cualquier encriptación de todo el dispositivo en niveles inferiores de API, póngase en contacto con el fabricante del dispositivo.

+0

¿Alguna manera de averiguar si el cifrado está basado en software o hardware? Al menos en Android 5.1. –

+0

@ArtemRussakovskii: Me late, lo siento. – CommonsWare

+0

@ArtemRussakovskii revise esto http://developer.android.com/reference/android/security/KeyChain.html#isBoundKeyAlgorithm(java.lang.String) – alfongj

12

Solo para aclarar la respuesta de CommonsWare, puede leer el estado de cifrado del dispositivo sin ningún permiso de Android.

/** 
* Returns the encryption status of the device. Prior to Honeycomb, whole device encryption was 
* not supported by Android, and this method returns ENCRYPTION_STATUS_UNSUPPORTED. 
* 
* @return One of the following constants from DevicePolicyManager: 
*   ENCRYPTION_STATUS_UNSUPPORTED, ENCRYPTION_STATUS_INACTIVE, 
*   ENCRYPTION_STATUS_ACTIVATING, or ENCRYPTION_STATUS_ACTIVE. 
*/ 
@TargetApi(11) 
private int getDeviceEncryptionStatus() { 

    int status = DevicePolicyManager.ENCRYPTION_STATUS_UNSUPPORTED; 

    if (Build.VERSION.SDK_INT >= 11) { 
     final DevicePolicyManager dpm = (DevicePolicyManager) getSystemService(Context.DEVICE_POLICY_SERVICE); 
     if (dpm != null) { 
      status = dpm.getStorageEncryptionStatus(); 
     } 
    } 

    return status; 
} 
+1

Este código no parece funcionar en mi modelo 2013 Nexus 7. En este caso, parece que incluso cuando he tomado medidas para encriptar el dispositivo, dpm.getStorageEncryptionStatus() devuelve ENCRYPTION_STATUS_INACTIVE. –

4

para aclarar las respuestas anteriores el API vuelve ENCRYPTION_STATUS_INACTIVE cuando el dispositivo está cifrado, pero el código de acceso era't habilitado.

En API> = 23 devuelve ENCRYPTION_STATUS_ACTIVE_DEFAULT_KEY en este caso.

+1

ENCRYPTION_STATUS_ACTIVE_DEFAULT_KEY no se devuelve en dispositivos Samsung, p. S7 con Android 6 si el PIN para iniciar el dispositivo no está definido. – David

Cuestiones relacionadas