Dziś nasze urządzenia mobilne to praktycznie pamiętnik, w którym przechowujemy wszystko: od intymnych zdjęć po dane kart kredytowych. Dlatego nie możemy pozostawiać kwestii bezpieczeństwa przypadkowi. Jeśli chodzi o ochronę poufnych danych w systemie Android, system Android Keystore staje się kluczowym narzędziem zapobiegającym kradzieży kluczy kryptograficznych przez osoby trzecie, co czyni go fundamentalnym filarem bezpieczeństwa Androida.
Zasadniczo system ten działa jak cyfrowy sejf. Zamiast przechowywać klucze w postaci prostych plików tekstowych w pamięci telefonu (co byłoby katastrofą dla bezpieczeństwa), zamyka je w bezpiecznym pojemniku . Co najważniejsze, gdy klucz znajdzie się w środku, można go używać do szyfrowania lub podpisywania dokumentów, ale nigdy nie da się go wydobyć z urządzenia, nawet jeśli system operacyjny został zhakowany.
W jaki sposób zabezpieczenia stanowią istotę systemu?
Keystore nie manipuluje ustawieniami i chroni dane klucza na dwa bardzo proste sposoby. Po pierwsze, zapobiega kradzieży danych klucza przez osoby trzecie, blokując ich ekstrakcję z procesów aplikacji. Po drugie, gwarantuje, że nawet jeśli ktoś uzyska dostęp do systemu, nie będzie mógł użyć klucza w dowolnym celu; aplikacje muszą zdefiniować autoryzowane zastosowania , które system ściśle egzekwuje.
Aby zapewnić prawdziwą niezawodność, Android opiera się na sprzęcie. Kluczowe dane nie przechodzą przez procesy aplikacji; gdy trzeba wykonać operację, są one przesyłane do wyspecjalizowanego procesu systemowego . Co więcej, w nowoczesnych telefonach klucze są powiązane z Trusted Execution Environment (TEE) lub Secure Element (SE). Jeśli posiadasz urządzenie z StrongBox , bezpieczeństwo jest na wyższym poziomie, ponieważ moduł ten ma własny procesor, bezpieczną pamięć masową i prawdziwy generator liczb losowych, co czyni go odpornym nawet na ataki fizyczne.
Aby sprawdzić, czy klucz jest rzeczywiście chroniony sprzętowo, programiści mogą użyć funkcji `getSecurityLevel()` w systemie Android 10 i nowszych. Jeśli wynikiem jest `TRUSTED_ENVIRONMENT` lub `STRONGBOX` , możemy być pewni, że klucz znajduje się w obszarze odizolowanym od głównego procesora.
Kontrola dostępu i autoryzacje użytkowania
Jedną z najlepszych cech tego systemu jest możliwość przypisania „reguł” do każdego klucza podczas jego tworzenia. Reguły te są niezmienne; raz ustawione, nie można ich zmienić . Na przykład, można ograniczyć klucz do działania tylko z określonymi algorytmami , takimi jak AES lub RSA, lub zdefiniować precyzyjny przedział czasowy ważności klucza.
Ale najpotężniejszą rzeczą jest uwierzytelnianie użytkownikaMożesz skonfigurować klucz tak, aby działał tylko wtedy, gdy użytkownik niedawno uwierzytelnił się za pomocą kodu PIN, wzoru lub biometria (odcisk palca lub twarz)), biorąc pod uwagę, że Odblokowywanie twarzy 2D a 3D Oferuje różne poziomy ochrony. Dostępne są dwa tryby: jeden, który autoryzuje wszystkie klucze przez określony czas po uwierzytelnieniu, oraz drugi, bardziej rygorystyczny, w którym każda operacja kryptograficzna musi zostać autoryzowany indywidualnie za pośrednictwem BiometricPrompt.
Dostawca pęku kluczy kontra dostawca magazynu kluczy Androida
Czasami możesz się zastanawiać, którą opcję wybrać. API KeyChain to idealne rozwiązanie, gdy potrzebujesz danych uwierzytelniających dla całego systemu. W tym przypadku użytkownik wybiera, za pośrednictwem interfejsu systemowego, które dane uwierzytelniające chce udostępnić aplikacji. Jest to bardzo przydatne w przypadku współdzielenia danych uwierzytelniających między wieloma aplikacjami za wyraźną zgodą właściciela urządzenia mobilnego.
Ponadto, Dostawca magazynu kluczy Androida Został zaprojektowany tak, aby każda aplikacja zarządzała swoimi kluczami prywatnie. To preferowana opcja, gdy chcesz… tylko twoja aplikacja mają dostęp do swoich sekretów bez konieczności ręcznego wybierania kluczy z listy. Aby to zaimplementować, stosuje się standardowe klasy Java, takie jak: KeyStore, KeyPairGenerator o KeyGenerator.
Implementacja techniczna: Szyfrowanie i podpisy

