Ši informacija skirta programos (-ų), kurioje (-iose) yra nesaugių kriptografinio šifravimo šablonų, kūrėjams. T. y., kai šifruotasis tekstas sugeneruotas naudojant statistiškai apskaičiuotą saugos raktą, unikalų modifikatorių ar inicijavimo vektorių (IV). Nesaugias kriptografinio šifravimo vietas galite rasti programos „Play Console“ pranešime.
Kaip spręsti problemas, gavus įspėjimų dėl nesaugių kriptografinio šifravimo šablonų
Peržiūrėkite programą, ar joje nėra statiškai apskaičiuotų raktų, inicijavimo vektorių ir (arba) unikalių modifikatorių, naudojamų kriptografinėse šifravimo operacijose, ir įsitikinkite, kad šios vertės sudarytos saugiai. Pavyzdžiui, šiame kode naudojamas statiškai apskaičiuojamas slaptas raktas ir statiškai apskaičiuojamas inicijavimo vektorius: // „Console“ įspėjimas nurodo šį metodą
public byte[] encryptionUtil(String key, String iv, byte[] plainText) {
Cipher cipher = Cipher.getInstance(“AES/GCM/NoPadding”);
SecretKeySpec keySpec = new SecretKeySpec(key.getBytes(), “AES”);
GCMParameterSpec paramSpec = new GCMParameterSpec(256, iv.getBytes());
cipher.init(Cipher.ENCRYPT_MODE, keySpec, paramSpec);
return cipher.doFinal(plainText);
}
// Čia yra nesaugus raktas ir inicijavimo vektorius, kuriuos reikia pakeisti
byte[] cipherText = encryptionUtil(“abcdef...”, “010203040506”, plainText);
Statiškai apskaičiuotos vertės
Statistiškai apskaičiuota vertė – tai vertė, kuri yra tokia pati kas kartą vykdant programą. Statiškai apskaičiuotos kriptografinės vertės gali būti gaunamos iš jūsų programos ir naudojamos norint užpulti užšifruotus programos duomenis. Net jei prieš naudodamiesi raktais, inicijavimo vektoriais ir unikaliais modifikatoriais sudėtingais būdais juos pakeisite, jie liks nesaugūs, jei šie keitimai bus vienodi vykdant kiekvieną programą.
Geriausia „Android“ praktika
Rekomenduojame simetrinei kriptografijai išnaudoti „Jetpack Security“. Jei jūsų programa užšifruoja API raktus, asmens identifikavimo informaciją (AII) ar kitus neskelbtinus duomenis, siekiant patikimai apsaugoti šiuos duomenis gali būti naudojama „EncryptedSharedPreferences“, kad nereikėtų nerimauti dėl saugos raktų, inicijavimo vektorių ir unikalių modifikatorių diegimo. Daugiau geriausios praktikos ir kitų pavyzdžių rasite šiame puslapyje. Norėdami saugiai perduoti duomenis į kitas sistemas, kūrėjai turėtų naudoti TLS / SSL, kad duomenų perdavimas būtų saugus.
„Jetpack Security“ simetrinei įgaliotajai šifruotei tvarkyti naudoja „Google“ atvirojo šaltinio projektą „Tink“. Pažangesnio naudojimo atvejais, susijusiais su žemesnio lygio kriptografinėmis operacijomis, siūlome naudoti „Tink“ tiesiogiai.
Jei pirmiau minėtos „Android“ geriausios praktikos pavyzdžiai neatitinka jūsų atvejo ir jums reikia aiškiai tvarkyti raktus, inicijavimo vektorius ir unikalius modifikatorius, rekomenduojama laikytis toliau pateiktų standartų.
- Slapti raktai: simetriniai slapti raktai turi būti nenuspėjami ir slapti. Norėdami užšifruoti vietinius duomenis, kūrėjai turėtų konstruoti slaptus raktus naudodamiesi kriptografiškai saugiu atsitiktinumu (arba, naudojant „PBEKeySpecs“, pagal naudotojo sugeneruotus duomenis) ir saugoti šiuos raktus naudodami „AndroidKeystore“.
- Inicijavimo vektoriai: šie vektoriai turi būti unikalūs ir nenuspėjami keliuose pranešimuose, tačiau neprivalo būti slapti. Kūrėjai turėtų konstruoti inicijavimo vektorius, naudodamiesi kriptografiškai saugiu atsitiktinumu. Jie turėtų saugoti arba perduoti inicijavimo vektorius kartu su susijusiu šifru.
- Unikalūs modifikatoriai: šie modifikatoriai turi būti unikalūs ir nenuspėjami per kelis maišos veiksmus, tačiau neprivalo būti slapti. Kūrėjai turėtų konstruoti unikalius modifikatorius, naudodamiesi kriptografiškai saugiu atsitiktinumu. Jie turėtų saugoti arba perduoti unikalius modifikatorius kartu su susijusiu šifru.
Kiti veiksmai
- Atnaujinkite programą atlikdami anksčiau nurodytus veiksmus.
- Prisijunkite prie „Play Console“ ir pateikite atnaujintos versijos programą.