Tegenwoordig zijn onze mobiele apparaten praktisch een dagboek waarin we alles opslaan: van intieme foto's tot onze creditcardgegevens. Daarom kunnen we de beveiliging niet aan het toeval overlaten. Als het gaat om de bescherming van gevoelige gegevens op Android, is het Android Keystore System de belangrijkste tool om te voorkomen dat kwaadwillenden onze cryptografische sleutels stelen. Daarmee is het een fundamentele pijler van de Android-beveiliging.
In principe werkt dit systeem als een digitale kluis. In plaats van sleutels als simpele tekstbestanden op het interne geheugen van de telefoon op te slaan (wat een veiligheidsramp zou zijn), worden ze vergrendeld in een beveiligde container . Het beste van alles is dat je de sleutel, zodra deze zich binnenin bevindt, kunt gebruiken om dingen te versleutelen of te ondertekenen, maar dat deze nooit meer van het apparaat kan worden verwijderd , zelfs niet als het besturingssysteem is gehackt.
Hoe functioneert beveiliging in de kern van het systeem?
De Keystore pakt het serieus aan en beschermt de sleutelgegevens op twee zeer duidelijke manieren. Ten eerste voorkomt het dat iemand van buiten het apparaat de sleutelgegevens steelt, omdat het extractie vanuit applicatieprocessen blokkeert . Ten tweede zorgt het ervoor dat zelfs als iemand toegang tot het systeem verkrijgt, diegene de sleutel niet zomaar voor willekeurige doeleinden kan gebruiken; apps moeten geautoriseerd gebruik definiëren dat strikt door het systeem wordt gehandhaafd.
Om dit echt robuust te maken, vertrouwt Android op hardware. De belangrijkste gegevens gaan niet via de processen van de app; wanneer je een bewerking moet uitvoeren, worden de gegevens naar een gespecialiseerd systeemproces gestuurd . Bovendien zijn de sleutels, als de telefoon modern is, gekoppeld aan de Trusted Execution Environment (TEE) of het Secure Element (SE). Als je een apparaat met StrongBox hebt , wordt de beveiliging naar een hoger niveau getild, omdat deze module een eigen CPU, beveiligde opslag en een echte willekeurige-getallengenerator heeft, waardoor deze zelfs bestand is tegen fysieke aanvallen.
Om te bepalen of een sleutel daadwerkelijk door hardware wordt beschermd, kunnen ontwikkelaars in Android 10 en hoger de functie `getSecurityLevel()` gebruiken . Als het resultaat `TRUSTED_ENVIRONMENT` of `STRONGBOX` is , kunnen we er zeker van zijn dat de sleutel zich in een gebied bevindt dat is afgeschermd van de hoofdprocessor.
Toegangscontrole en gebruiksautorisaties
Een van de beste eigenschappen van dit systeem is dat je bij het aanmaken van elke sleutel 'regels' kunt toewijzen. Deze regels zijn onveranderlijk; eenmaal ingesteld, kunnen ze niet meer worden gewijzigd . Je kunt bijvoorbeeld een sleutel beperken tot specifieke algoritmen , zoals AES of RSA, of een precieze tijdsperiode definiëren waarin de sleutel geldig is.
Maar het krachtigste is de gebruikersauthenticatieJe kunt de sleutel zo configureren dat deze alleen werkt als de gebruiker zich recent heeft geauthenticeerd met zijn pincode, patroon of biometrie (vingerafdruk of gezicht)), gezien het feit dat de 2D versus 3D gezichtsontgrendeling Het biedt verschillende beveiligingsniveaus. Er zijn twee modi: een die alle sleutels gedurende een bepaalde tijd na authenticatie autoriseert, en een strengere modus waarbij elke crypto-operatie moet individueel worden geautoriseerd via een BiometricPrompt.
Keychain versus Android Keystore Provider
Soms vraag je je misschien af ​​welke je moet kiezen. De KeyChain API is de ideale optie wanneer je systeembrede inloggegevens nodig hebt. De gebruiker kiest hier via een systeeminterface welke inloggegevens hij of zij met de app wil delen. Dit is erg handig voor inloggegevens die tussen meerdere applicaties worden gedeeld, met de uitdrukkelijke toestemming van de eigenaar van het mobiele apparaat.
Bovendien is de Android Keystore-aanbieder Het is zo ontworpen dat elke applicatie zijn eigen sleutels privé beheert. Het is de voorkeursoptie wanneer je wilt dat... gewoon jouw app hebben toegang tot hun geheimen zonder dat de gebruiker handmatig sleutels uit een lijst hoeft te selecteren. Om dit te implementeren, worden standaard Java-klassen gebruikt, zoals KeyStore, KeyPairGenerator o KeyGenerator.
Technische implementatie: Versleuteling en digitale handtekeningen

Voor symmetrische dataversleuteling is AES-GCM de meest aanbevolen methode . Deze methode waarborgt niet alleen de geheimhouding, maar ook de data-integriteit door te detecteren of de versleutelde bytes zijn gemanipuleerd. Het is cruciaal om te onthouden dat elke bewerking een unieke initialisatievector (IV) genereert die samen met de versleutelde data moet worden opgeslagen om de bewerking ongedaan te kunnen maken.
Als je een digitale handtekening nodig hebt, is RSA de beste optie . Er wordt een sleutelpaar (publiek en privé) gegenereerd in de sleutelkluis. De privésleutel blijft beveiligd opgeslagen in hardware om de informatie te ondertekenen , terwijl de publieke sleutel kan worden verspreid om te verifiëren dat het bericht niet is gewijzigd en afkomstig is van de oorspronkelijke bron.
Interne architectuur en evolutie van het systeem
In feite is het systeem een ​​complexe machine. AndroidKeyStore Het is het zichtbare gezicht van de app, maar het communiceert met de sleutelopslag-daemon via Binder. Deze daemon beheert de keyblobs (versleutelde sleutels) en vertrouwt op de HAL van KeyMint (voorheen Keymaster) om zware klussen te klaren in de beveiligde wereld.
De weg ernaartoe was lang: van Android 6.0, dat toegangscontrole en AES/HMAC-primitieven introduceerde, via Android 7.0 met sleutelcertificering en versiekoppeling (om te voorkomen dat een aanvaller het besturingssysteem downgradet naar een kwetsbare versie), tot Android 12. In deze nieuwste versie werd de daemon herschreven in Rust voor meer beveiliging en werd KeyMint's HAL geïntroduceerd, die ECDH- sleutelovereenkomsten en gebruiksbeperkingen voor sleutels ondersteunt.
Forensisch perspectief en extractierisico's
Hoewel de sleutelkluis zeer robuust is, bestaan ​​er in de wereld van computerforensica methoden om te proberen de informatie te achterhalen. De sleutels worden versleuteld opgeslagen in /misc/keystore/ (of in een SQLite-database sinds Android 12). Om ze te beschermen, een Sleutelversleutelingssleutel (KEK) afgeleid van vaste waarden van de beveiligde hardware.
Sommige experts op het gebied van digitale forensische analyse proberen offline decryptie door hardwarewaarden te extraheren via processorspecifieke kwetsbaarheden (zoals MTK of Qualcomm). Als ze erin slagen de KEK (Keystore Key) te bemachtigen, kunnen ze de sleutels in de keystore decoderen en vervolgens toegang krijgen tot versleutelde databases van applicaties zoals Signal of Element , die de keystore doorgaans gebruiken om de hoofdsleutel van hun Realm-databases te beschermen.