W przypadku symetrycznego szyfrowania danych, AES-GCM jest najbardziej zalecaną metodą . Metoda ta nie tylko zapewnia poufność, ale także gwarantuje integralność danych poprzez wykrywanie, czy zaszyfrowane bajty zostały naruszone. Należy pamiętać, że każda operacja generuje unikalny wektor inicjujący (IV) , który musi zostać zapisany wraz z zaszyfrowanymi danymi, aby odwrócić operację.
Jeśli potrzebujesz podpisu cyfrowego, najlepszym rozwiązaniem jest użycie RSA . Para kluczy (publiczny i prywatny) jest generowana w magazynie kluczy. Klucz prywatny pozostaje zamknięty na bezpiecznym sprzęcie, aby podpisać informacje , podczas gdy klucz publiczny może być rozpowszechniany w celu weryfikacji, czy wiadomość nie została zmodyfikowana i pochodzi z oryginalnego źródła.
Architektura wewnętrzna i ewolucja systemu
Pod maską system jest skomplikowaną maszyną. Sklep z kluczami Android Jest to widoczna strona aplikacji, ale komunikuje się z demon magazynu kluczy przez Binder. Ten demon zarządza keyblobs (klucze szyfrowane) i opiera się na HAL KeyMint (dawniej Keymaster) do wykonywania ciężkich zadań w bezpiecznym świecie.
Droga była długa: od Androida 6.0, w którym wprowadzono kontrolę dostępu i prymitywy AES/HMAC, przez Androida 7.0 z certyfikacją kluczy i łączeniem wersji (aby uniemożliwić atakującemu zainstalowanie starszej wersji systemu operacyjnego, która jest podatna na ataki), aż do Androida 12. W najnowszej wersji demon został napisany w języku Rust w celu zwiększenia bezpieczeństwa, a także wprowadzono warstwę HAL firmy KeyMint, która obsługuje uzgadnianie kluczy ECDH i limity wykorzystania kluczy.
Perspektywa kryminalistyczna i ryzyko ekstrakcji
Chociaż magazyn kluczy jest bardzo solidny, w świecie informatyki śledczej istnieją metody pozwalające na wydobycie informacji. Klucze są przechowywane w postaci zaszyfrowanej. /misc/keystore/ (lub w bazie danych SQLite od wersji Android 12). Aby je chronić, Klucz szyfrowania klucza (KEK) wywodzące się z ustalonych wartości bezpiecznego sprzętu.
Niektórzy eksperci ds. informatyki śledczej próbują deszyfrować dane offline , wydobywając wartości sprzętowe z luk w zabezpieczeniach procesorów (takich jak MTK czy Qualcomm). Jeśli uda im się zdobyć klucz KEK (Keystore Key), mogą odszyfrować klucze w magazynie i uzyskać dostęp do zaszyfrowanych baz danych aplikacji takich jak Signal czy Element , które zazwyczaj wykorzystują magazyn kluczy do ochrony klucza głównego swoich baz danych Realm.