Pubblicato da Brian Claire Young e Shawn Willden di Android Security e Frank Salim di Google Pay
Android Keystore fornisce agli sviluppatori di applicazioni un set di strumenti crittografici progettati per proteggere i dati degli utenti. Keystore sposta le primitive crittografiche disponibili nelle librerie software dal sistema operativo Android a un hardware sicuro. Le chiavi sono protette e utilizzate solo all'interno dell'hardware sicuro per tutelare i segreti delle applicazioni dalle varie forme di attacchi. Keystore offre la possibilità di specificare le restrizioni relative alle applicazioni su come e quando utilizzare le chiavi.
Android Pie introduce nuove funzionalità per Keystore. Nel nostro post descriveremo due di queste nuove funzionalità. La prima abilita le restrizioni sull'utilizzo delle chiavi in modo da proteggere le informazioni sensibili. La seconda facilita l'utilizzo sicuro delle chiavi proteggendo il materiale delle chiavi dall'applicazione o dal sistema operativo.
A volte un'applicazione mobile riceve dati ma non ha bisogno di accedervi immediatamente se l'utente non utilizza il dispositivo in quel momento. Le informazioni sensibili inviate all'applicazione quando lo schermo del dispositivo è bloccato devono rimanere protette finché l'utente non esegue l'accesso. Android Pie risolve questo problema introducendo le chiavi crittografiche associate a Keyguard. Quando lo schermo è bloccato, le chiavi possono essere utilizzate per le operazioni di crittografia o verifica, ma non sono disponibili per la decrittografia o la firma. Se in quel momento il dispositivo è bloccato con un PIN, una sequenza o una password, qualsiasi tentativo di utilizzare queste chiavi si tradurrà in un'operazione non valida. Le chiavi associate a Keyguard proteggono i dati dell'utente se il dispositivo è bloccato e sono disponibili solo quando l'utente ne ha bisogno.
L'associazione a Keyguard e l'associazione all'autenticazione si comportano in modi simili, eccetto per una cosa: l'associazione a Keyguard collega la disponibilità delle chiavi direttamente allo stato di blocco dello schermo, mentre quella dell'autenticazione utilizza un timeout costante. Con l'associazione a Keyguard, le chiavi non sono disponibili se il dispositivo è bloccato e divengono disponibili solo quando l'utente sblocca il dispositivo.
Vale la pena notare che l'associazione a Keyguard è applicata dal sistema operativo, non da un hardware sicuro. Ciò avviene perché l'hardware sicuro non ha modo di sapere quando lo schermo è bloccato. Le funzionalità di protezione di Android Keystore imposte dall'hardware, come l'associazione all'autenticazione, possono essere combinate con l'associazione a Keyguard per ottenere un livello ancora più elevato di sicurezza. Inoltre, poiché l'associazione a Keyguard è una funzionalità del sistema operativo, è disponibile su qualsiasi dispositivo che esegua Android Pie.
Le chiavi per qualsiasi algoritmo supportato dal dispositivo possono essere associate a Keyguard. Per generare o importare una chiave associata a Keyguard, basta chiamare setUnlockedDeviceRequired(true) sull'oggetto builder KeyGenParameterSpec o KeyProtection durante la generazione o l'importazione della chiave.
Secure Key Import è una nuova funzionalità di Android Pie che consente alle applicazioni di eseguire il provisioning delle chiavi esistenti all'interno di Keystore in modo più sicuro. L'origine della chiave, un server remoto che può trovarsi in un data center on-premise o nel cloud, crittografa la chiave sicura utilizzando una chiave di wrapping pubblica dal dispositivo dell'utente. La chiave crittografata nel formato SecureKeyWrapper, che contiene anche una descrizione dei modi in cui è possibile utilizzare la chiave importata, può essere decrittografata solo nell'hardware Keystore appartenente allo specifico dispositivo che ha generato la chiave di wrapping. Le chiavi sono crittografate in transito e rimangono in modalità opaca per l'applicazione e il sistema operativo, ossia sono disponibili solo all'interno dell'hardware protetto in cui vengono importate.
Secure Key Import è utile negli scenari in cui un'applicazione intende condividere una chiave segreta con il dispositivo Android ma vuole impedire che venga intercettata o lasci il dispositivo. Google Pay utilizza Secure Key Import per fornire alcune chiavi sui telefoni Pixel 3 e impedire che queste ultime vengano intercettate o estratte dalla memoria. Sono inoltre disponibili diversi casi d'uso aziendali, come le chiavi di crittografia S/MIME, che vengono recuperate dal Certificate Authorities Escrow in modo che la stessa chiave possa essere utilizzata per decrittografare email su dispositivi multipli.
Per usufruire di questa funzionalità, consulta questo articolo sull'addestramento. Secure Key Import è una funzionalità hardware sicura e pertanto è disponibile solo su determinati dispositivi Android Pie. Per scoprire se il tuo dispositivo la supporta, le applicazioni possono generare un KeyPair con PURPOSE_WRAP_KEY.