„Android Keystore“: saugumas, valdymas ir geriausia praktika sistemoje „Android“

  • „Android Keystore“ sistema apsaugo įrenginyje esančius kriptografinius raktus ir slaptus duomenis, neleisdama jų išgauti ir užtikrindama saugias operacijas.
  • Tai leidžia taikyti išplėstinius apribojimus, pvz., naudoti saugią įrangą, biometrinį autentifikavimą ir riboti raktų naudojimą bei galiojimą.
  • Tinkamas .keystore pasirašymo failo tvarkymas yra labai svarbus bet kurios „Google Play“ paskelbtos programėlės vientisumui ir saugumui.

„Keystore“ „Android“ sistema

Saugumas „Android“ sistemoje dar niekada nebuvo toks svarbus kaip šiandien. Mūsų programėlėms tvarkant vis daugiau slaptos informacijos, slaptažodžių, API raktų ir asmens duomenų apsauga tampa svarbiausiu prioritetu. Laimei, pati „Android“ operacinė sistema suteikia patikimą ir patikimą mechanizmą: „Keystore“ sistemaJei esate kūrėjas arba tiesiog norite suprasti, kaip veikia ši svarbi mobiliojo saugumo dalis, pateikiame išsamų vadovą, kuriame rasite visą svarbiausią informaciją ir daug daugiau.

Šiame straipsnyje ne tik sužinosite, kaip veikia „Android Keystore“, bet ir sužinosite pažangiausias kriptografinių raktų generavimo, tvarkymo ir naudojimo koncepcijas, kaip išvengti dažniausiai pasitaikančių saugumo spąstų, kaip automatizuoti raktų valdymą kūrimo komandose ir kodėl efektyvus raktų failų tvarkymas yra gyvybiškai svarbus bet kurios šiuolaikinės „Android“ programos vientisumui. Pasiruoškite, nes mes aiškiai ir suprantama kalba išskaidysime kiekvieną detalę, neprarasdami nė lašo techninio tikslumo.

Kas yra „Android Keystore“ ir kam ji skirta?

„Android Keystore“ iš esmės yra savotiška skaitmeninė saugykla arba seifas, kuriame pati operacinė sistema saugo kriptografinius raktus izoliuotai ir saugiai. Ši sistema sukurta taip, kad šie raktai, naudojami tiek duomenų šifravimui, tiek programų pasirašymui, nebūtų išgauti ar jais būtų manipuliuojama, net jei užpuolikas gautų prieigą prie programos failų sistemos ar paties įrenginio.

Didelė „Keystore“ pridėtinė vertė slypi tame, kad raktų medžiaga niekada nepalieka savo saugios talpyklos: Kai programa nori atlikti kriptografinę operaciją (užšifruoti, iššifruoti, pasirašyti, patikrinti), ji deleguoja operaciją sistemai, kuri naudoja vidinį raktą ir grąžina rezultatą, neleisdama tiesiogiai pasiekti rakto reikšmės.

Kiekvieno rakto naudojimą galima apriboti, pavyzdžiui, reikalaujant biometrinio arba slaptažodžio autentifikavimo prieš naudojant raktą, o tai leidžia padidinti saugumo lygį pagal kiekvienos programėlės poreikius.

„Keystore“ sistema yra vietinis ir rekomenduojamas sprendimas raktams valdyti „Android“ sistemoje, užtikrinant aukščiausią įmanomą saugumą.

Pagrindinės „Android Keystore“ funkcijos ir privalumai

