Te informacije so namenjene razvijalcem aplikacij, ki vsebujejo vzorce kriptografskega šifriranja, ki ni varno. To pomeni, da je šifrirano besedilo ustvarjeno s statično izračunanim skrivnim ključem, soljo ali incializacijskim vektorjem (IV). Lokacije kriptografskega šifriranja, ki ni varno, je mogoče najti v obvestilu Konzole Play za vašo aplikacijo.
Kako odpraviti opozorila »Vzorci kriptografskega šifriranja, ki ni varno«
Preverite, ali so v vaši aplikaciji statično izračunani ključi, incializacijski vektorji in/ali soli, ki se uporabljajo v postopkih kriptografskega šifriranja, in poskrbite, da so te vrednosti sestavljene varno. Spodnja koda na primer uporablja statično izračunljiv skrivni ključ in statično izračunljiv incializacijski vektor: // Console alert refers to this method
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);
}
// The unsafe key and initialization vector are here and should be changed
byte[] cipherText = encryptionUtil(“abcdef...”, “010203040506”, plainText);
Statično izračunane vrednosti
Statično izračunana vrednost je vrednost, ki je enaka ob vsaki izvedbi vaše aplikacije. Statično izračunane kriptografske vrednosti je mogoče pridobiti iz aplikacije in jih uporabiti za napad na šifrirane podatke aplikacije. Tudi če pred uporabo na zapletene načine spremenite ključe, incializacijske vektorje in soli, ti vseeno niso varni, če so spremembe enake za vsako izvedbo programa.
Najboljši postopki za Android
Priporočamo, da za simetrično kriptografijo uporabljate Jetpack Security. Če vaša aplikacija šifrira ključe API, podatke, ki omogočajo osebno prepoznavo ali druge občutljive podatke, lahko uporabite EncryptedSharedPreferences za varno shranjevanje teh podatkov, ne da bi vas skrbela izvedba skrivnih ključev, incializacijskih vektorjev ali soli. Dodatni najboljši postopki in primeri so na voljo na tej strani. Za varno prenašanje podatkov v druge sisteme morajo razvijalci uporabiti protokol TLS/SSL za varnost podatkov med prenosom.
Jetpack Security uporablja Googlov odprtokodni projekt Tink za obdelavo šifriranja s simetričnim preverjanjem pristnosti. Pri naprednih primerih uporabe, ki se nanašajo na kriptografske postopke nižje ravni, priporočamo neposredno uporabo projekta Tink.
Če omenjeni najboljši postopki za Android ne ustrezajo vašemu primeru uporabe in morate izrecno upravljati ključe, incializacijske vektorje in soli, priporočamo uporabo teh standardov:
- Skrivni ključi: simetrični skrivni ključi morajo biti nepredvidljivi in skrivni. Za šifriranje lokalnih podatkov morajo razvijalci sestaviti skrivne ključe z uporabo kriptografsko varne naključnosti (ali iz uporabniško ustvarjenih podatkov, če uporabljajo PBEKeySpecs), za shranjevanje skrivnih ključev pa uporabiti AndroidKeystore.
- Incializacijski vektorji: incializacijski vektorji morajo biti enolični in nepredvidljivi v več sporočilih, ni pa treba, da so skrivni. Razvijalci morajo incializacijske vektorje sestaviti s kriptografsko varno naključnostjo. Razvijalci morajo incializacijske vektorje shraniti ali prenesti skupaj s povezanim šifriranim besedilom.
- Soli: soli morajo biti enolične in nepredvidljive v več zgoščenih vrednostih, ni pa treba, da so skrivne. Razvijalci morajo soli sestaviti s kriptografsko varno naključnostjo. Razvijalci morajo soli shraniti ali prenesti skupaj s povezanimi zgoščenimi vrednostmi.
Naslednji koraki
- Posodobite aplikacijo z enim od zgoraj opisanih postopkov.
- Prijavite se v Konzolo Play in predložite posodobljeno različico aplikacije.