Sigillus
Sigillus è un’app che ho sviluppato per il corso di Mobile Systems Security all’università Adam Mickiewicz di Poznań. Si tratta di un’app note all’apparenza minimale, con soltanto le funzioni essenziali. Lo sforzo tecnico si è concentrato sull’elevare il più possibile il livello di sicurezza dell’app, implementando le best practices apprese nel corso tenuto dal (per me mitico) prof. Michał Ren.
E’ anche possibile scaricarne l’APK .
Meccanismi di autenticazione
L’accesso nell’app è consentito sia tramite password che, se abilitata, tramite biometria.
Password
Al primo avvio viene chiesto all’utente di impostare una password.
Sono imposti dei vincoli che da rispettare nella scelta: imporre all’utente di scegliere password con simboli, numeri, lettere minuscole/maiuscole è utile solo in minima parte. Gran parte della sicurezza di una password sta nella sua lunghezza, poiché una password lunga ingrandisce enormemente il numero di tentativi da effettuare per “indovinarla”.
A partire dalla password scelta si deriva, tramite PBKDF2 (con SHA-256, 100,000 iterazioni + salting) una chiave di crittografia simmetrica, che in questo articolo chiameremo “UserKey”.
Contemporaneamente, il programma genera una “MasterKey” da 32 bit, che sarà usata per crittografare le note dell’utente.
La UserKey viene usata per crittografare tramite AES-GCM la MasterKey. Dopo di ciò, la UserKey viene “dimenticata”. Ogni volta che si vorrà decrittografare la MasterKey sarà necessario re-inserire la UserKey così che il sistema possa ricavare nuovamente la chiave con cui la MasterKey era stata crittografata.
Ma come mai non ho crittografato le note direttamente con la UserKey? Immagina di voler cambiare password: se avessi usato direttamente la UserKey, al cambio password il programma avrebbe dovuto prima decrittografare tutte le note con la vecchia password, per poi ricrittografarle con la nuova. Non il massimo di certo.
Nell’approccio usato, invece, si decrittografa/ricrittografa solo la MasterKey, con minor consumo di risorse, minor tempo di attesa e minori punti di debolezza del codice.
Biometria
Dopo aver configurato la password, è possibile abilitare anche l’accesso biometrico. In tal caso, una versione crittografat tramite Hardware-Backed Key della MasterKey viene salvata nel Trusted Execution Environment dello smartphone, rendendo “impossibile” accedervi senza accesso biometrico, anche mediante privilegi di root.
Crittografia delle note
Come detto, le note sono crittografate usando la MasterKey tramite crittografia AES/GCM 256bit e, per ulteriore sicurezza, ogni volta che crittografiamo una nota viene usato un nuovo Initialization Vector. Sia l’IV che il ciphertext sono salvati sul disco, “impossibili” da decifrare senza la Master Key.
Puoi trovare maggiori informazioni riguardo al progetto su GitHub.