„Android Keystore“ funkcijos

  • Rakto izoliacija: Raktai nėra pasiekiami už „Keystore“ konteinerio ribų nei pačiai programai, nei įrenginio failų sistemai (nei root vartotojams).
  • Aparatinės įrangos pagrindu veikiančių raktų palaikymas: Jei įrenginys palaiko, raktai generuojami ir saugomi saugioje įrangoje (pvz., TEE arba StrongBox), užtikrinant atsparumą fizinėms ir išgavimo atakoms.
  • Pritaikomi naudojimo apribojimai: Galimybė reikalauti biometrinio autentifikavimo (pirštų atspaudų, veido) arba ekrano užrakto prieš kiekvieną rakto naudojimą.
  • Nepavyko eksportuoti raktų: Sukūrus raktus „Keystore“ saugykloje, jų negalima išgauti ir naudoti už jos ribų.
  • Palaikymas keliems algoritmams ir dydžiams: AES, RSA, ECDSA, ECDH, HMAC, Triple DES ir kt.
  • Integracija su standartinėmis API: „Keystore“ naudoja standartinės klasės, tokios kaip KeyStore, KeyGenerator, KeyPairGenerator y KeyChain (visos sistemos prisijungimo reikalavimams).

Kodėl taip svarbu gerai valdyti raktų saugyklą?

„Keystore“ ne tik apsaugo nuo duomenų vagystės, bet ir yra „Android“ programėlės autentiškumo bei patikimumo pagrindas. Programėlės rakto failas (garsusis .jks arba .keystore) leidžia pasirašyti APK failą ir tik su šiuo parašu galite atnaujinti versijas „Google Play“. Jei šis failas bus prarastas arba pažeistas, užpuolikas gali pasirašyti kenkėjiškas programas jūsų vardu arba prarasite galimybę atnaujinti programinę įrangą.

Be to, Raktų saugykloje saugomi raktai gali užšifruoti slaptus duomenis, pvz., slaptažodžius, žetonus ar asmeninę informaciją., padeda išlaikyti privatumą net ir užpuolimo atveju.

Kaip „Android Keystore“ veikia viduje?

„Keystore“ sistema veikia kaip tarpininkas tarp programėlės ir saugios aparatinės įrangos (jei tokia yra), skaidriai valdydama rakto gyvavimo ciklą. Kai sugeneruojamas raktas, jis saugomas po identifikatoriaus pseudonimu ir gali būti naudojamas tik prisijungus prie to pseudonimo; rakto reikšmė niekada negaunama tiesiogiai.

ten du pagrindiniai apsaugos lygiai:

  • Apsauga nuo išorinio ištraukimo: Raktas niekada nepalieka saugios aplinkos. Jei kenkėjiška programa ar vartotojas pasiekia saugyklą, jie gali naudoti raktą tik per sistemą ir negali jo išgauti.
  • Vidiniai apribojimai: „Keystore“ gali apriboti kiekvieno rakto naudojimą tam tikromis operacijomis, laikotarpiais arba reikalauti, kad vartotojas autentifikuotųsi prieš kiekvieną naudojimą.

Įrenginiuose su „StrongBox“ arba „TEE“, raktai gali būti laikomi specialiuose lustuose arba enklavuose, užtikrinant maksimalią apsaugą nuo fizinių atakų ar kenkėjiškos programinės įrangos.

Raktų tipai ir dažniausiai naudojami „Android Keystore“

„Keystore“ naudojama programoms pasirašyti, vartotojams autentifikuoti ir vidiniams duomenims šifruoti. Veikia su:

  • Simetriniai raktai (AES, HMAC): Šifruoti ir iššifruoti informaciją įrenginyje.
  • Asimetriniai raktai (RSA, ECDSA, ECDH): Skaitmeniniams parašams, raktų mainams ir autentifikavimui.
  • Pažymėjimai: Susijęs su privačiais raktais, skirtais saugiam ryšiui ir autentifikavimui.

Tai taip pat leidžia naujausiose „Android“ versijose saugus esamų raktų importavimas ir atlikti atestacija įrodyti, kad raktas yra apsaugotas saugia įranga.

Raktų generavimas ir saugojimas: žingsnis po žingsnio

raktų saugykla

Norėdami sukurti raktą „Keystore“, galite naudoti Raktų generatorius simetriniams raktams arba Raktų porų generatorius asimetriniams raktams. AES rakto pavyzdys:

Pavyzdys (Java):

