Nel codice di KeyStoreUsage dagli esempi di sviluppatori Android vedo il seguente frammento:
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();
Qual è il vantaggio di memorizzare le chiavi nell'hardware, quando tutte le operazioni di crittografia avvengono nella memoria normale? Come ho capito l'architettura di Android le app sono sandboxed in modo che sarebbe sicuro, se il dispositivo non è root. Ma se è rootato la chiave privata non criptata potrebbe essere estratta dalla memoria, giusto?
C'è qualche possibilità nei dispositivi Android (oltre all'utilizzo di UICC o microSD-HSM dedicato) per eseguire tutte le operazioni di crittografia nello stesso hardware in cui sono memorizzate le chiavi, quindi la chiave privata rimane salvata anche se il dispositivo è rootato? / p>
Modifica
Come sembra che ci sia un piccolo malinteso riguardo alla mia domanda, proverò a chiarirlo un po '. Sono ben consapevole che normalmente le chiavi hardware-backed non sono esportabili, ho già lavorato con HSM-Appliance di Utimaco e Luna. Mi sono semplicemente interrogato sulla sicurezza delle chiavi in Android, perché la documentazione non mi è chiara. Da un lato si afferma che le chiavi sono sicure e supportate da hardware (il che significa non estraibili da me), dall'altro trovo frammenti di codice come quello sopra che indicano chiaramente che i tasti sono estraibili . Quindi mi sono chiesto se ho sbagliato tutto e c'è un modo standard (non SEEK) nelle versioni Android più recenti per archiviare le chiavi nell'hardware in modo che non siano estraibili e che l'hardware faccia tutto cripto-operazioni.
EDIT 2
Bene, ora mi sento un po 'sciocco. Dopo aver fatto ulteriori ricerche, ho scoperto che avevo una comprensione molto ristretta di come funzionano le cose (e alcuni fraintendimenti dovuti al fatto che non sono madrelingua). Come Steve ha già detto che gli oggetti PrivateKey sono solo maniglie, non le chiavi stesse. Il fornitore JCE è responsabile di come gestire le chiavi referenziate da queste maniglie. In caso di chiavi hardware-backed i tasti rimarranno nell'hardware e tutte le operazioni che sembrano fatte in memoria (al primo sguardo) saranno delegate all'hardware. Quindi la risposta di Steve è giusta. Per favore, sopportami di aver reso le cose un po 'complicate ...