Tieto informácie sú určené pre vývojárov aplikácií, ktoré obsahujú vzory nebezpečného kryptografického šifrovania. Ide o text šifry, ktorý je generovaný pomocou staticky vypočítaného tajného kľúča, kryptografickej soli alebo inicializačného vektora (IV). Umiestnenia nebezpečného kryptografického šifrovania nájdete v upozornení služby Play Console týkajúcom sa vašej aplikácie.
Ako vyriešiť upozornenia „Vzory nebezpečného kryptografického šifrovania“
Skontrolujte, či sa vo vašej aplikácii nepoužívajú v rámci operácií kryptografického šifrovania staticky vypočítané kľúče, inicializačné vektory alebo kryptografické soli, a zaistite, aby sa tieto hodnoty vytvárali bezpečne. Nasledujúci kód napríklad používa staticky vypočítateľný tajný kľúč a staticky vypočítateľný inicializačný vektor: // Upozornenie služby Console odkazuje na túto metódu
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);
}
// Nebezpečný kľúč a inicializačný vektor sú uvedené nižšie a mali by byť zmenené
byte[] cipherText = encryptionUtil(“abcdef...”, “010203040506”, plainText);
Staticky vypočítané hodnoty
Staticky vypočítaná hodnota predstavuje hodnotu, ktorá zostáva rovnaká pri každom spustení aplikácie. Staticky vypočítané kryptografické hodnoty je možné z aplikácie extrahovať a použiť na napadnutie jej šifrovaných údajov. Aj ak pred použitím manipulujete s kľúčmi, inicializačnými vektormi a kryptografickými soľami komplexnými spôsobmi a tieto úpravy sú pri každom spustení programu rovnaké, dané prvky zostávajú nebezpečné.
Osvedčené postupy Androidu
Na symetrickú kryptografiu vám odporúčame používať zabezpečenie Jetpack. Ak vaša aplikácia šifruje kľúče API, údaje umožňujúce zistenie totožnosti alebo iné citlivé údaje, na zabezpečené uchovávanie týchto údajov bez nutnosti riešenia implementácie tajných kľúčov, inicializačných vektorov a kryptografických solí je možné použiť prvok EncryptedSharedPreferences Ďalšie osvedčené postupy a príklady sú k dispozícii na tejto stránke. Na bezpečný prenos údajov do iných systémov by vývojári mali používať protokol TLS/SSL, ktorý zabezpečí údaje počas prenosu.
Na spracovávanie symetrického šifrovania overenia používa zabezpečenie Jetpack open source projekt Tink od Googlu. V prípade pokročilejších prípadov použitia týkajúcich sa kryptografických operácií nižšej úrovne odporúčame použiť priamo službu Tink.
Ak osvedčené postupy Androidu uvedené vyššie nie sú vhodné pre vaše použitie a vyžadujete explicitnú správu kľúčov, inicializačných vektorov a kryptografických solí, odporúčame vám riadiť sa nasledujúcimi štandardmi:
- Tajné kľúče: Symetrické tajné kľúče musia byť nepredvídateľné a tajné. V prípade šifrovania miestnych údajov by vývojári mali vytvárať tajné kľúče pomocou kryptograficky zabezpečenej náhodnosti (alebo z údajov generovaných používateľmi v prípade použitia prvku PBEKeySpecs) a uchovávať ich pomocou funkcie AndroidKeystore.
- Inicializačné vektory: Inicializačné vektory musia byť jedinečné a nepredvídateľné vo viacerých správach, ale nemusia byť tajné. Vývojári by mali inicializačné vektory vytvárať pomocou kryptograficky zabezpečenej náhodnosti. Mali by byť prenášané a uchovávané spolu so spojeným šifrovaným textom.
- Kryptografické soli: Kryptografické soli musia byť jedinečné a nepredvídateľné vo viacerých hašoch, ale nemusia byť tajné. Vývojári by mali kryptografické soli vytvárať pomocou kryptograficky zabezpečenej náhodnosti. Mali by byť prenášané a uchovávané spolu so spojenými hašmi.
Ďalšie kroky
- Aktualizujte svoju aplikáciu pomocou pokynov zvýraznených vyššie.
- Prihláste sa do služby Play Console a odošlite aktualizovanú verziu svojej aplikácie.