Raktų generatorius raktų generatorius = KeyGenerator.getInstance(KeyProperties.KEY_ALGORITHM_AES, "AndroidKeyStore");
raktų generatorius.init(
naujas „KeyGenParameterSpec.Builder“ („Mano saugaus slapyvardis“),
KeyProperties.PURPOSE_ENCRYPT | KeyProperties.PURPOSE_DECRYPT)
.setBlockModes(KeyProperties.BLOCK_MODE_GCM)
.setEncryptionPaddings(KeyProperties.ENCRYPTION_PADDING_NONE)
.build()
);
Slaptas raktas slaptas raktas = keyGenerator.generateKey();

Ką tai pasiekia?

  • Sugeneruokite AES raktą, saugomą slapyvardžiu „MySecureAlias“.
  • Apribokite jį naudoti tik šifravimui ir iššifravimui.
  • Izoliuokite raktą ir neleiskite jam išgauti ar netinkamai panaudoti.

Asimetrinių raktų atveju procesas yra panašus, bet su KeyPairGenerator ir kiekvienam algoritmui būdingi konkretūs parametrai.

Tvarkykite slaptažodžius mobiliajame telefone
Susijęs straipsnis:
Išsamus slaptažodžių tvarkymo ir apsaugos „Android“ sistemoje vadovas: saugumas, programos ir svarbiausi patarimai

Išplėstinė „Keystore“ (.jks/.keystore) failų automatizacija ir valdymas

Nors „Keystore“ apsaugo įrenginyje esančius raktus, saugus parašo failo (.jks arba .keystore) valdymas yra būtinas norint pasirašyti programas ir atnaujinti jas „Google Play“.

Dažna ir pavojinga klaida yra Įkelkite .keystore failą ir jo slaptažodžius į kodo saugyklasJei kas nors prie jų prisijungia, gali pasirašyti netikras paraiškas arba pažeisti oficialų parašą.

Kaip tai saugiai valdyti?

  • Neįtraukite pagrindinių failų į viešas arba nekontroliuojamas saugyklas.
  • Naudokite slaptų raktų tvarkytuvus, tokius kaip „HashiCorp Vault“, „AWS Secrets Manager“, „Azure Key Vault“. saugoti ir tvarkyti kredencialus.
  • Automatizuoti raktų saugyklos atkūrimą kūrimo procesuose, naudojant papildinius, kurie atsisiunčia failą tik saugioje aplinkoje.
  • Atskirkite raktų saugyklas pagal aplinką arba projektą, kontroliuojant, kas turi prieigą prie kiekvieno.
  • Naudojant aplinkos kintamuosius arba vietinius konfigūracijos failus kad versijų valdymo sistemoje nebūtų atskleisti kredencialai.

Saugumo ir geriausios praktikos diegimas kūrimo komandose

Rakto apsauga yra ne tik techninė, bet ir organizacinė. Dažna klaida yra ta, kad visi nariai turi prieigą prie gamybinių raktų saugyklų, o tai padidina saugumo riziką ir klaidų skaičių.

Keletas pagrindinių rekomendacijų:

  • Apriboti prieigą ir vaidmenis: Prieigą prie gamybinių raktų turėtų turėti tik tie asmenys, kurie yra atsakingi už leidimų pasirašymą.
  • Naudokite centralizuotą ir saugią saugyklą, kaip debesijos sistemos su kontroliuojamomis teisėmis ir saugiais ryšiais kūrimo metu.
  • Nustatyti automatizuotus procesus CI/CD, kad raktų saugykla būtų atsisiunčiama tik būtinose aplinkose ir sunaikinama po naudojimo, taip sumažinant riziką.

Pavyzdžiui, vietinės.ypatybės ir CI/CD galite apibrėžti:

# vietinės.ypatybės
connectionString=DefaultEndpointsProtocol=https;AccountName=yourProject;AccountKey=SuperSecret;EndpointSuffix=endpoint.com
konteinerioName=raktų saugykla
keyStoreFileName=KeyStore.jks
supportDocumentFilename=SupportFile.json

„Gradle“ papildinio, skirto nuotoliniam raktų saugyklos valdymui, pavyzdys

