Ове информације су намењене програмерима са апликацијама које садрже обрасце небезбедног криптографског шифровања. Односно, шифровани текст се генерише уз статички израчунат тајни кључ, со или вектор за иницијализацију (IV). Локације небезбедног криптографског шифровања можете да пронађете у обавештењу Play конзоле за вашу апликацију.
Како да отклоните проблеме са „обрасцима небезбедног криптографског шифровања“
Проверите да ли апликација има статички израчунате кључеве, векторе за иницијализацију и/или со који се користе у операцијама криптографског шифровања и уверите се да се ове вредности генеришу безбедно. На пример, следећи код користи статички израчунат тајни кључ и статички израчунат вектор иницијализације: // Упозорење конзоле односи се на овај метод
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);
}
// Небезбедни кључ и вектор за иницијализацију налазе се овде и треба да се измене
byte[] cipherText = encryptionUtil(“abcdef...”, “010203040506”, plainText);
Статички израчунате вредности
Статички израчуната вредност је вредност која је иста код сваког извршавања апликације. Статички израчунате криптографске вредности могу да се издвоје из апликације и користе за напад на шифроване податке апликације. Чак и ако мењате кључеве, векторе за иницијализацију и со на сложене начине пре коришћења, они остају небезбедни ако су ове измене исте за свако извршавање програма.
Најбоље праксе за Android
Препоручујемо вам да користите Jetpack Security за симетричну криптографију. Ако ваша апликација шифрује API кључеве, податке који могу да открију идентитет или друге осетљиве податке, EncryptedSharedPreferences може да се користи за безбедно чување тих података без бриге о примени тајних кључева, вектора за иницијализацију и соли. Додатне најбоље праксе и примери доступни су на овој страници. За безбедно преношење података на друге системе програмери треба да користе TLS/SSL да би заштитили податке у преносу.
Jetpack Security користи Google пројекат отвореног кода Tink за руковање симетричним шифровањем са потврдом идентитета. За напредне случајеве коришћења који се тичу криптографских операција нижег нивоа, предлажемо да директно користите Tink.
Ако претходно наведене најбоље праксе за Android нису примењиве на ваш случај коришћења и морате експлицитно да управљате кључевима, векторима за иницијализацију и сољу, препоручујемо да пратите ове стандарде:
- Тајни кључеви: Симетрични тајни кључеви морају да буду непредвидиви и тајни. За шифровање локалних података програмери треба да генеришу тајне кључеве помоћу криптографски безбедног насумичног разврставања (или из података које генеришу корисници ако се користи PBEKeySpecs) и да користе AndroidKeystore за чување тајних кључева.
- Вектори за иницијализацију: Вектори за иницијализацију морају да буду јединствени и непредвидиви за различите поруке, али не морају да буду тајни. Програмери треба да генеришу векторе за иницијализацију помоћу криптографски безбедног насумичног разврставања. Програмери треба да чувају или преносе векторе за иницијализацију заједно са повезаним шифрованим текстом.
- Со: Со мора да буде јединствена и непредвидива за различите хешеве, али не мора да буде тајна. Програмери треба да генеришу со помоћу криптографски безбедног насумичног разврставања. Програмери треба да чувају или преносе со заједно са повезаним шифрованим текстом.
Следећи кораци
- Ажурирајте апликацију помоћу корака наведених изнад.
- Пријавите се на Play конзолу и пошаљите ажурирану верзију апликације.