¿Qué tan seguras son las claves respaldadas por hardware en Android, cuando las operaciones de cifrado tienen lugar en la memoria?

5

En el código de KeyStoreUsage de las muestras del desarrollador de Android, veo el siguiente fragmento de código:

            KeyStore ks = KeyStore.getInstance("AndroidKeyStore");
            ks.load(null);
            KeyStore.Entry entry = ks.getEntry(alias, null);
            if (!(entry instanceof PrivateKeyEntry)) {
                Log.w(TAG, "Not an instance of a PrivateKeyEntry");
                return null;
            }
            Signature s = Signature.getInstance("SHA256withECDSA");
            s.initSign(((PrivateKeyEntry) entry).getPrivateKey());
            s.update(data);
            byte[] signature = s.sign();

¿Cuál es el beneficio de almacenar claves en hardware, cuando todas las operaciones criptográficas tienen lugar en la memoria normal? Como entiendo la arquitectura de Android, las aplicaciones están en un espacio aislado, por lo que sería seguro, si el dispositivo no está rooteado. Pero si está enraizado, la clave privada no encriptada podría extraerse de la memoria, ¿no?

¿Hay alguna posibilidad en dispositivos Android (además de usar UICC o microSD-HSM dedicado) para realizar todas las operaciones criptográficas en el mismo hardware donde están almacenadas las claves, por lo que la clave privada permanece a salvo incluso si el dispositivo está rooteado?

EDIT

Como parece que hay un pequeño malentendido con respecto a mi pregunta, intentaré aclararlo un poco. Soy consciente de que normalmente las claves respaldadas por hardware no son exportables, ya he estado trabajando con HSM-Appliances de Utimaco y Luna. Acabo de preguntarme sobre la seguridad de las claves en Android, porque la documentación no está clara para mí. Por un lado, indica que las claves son seguras y están respaldadas por hardware (lo que significa que no es extraíble para mí), por otro lado, encuentro fragmentos de código como el anterior que claramente indican que las claves son extraíbles . Así que me pregunté si las cosas estaban completamente mal y hay una forma estándar (no SEEK) en las nuevas versiones de Android para almacenar las claves en el hardware de manera que no sean extraíbles y deje que el hardware haga todo lo posible. cripto-operaciones.

EDIT 2

Bueno, me siento un poco tonto ahora. Después de investigar más, descubrí que tenía una comprensión muy limitada de cómo funcionan las cosas (y algunos malentendidos debido al hecho de que no soy un hablante nativo). Como Steve ya dijo, los objetos PrivateKey son solo identificadores, no las claves en sí. El proveedor de JCE es responsable de cómo tratar con las claves a las que hacen referencia estos manejadores. En el caso de las claves respaldadas por hardware, las claves permanecerán en el hardware y todas las operaciones que parezcan realizadas en la memoria (a primera vista) se delegarán al hardware. Así que la respuesta de Steve es correcta. Por favor ten paciencia conmigo para hacer las cosas un poco complicadas ...

    
pregunta Frank 14.11.2016 - 12:06
fuente

1 respuesta

5

Puede haber un malentendido crítico aquí ...

  

cuando todas las operaciones criptográficas tienen lugar en la memoria normal

Normalmente, cuando la clave se almacena en hardware, nunca se puede eliminar del hardware y, como tal, no se puede utilizar en la memoria normal. Las operaciones criptográficas reales tienen lugar en hardware criptográfico dedicado.

  

Las implementaciones de HAL no deben realizar operaciones confidenciales en el espacio del usuario, ni siquiera en el espacio del kernel. Las operaciones sensibles se delegan a un procesador seguro alcanzado a través de alguna interfaz de kernel. Source

Lo que ofrece el código es simplemente una interfaz abstracta para interactuar con la clave. Lo que realmente está sucediendo es que el sistema está transfiriendo las solicitudes al hardware de cifrado y luego solo espera una respuesta.

Dicho esto, todo el sistema no ofrece ninguna protección si la clave se mueve a la memoria para operaciones de cifrado.

    
respondido por el Steve 14.11.2016 - 16:26
fuente

Lea otras preguntas en las etiquetas