Išplėstinė parinktis – naudoti „Gradle“ papildinį, kuris valdo parašo failo atsisiuntimą ir konfigūravimą iš debesies saugyklos, pvz., „Azure Blob Storage“. Kaip tai veikia?

  • Įskiepis gauna prieigą prie saugyklos iš jūsų savybių arba kintamųjų, konteinerio pavadinimas, raktų saugyklos pavadinimas ir slaptažodžių failų pavadinimas.
  • Kūrimo proceso metu Atsisiųskite failus, pasirašykite APK ir, jei reikia, ištrinkite juos.
  • Ypatybės nėra saugomos įprastame „Gradle“ plėtinyje, bet yra skaitomi pradžioje, kad būtų galima konfigūruoti pasirašymo procesą.

SupportFile.json pavyzdys:

{
„parduotuvėsSlaptažodis“: „elSlaptažodisIšparduotuvėsSlaptažodis“,
„keyAlias“: „ElAliasDeLaKave“,
„keyPassword“: „elPasswordDeLaClave“
}

Išplėstinės parinktys: seifas, TEE ir aparatinės įrangos saugumas

Naujesniuose įrenginiuose „Keystore“ gali pasinaudoti pažangiomis aparatinės įrangos saugos funkcijomis:

  • Patikima vykdymo aplinka (TEE): Saugus procesoriaus enklavas, izoliuotas nuo operacinės sistemos, kuriame saugomi ir naudojami raktai.
  • Saugus skyrius: Speciali aparatinė įranga su savo procesoriumi, atmintimi ir atsparumu fizinėms bei šoninio kanalo atakoms.
  • Rakto patvirtinimas: Leidžia parodyti nuotolinėms sistemoms, kad raktas yra apsaugotas saugia įranga.

Norėdami patikrinti, ar raktas yra apsaugotas aparatine įranga, naudokite KeyInfo.getSecurityLevel() o KeyInfo.isInsideSecurityHardware().

Prieigos kontrolė: biometrinis autentifikavimas ir galiojimo laikas

Vienas iš pagrindinių „Keystore“ privalumų yra tai, kad galite apriboti raktų naudojimą konkrečiomis sąlygomis: reikalauti biometrinių duomenų, PIN kodo arba šablono ir apibrėžti galiojimo laiką po autentifikavimo.

Tai pasiekiama setUserAuthenticationRequired(true) ir kitus parametrus, kad kiekvienas naudojimas reikalauja papildomo vartotojo patvirtinimo.

Be to, jei pridedama nauja biometrinė informacija, raktas gali būti automatiškai anuliuotas arba likti galiojantis, priklausomai nuo konfigūracijos (setInvalidatedByBiometricEnrollment()).

Duomenų šifravimas ir iššifravimas žingsnis po žingsnio

Norint užšifruoti slaptus duomenis naudojant „Keystore“ raktą, paprastai laikomasi šio srauto:

  1. Gaukite arba sugeneruokite raktą pagal jo slapyvardį.
  2. Konfigūruokite šifrą AES / GCM / NoPadding režimu.
  3. Užšifruokite duomenis: cipher.init(Cipher.ENCRYPT_MODE, secretKey), išskirkite IV ir užšifruokite su cipher.doFinal().
  4. Išsaugokite IV ir užšifruotus duomenis.
  5. Norėdami iššifruoti: inicijuokite šifrą su IV ir raktu ir naudokite cipher.doFinal() norint gauti originalų tekstą.

Šis metodas užtikrina, kad raktas niekada nepalieka saugios aplinkos, net jei užšifruoti duomenys ir IV saugomi vietoje.

Įvesties valdymas ir slapyvardžių naudojimas

Sistema KeyStore Leidžia valdyti visus raktus naudojant slapyvardžius, sąrašus, tikrinti turimus raktus, ištrinti arba gauti informaciją. Naudokite tokius metodus kaip:

  • aliases(): Išvardykite visus slapyvardžius.
  • containsAlias(alias): Patikrinkite, ar yra slapyvardis.
  • deleteEntry(alias): Ištrina konkretų raktą.
  • getEntry(alias, protección): Atkurti raktą naudojant konkretų slapyvardį ir apsaugą.
  • size(): Bendras saugomų raktų skaičius.

