Utilizzo del KeyStore con supporto hardware Android

8

Desidero utilizzare il KeyStore supportato da hardware Android, ma sono preoccupato per la sicurezza e l'usabilità. Da quello che ho letto qui , KeyStore viene cancellato quando il l'utente cambia il blocco del dispositivo, a meno che setEncryptionRequired () non venga omesso. Per motivi di usabilità, sembra che questo debba essere fatto, altrimenti tutte le chiavi supportate da hardware verrebbero cancellate una volta che il blocco del dispositivo è stato modificato.

Tuttavia, ho letto anche qui che le chiavi supportate dall'hardware non sono in realtà memorizzato nel TEE, ma piuttosto memorizzato come file chiave in / data / misc / keystore / user_0 /, crittografato da una chiave specifica del dispositivo che è memorizzata all'interno del TEE. Poiché una modifica del blocco del dispositivo cancella il KeyStore, sembra che la chiave specifica del dispositivo sia derivata dal blocco del dispositivo.

Per motivi di sicurezza, ha senso crittografare il file chiave, altrimenti qualsiasi utente root sarebbe in grado di leggere i file chiave ed estrarre la chiave privata, dal momento che presumibilmente si troverebbero a loro a posto.

Quindi sono un po 'in un dilemma. Per motivi di usabilità, dovrei omettere setEncryptionRequired (), ma per motivi di sicurezza, dovrei impostare setEncryptionRequired ().

Infine, è possibile importare una chiave privata nel KeyStore supportato da hardware usando setKeyEntry ()? Sono in grado di farlo senza errori, ma non sono sicuro che sia supportato da hardware.

La mia comprensione è corretta?

    
posta user1118764 24.03.2017 - 08:51
fonte

1 risposta

1

setEncryptionRequired () : viene utilizzato per crittografare la coppia di chiavi a riposo e la chiave di crittografia è derivata dalle credenziali della schermata di blocco sicuro (ad es. password, PIN, o modello).

Hardware Backed-Keystore : i file di immissione chiave generati dal keystore supportato dall'hardware sono crittografati utilizzando chiavi specifiche del dispositivo che sono accessibili solo ai trustlet in esecuzione nel TEE .

Dalle sorgenti Android

TEE processors have become a mainstay in today's mobile devices. The main processor on these devices is considered "untrusted" and cannot access certain areas of RAM, hardware registers and fuses where secret data (such as device-specific cryptographic keys) is stored by the manufacturer.

Quindi queste sono le due diverse implementazioni di crittografia che utilizzano diverse chiavi di crittografia. I file di immissione delle chiavi generati dal keystore supportato dall'hardware sono crittografati utilizzando le chiavi specifiche del dispositivo.

Per implementare un altro livello di sicurezza, Android consente agli sviluppatori di crittografare ulteriormente le chiavi utilizzando la chiave di crittografia derivata dal blocco dello schermo tramite l'opzione setEncryptionRequired (). È chiaramente una relazione di compromesso tra funzionalità e sicurezza.

Personalmente ritengo che setEncryptionRequired () debba essere abilitato per i dispositivi che non supportano il keystore supportato da hardware.

    
risposta data 20.02.2018 - 09:03
fonte

Leggi altre domande sui tag