Astăzi, dispozitivele noastre mobile sunt practic un jurnal în care stocăm totul: de la fotografii intime până la detaliile cărții noastre de credit. De aceea, nu putem lăsa securitatea la voia întâmplării. Când vine vorba de protejarea datelor sensibile pe Android, sistemul Android Keystore devine instrumentul cheie pentru a împiedica actorii rău intenționați să ne fure cheile criptografice, ceea ce îl face un pilon fundamental al securității Android.
Practic, acest sistem acționează ca un seif digital. În loc să stocheze cheile ca simple fișiere text în memoria telefonului (ceea ce ar fi un dezastru de securitate), le blochează într-un recipient securizat . Cel mai important, odată ce cheia este înăuntru, o puteți folosi pentru a cripta sau semna lucruri, dar nu poate fi niciodată extrasă din dispozitiv, nici măcar dacă sistemul de operare a fost compromis.
Cum funcționează securitatea în inima sistemului?
Keystore-ul nu se joacă cu cheile și protejează datele cheie în două moduri foarte clare. În primul rând, împiedică pe oricine din afara dispozitivului să fure datele cheie, deoarece blochează extragerea din procesele aplicației. În al doilea rând, asigură că, chiar dacă cineva reușește să obțină acces la sistem, nu poate folosi cheia pentru orice dorește; aplicațiile trebuie să definească utilizări autorizate pe care sistemul le impune cu strictețe.
Pentru a face acest lucru cu adevărat robust, Android se bazează pe hardware. Datele cheie nu trec prin procesele aplicației; atunci când trebuie să efectuați o operațiune, datele sunt trimise către un proces de sistem specializat . În plus, dacă telefonul este modern, cheile sunt conectate la Trusted Execution Environment (TEE) sau la Secure Element (SE). Dacă aveți un dispozitiv cu StrongBox , securitatea este dusă la nivelul următor, deoarece acest modul are propriul procesor, stocare securizată și un generator real de numere aleatorii, ceea ce îl face rezistent chiar și la atacuri fizice.
Pentru a determina dacă o cheie este cu adevărat protejată de hardware, dezvoltatorii pot folosi `getSecurityLevel()` în Android 10 și versiuni ulterioare. Dacă rezultatul este `TRUSTED_ENVIRONMENT` sau `STRONGBOX` , putem fi siguri că cheia se află într-o zonă izolată de procesorul principal.
Controlul accesului și autorizațiile de utilizare
Una dintre cele mai bune caracteristici ale acestui sistem este că puteți atribui „reguli” fiecărei chei atunci când o creați. Aceste reguli sunt imuabile; odată setate, nu pot fi modificate . De exemplu, puteți restricționa o cheie la funcționarea doar cu anumiți algoritmi , cum ar fi AES sau RSA, sau puteți defini un interval de timp precis în care cheia este validă.
Dar cel mai puternic lucru este autentificarea utilizatoruluiPuteți configura cheia să funcționeze doar dacă utilizatorul s-a autentificat recent folosind codul PIN, modelul sau biometrice (amprentă digitală sau față)), având în vedere că Deblocare facială 2D vs. 3D Oferă diferite niveluri de protecție. Există două moduri: unul care autorizează toate cheile pentru o anumită perioadă de timp după autentificare și un altul mai strict în care fiecare operațiune cripto trebuie autorizat individual printr-un BiometricPrompt.
Breloc vs. Furnizorul Android Keystore
Uneori s-ar putea să vă întrebați pe care să o alegeți. API-ul KeyChain este opțiunea ideală atunci când aveți nevoie de acreditări la nivel de sistem. Aici, utilizatorul alege, prin intermediul unei interfețe de sistem, ce acreditări dorește să partajeze cu aplicația. Acest lucru este foarte util pentru acreditările partajate între mai multe aplicații cu acordul explicit al proprietarului dispozitivului mobil.
Mai mult decât atât, Furnizor de depozite de chei Android Este conceput astfel încât fiecare aplicație să își gestioneze propriile chei în mod privat. Este opțiunea preferată atunci când doriți să doar aplicația ta au acces la secretele lor fără ca utilizatorul să fie nevoit să selecteze manual cheile dintr-o listă. Pentru a implementa acest lucru, se utilizează clase Java standard, cum ar fi KeyStore, KeyPairGenerator o KeyGenerator.
Implementare tehnică: Criptare și semnături

Pentru criptarea simetrică a datelor, AES-GCM este metoda cea mai recomandată . Această metodă nu numai că menține secretul, dar garantează și integritatea datelor prin detectarea dacă octeții criptați au fost modificați. Este esențial să ne amintim că fiecare operațiune generează un vector de inițializare (IV) unic , care trebuie stocat împreună cu datele criptate pentru a inversa operațiunea.
Dacă aveți nevoie de o semnătură digitală, soluția este să utilizați RSA . O pereche de chei (publică și privată) este generată în cadrul depozitului de chei. Cheia privată rămâne blocată într-un hardware securizat pentru a semna informațiile , în timp ce cheia publică poate fi distribuită pentru a verifica dacă mesajul nu a fost modificat și că provine de la sursa originală.
Arhitectura internă și evoluția sistemului
Sub capotă, sistemul este o mașinărie complexă. AndroidKeyStore Este fața vizibilă a aplicației, dar comunică cu daemon keystore prin Binder. Acest daemon gestionează keyblobs (chei criptate) și se bazează pe HAL-ul KeyMint (fostul Keymaster) pentru a efectua sarcini grele într-o lume securizată.
Drumul a fost lung: de la Android 6.0, care a introdus controlul accesului și primitivele AES/HMAC, trecând prin Android 7.0 cu certificare de chei și linkare de versiuni (pentru a împiedica un atacator să downgradeze sistemul de operare la o versiune vulnerabilă), până la Android 12. În această ultimă versiune, daemonul a fost rescris în Rust pentru a câștiga securitate și a fost introdus HAL-ul KeyMint, care acceptă acordurile de chei ECDH și limitele de utilizare a cheilor.
Perspectiva criminalistică și riscurile de extragere
Deși depozitul de chei este foarte robust, în lumea criminalisticii informatice există metode pentru a încerca extragerea informațiilor. Cheile sunt stocate criptate în /misc/keystore/ (sau într-o bază de date SQLite începând cu Android 12). Pentru a le proteja, un Cheie de criptare a cheii (KEK) derivate din valori fixe ale hardware-ului securizat.
Unii experți în criminalistică digitală încearcă decriptarea offline prin extragerea valorilor hardware prin vulnerabilități specifice procesorului (cum ar fi MTK sau Qualcomm). Dacă reușesc să obțină KEK (Keystore Key), pot decripta cheile din keystore și ulterior pot accesa bazele de date criptate ale aplicațiilor precum Signal sau Element , care de obicei folosesc keystore-ul pentru a proteja cheia principală a bazelor lor de date Realm.