Az alábbi információk olyan fejlesztőknek szólnak, akik alkalmazásaikban nem biztonságos módon alkalmaznak kriptográfiai titkosítási mintákat, egészen pontosan statikus módon kiszámított titkos kulcs, só (azaz salt) vagy inicializáló vektor (IV) segítségével állítanak elő titkosított szöveget. A Play Console értesítésén keresztül megtalálhatók az alkalmazás azon pontjai, ahol nem biztonságos kriptográfiai titkosítás zajlik.
A nem biztonságos kriptográfiai titkosítási minták kijavításával kapcsolatos értesítések
Keresd meg alkalmazásodban a kriptográfiai titkosításhoz használt statikusan kiszámított kulcsokat, inicializáló vektorokat és/vagy sókat, majd gondoskodj az értékek biztonságos előállításáról. Az alábbi kódrészletben statikusan kiszámított titkos kulcsra és inicializáló vektorra is láthatsz példát. // Erre a metódusra vonatkozik a Play Console figyelmeztetése
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);
}
// Itt van a nem biztonságos kulcs és inicializáló vektor, melyeket módosítani kell
byte[] cipherText = encryptionUtil(“abcdef...”, “010203040506”, plainText);
Statikusan kiszámított értékek
A statikusan kiszámított értékek olyan értékek, melyek az alkalmazás minden futtatásakor ugyanazok. A statikusan kiszámított kriptográfiai értékek kinyerhetők az alkalmazásból, és felhasználhatók az alkalmazás titkosított adatainak megtámadására. Az ilyen kulcsok, inicializáló vektorok és sók még akkor is sebezhetők maradnak, ha használat előtt valamilyen komplex módon manipulálod őket, mert minden futtatáskor azonos manipulációt hajtasz végre.
Androidos bevált módszerek
Javasoljuk, hogy a szimmetrikus kriptográfiai műveletekhez használd a Jetpack Security csomagot. Ha alkalmazásod API-kulcsokat, személyazonosításra alkalmas adatokat vagy más bizalmas adatokat titkosít, az EncryptedSharedPreferences segítségével anélkül tárolhatod őket biztonságos módon, hogy titkos kulcsok, inicializáló vektorok és sók megvalósításával kellene törődnöd. Ezen az oldalon további bevált módszereket és példákat találsz. Az adatok más rendszereknek való biztonságos továbbításához használj TLS/SSL technológiát.
A Jetpack Security a Google nyílt forráskódú Tink projektjével kezeli a szimmetrikusan hitelesített titkosítást. Az alacsonyabb szintű kriptográfiai műveleteket igénylő speciális esetekhez a Tink közvetlen használatát javasoljuk.
Ha az említett androidos bevált módszerek esetedben nem alkalmazhatók, hanem kézzel kell kezelned a kulcsokat, inicializáló vektorokat és sókat, akkor javasoljuk, hogy kövesd az alábbi alapelveket:
- Titkos kulcsok: A titkos kulcsoknak kiszámíthatatlannak és titkosak kell lenniük. Kriptográfiailag biztonságos véletlen számokkal állítsd elő a helyi adatok titkosítására szolgáló titkos kulcsokat (vagy felhasználótól kapott adatokkal, PBEKeySpec használata esetén), és az AndroidKeystore elemben tárold őket.
- Inicializáló vektorok: Az inicializáló vektoroknak egyedinek és több üzenet birtokában is kiszámíthatatlannak kell lenniük, de nem szükséges, hogy titkosak legyenek. Az inicializáló vektorokat kriptográfiailag biztonságos véletlen számokkal kell előállítani. Az inicializáló vektorokat a kapcsolódó titkosított szöveggel együtt kell tárolni és továbbítani.
- Sók: A sóknak egyediek és több hash birtokában is kiszámíthatatlannak kell lenniük, de nem szükséges, hogy titkosak legyenek. A sókat kriptográfiailag biztonságos véletlen számokkal kell előállítani. A sókat a kapcsolódó hash-sel együtt kell tárolni és továbbítani.
Következő lépések
- Frissítsd alkalmazásodat a fent leírtaknak megfelelően.
- Jelentkezz be a Play Console oldalán, és küldd be alkalmazásod frissített verzióját.