Kryptografisk nøglehåndtering med Android Keystore System

  • Beskyttelse af kryptografisk materiale gennem lagring på sikker hardware såsom TEE og StrongBox.
  • Implementering af brugsbegrænsninger baseret på brugergodkendelse og gyldighedstid.
  • Teknisk differentiering mellem KeyChain API'en til globale legitimationsoplysninger og Android Keystore-udbyderen til individuelle apps.
  • Systemets arkitektoniske udvikling fra Keymaster til implementeringen af ​​KeyMint i nyere versioner af Android.

Kryptografisk nøglehåndtering med Android Keystore System

I dag er vores mobile enheder praktisk talt en dagbog, hvor vi gemmer alt: fra intime billeder til vores kreditkortoplysninger. Derfor kan vi ikke overlade sikkerheden til tilfældighederne. Når det kommer til at beskytte følsomme data på Android, bliver Android Keystore System det vigtigste værktøj til at forhindre ondsindede aktører i at stjæle vores kryptografiske nøgler, hvilket gør det til en grundlæggende søjle i Android-sikkerhed.

Grundlæggende fungerer dette system som et digitalt pengeskab. I stedet for at gemme nøgler som simple tekstfiler på telefonens lager (hvilket ville være en sikkerhedskatastrofe), låser det dem i en sikker beholder . Bedst af alt, når nøglen først er indeni, kan du bruge den til at kryptere eller underskrive ting, men den kan aldrig udvindes fra enheden, selv ikke hvis operativsystemet er blevet kompromitteret.

Hvordan fungerer sikkerheden i hjertet af systemet?

Nøglelageret roder ikke rundt og beskytter nøgledataene på to meget klare måder. For det første forhindrer det, at nogen uden for enheden stjæler nøgledataene, da det blokerer udtrækning fra applikationsprocesser. For det andet sikrer det, at selvom nogen formår at få adgang til systemet, kan de ikke bruge nøglen til hvad som helst; apps skal definere autoriserede anvendelser , som systemet strengt håndhæver.

For at gøre dette virkelig robust, er Android afhængig af hardware. Nøgledataene passerer ikke gennem appens processer; når du skal udføre en handling, sendes dataene til en specialiseret systemproces . Derudover, hvis telefonen er moderne, er nøglerne knyttet til Trusted Execution Environment (TEE) eller Secure Element (SE). Hvis du har en enhed med StrongBox , tages sikkerheden til det næste niveau, da dette modul har sin egen CPU, sikker lagring og en ægte tilfældig talgenerator, hvilket gør det modstandsdygtigt over for selv fysiske angreb.

For at afgøre, om en nøgle virkelig er beskyttet af hardware, kan udviklere bruge `getSecurityLevel()` i Android 10 og nyere. Hvis resultatet er `TRUSTED_ENVIRONMENT` eller `STRONGBOX` , kan vi være sikre på, at nøglen befinder sig i et område isoleret fra hovedprocessoren.

Hvad er Android System Key Verifier-5?
Relateret artikel:
Android System Key Verifier: Hvad det er, hvad det gør, og hvordan det påvirker din Android-sikkerhed.

Adgangskontrol og brugstilladelser

En af de bedste funktioner ved dette system er, at du kan tildele "regler" til hver nøgle, når du opretter den. Disse regler er uforanderlige; når de først er indstillet, kan de ikke ændres . For eksempel kan du begrænse en nøgle til kun at fungere med specifikke algoritmer , såsom AES eller RSA, eller definere en præcis tidsramme, hvor nøglen er gyldig.

Men det mest kraftfulde er brugergodkendelseDu kan konfigurere nøglen til kun at virke, hvis brugeren for nylig har godkendt sig med sin pinkode, mønster eller biometri (fingeraftryk eller ansigtsaftryk)), i betragtning af at 2D vs. 3D ansigtsoplåsning Den tilbyder forskellige beskyttelsesniveauer. Der er to tilstande: én, der autoriserer alle nøgler i et bestemt tidsrum efter godkendelse, og en anden, der er strengere, hvor hver kryptooperation skal godkendes individuelt gennem en BiometricPrompt.