Atminkite, kad slapyvardžiai yra didžiųjų ir mažųjų raidžių jautrios, todėl verta atidžiai tvarkyti vardus, kad išvengtumėte painiavos.

Dažnos klaidos ir kaip jų išvengti

  • Įkelkite .keystore failą į saugyklas: Labai pavojinga. Tvarkykite slaptažodžius naudodami saugias sistemas ir venkite atskleisti prisijungimo duomenis.
  • Gamybos raktų bendrinimas tarp projektų arba aplinkų: Pažeistas vienas raktas gali pakenkti visam saugumui.
  • Nereikalauti autentifikavimo slaptoms operacijoms: Labai svarbu apsaugoti veiksmus su svarbiais duomenimis naudojant biometrinius duomenis arba PIN kodą.
  • Vietinio rakto priklausomybė be automatizavimo: Patartina automatizuoti valdymą didelėse komandose, siekiant sumažinti klaidas ir riziką.

Integracija su moderniomis technologijomis: „Kotlin“ ir „Jetpack Compose“

„Keystore“ sistema sklandžiai integruojasi su „Kotlin“ programomis ir tokiomis kaip „Jetpack Compose“. Iš kodo galite generuoti, užšifruoti ir iššifruoti duomenis naudodami „Keystore“ funkcijas ir dinamiškai rodyti užšifruotą arba iššifruotą informaciją vartotojo sąsajoje. Daugiau informacijos rasite mūsų straipsnyje adresu (https://www.todoandroid.es/stiprinti-jūsų-android-pagrindinių-programų-saugumą/).

Supaprastintas pavyzdys programoje „Compose“:

@Composable
įdomus „SecureDataScreen“() {
val alias = „Mano raktas“
val tekstas = „Saugus pranešimas“.toByteArray()
...
Mygtukas (paspaudus = {
generateKey(alias)
val(encryption, iv) = encryptData(alias, text)
val iššifruota = decryptData(alias, cipher, iv)
...
}) {
Tekstas („Šifruoti ir iššifruoti“)
}
}

Kaip sugeneruoti raktų saugyklos failą, kad galėtumėte pasirašyti savo programą?

Norėdami sukurti .keystore failą, kurį būtų galima publikuoti „Google Play“, atlikite šiuos veiksmus „Android Studio“ arba komandinėje eilutėje:

  1. Skiltyje „Sukurti“ pasirinkite „Sukurti pasirašytą paketą / APK“.
  2. Vykdykite vedlio nurodymus, apibrėžkite slapyvardžius ir slaptažodžius.
  3. Išsaugokite .jks failą saugioje vietoje.
  4. Pasirinktinai, eksportuokite viešąjį raktą PEM formatu, kad prireikus galėtumėte juo bendrinti.
  5. Įkelkite viešąjį raktą į „Google Play Console“ skiltyje „Programų pasirašymas“.

Raktų valdymo ateitis „Android“ sistemoje

Aparatinės įrangos pagrindu veikianti apsauga, pažangi biometrinė autentifikacija ir integracija su profesionaliomis paslapčių valdymo sistemomis taps vis labiau paplitusios „Android“ sistemoje. Norėdami sužinoti daugiau apie programėlių saugumo stiprinimą, rekomenduojame peržiūrėti .

Investuojant į gerą „Keystore“ valdymą, naudojant automatizavimą ir geriausią praktiką, užtikrinama, kad jūsų programos ir vartotojai būtų ilgalaikėje perspektyvoje apsaugoti.

Įvaldyti raktų saugyklos naudojimą ir taikyti geriausią jos valdymo praktiką yra esminiai žingsniai siekiant išlaikyti „Android“ programų vientisumą, konfidencialumą ir pasitikėjimą jomis. Raktų apsauga yra veiksmingos ir patikimos mobiliųjų įrenginių kūrimo saugumo strategijos pagrindas.


Palikite komentarą

Jūsų elektroninio pašto adresas nebus skelbiamas. Privalomi laukai yra pažymėti *

*

*