Nøglering vs. Android Keystore-udbyder

Nogle gange spekulerer du måske på, hvilken en du skal vælge. KeyChain API'en er den ideelle løsning, når du har brug for systemomfattende legitimationsoplysninger. Her vælger brugeren, via en systemgrænseflade, hvilke legitimationsoplysninger de vil dele med appen. Dette er meget nyttigt for legitimationsoplysninger, der deles mellem flere applikationer med udtrykkeligt samtykke fra ejeren af ​​mobilenheden.

Administrer adgangskoder på mobilen
Relateret artikel:
Den ultimative guide til administration og beskyttelse af adgangskoder på Android: Sikkerhed, apps og vigtige tips

På den anden side Android Keystore-udbyder Det er designet således, at hver applikation administrerer sine egne nøgler privat. Det er den foretrukne løsning, når du vil bare din app have adgang til deres hemmeligheder uden at brugeren behøver manuelt at vælge nøgler fra en liste. For at implementere dette bruges standard Java-klasser, såsom KeyStore, KeyPairGenerator o KeyGenerator.

Teknisk implementering: Kryptering og signaturer

Kryptografisk nøglehåndtering med Android Keystore System

Til symmetrisk datakryptering er AES-GCM den mest anbefalede metode . Denne metode opretholder ikke kun hemmeligholdelse, men garanterer også dataintegriteten ved at detektere, om de krypterede bytes er blevet manipuleret. Det er afgørende at huske, at hver operation genererer en unik initialiseringsvektor (IV) , der skal gemmes sammen med de krypterede data for at kunne fortryde operationen.

Hvis du har brug for en digital signatur, er vejen frem at bruge RSA . Et nøglepar (offentlig og privat) genereres i nøglelageret. Den private nøgle forbliver låst i sikker hardware for at signere informationen , mens den offentlige nøgle kan distribueres for at verificere, at beskeden ikke er blevet ændret, og at den kommer fra den oprindelige kilde.

mobsf
Relateret artikel:
MobSF Framework: Omfattende sikkerhedsanalyse til Android-, iOS- og Windows Mobile-applikationer

Systemets interne arkitektur og udvikling

Under motorhjelmen er systemet en kompleks maskine. AndroidKeyStore Det er appens synlige ansigt, men det kommunikerer med nøglelager-dæmon gennem Binder. Denne dæmon administrerer keyblobs (krypterede nøgler) og er afhængig af HAL af KeyMint (tidligere Keymaster) til at udføre tunge løft i den sikre verden.

Vejen har været lang: fra Android 6.0, som introducerede adgangskontrol og AES/HMAC-primitiver, via Android 7.0 med nøglecertificering og versionslinkning (for at forhindre en angriber i at nedgradere operativsystemet til en sårbar version), til Android 12. I denne seneste version blev daemonen omskrevet i Rust for at øge sikkerheden, og KeyMints HAL blev introduceret, som understøtter ECDH- nøgleaftaler og grænser for nøglebrug.

Retsmedicinsk perspektiv og udvindingsrisici

Selvom nøglelageret er meget robust, findes der i computerforensikens verden metoder til at forsøge at udtrække informationen. Nøglerne opbevares krypteret i /misc/keystore/ (eller i en SQLite-database siden Android 12). For at beskytte dem, en Nøglekrypteringsnøgle (KEK) afledt af faste værdier for den sikre hardware.

Nogle digitale retsmedicinske eksperter forsøger offline dekryptering ved at udtrække hardwareværdier gennem processorspecifikke sårbarheder (såsom MTK eller Qualcomm). Hvis de formår at få fat i KEK (Keystore Key), kan de dekryptere nøglerne i nøglelageret og efterfølgende få adgang til krypterede databaser fra applikationer som Signal eller Element , der typisk bruger nøglelageret til at beskytte masternøglen til deres Realm-databaser.

Sikker mobil
Relateret artikel:
Bedste sikkerhedsapps til Android: Komplet opdateret guide

Tilføj som foretrukken kilde i Google