Postępowanie w przypadku niebezpiecznego algorytmu szyfrowania

Te informacje są przeznaczone dla deweloperów, których aplikacje zawierają niebezpieczne wzorce algorytmu szyfrowania. Oznacza to, że tekst szyfrowany jest generowany ze statycznie obliczonym kluczem tajnym, ciągiem zaburzającym lub wektorem inicjującym (IV). Informacje o lokalizacjach niebezpiecznych algorytmów szyfrowania znajdują się w powiadomieniu Konsoli Play aplikacji. 

Rozwiązywanie problemu zgłaszanego w alertach dotyczących niebezpiecznych wzorców algorytmów szyfrowania 

Sprawdź statycznie obliczone klucze, wektory inicjujące lub ciągi zaburzające w operacjach szyfrowania i upewnij się, że wartości te są tworzone w bezpieczny sposób. Na przykład ten kod używa statycznie obliczonego klucza tajnego i statycznie obliczonego wektora inicjującego:

   // Alert konsoli odnosi się do tej metody
  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);
  }

  // Znajdują się tutaj niebezpieczny klucz i wektor inicjujący, które należy zmienić
  byte[] cipherText = encryptionUtil(“abcdef...”, “010203040506”, plainText);

Statycznie obliczone wartości
Statycznie obliczana wartość to taka, która jest identyczna przy każdym uruchomieniu aplikacji. Statycznie obliczone wartości kryptograficzne można wyodrębnić z aplikacji i użyć ich do ataku na jej zaszyfrowane dane. Nawet gdy przy użyciu złożonych metod zmienisz klucze, wektory inicjujące i ciągi zaburzające, pozostaną one niebezpieczne, jeśli zmiany te będą takie same przy każdym wykonaniu programu.

Sprawdzone metody w przypadku Androida
Zalecamy używanie usługi Jetpack Security do symetrycznej kryptografii. Jeśli Twoja aplikacja szyfruje klucze interfejsu API, informacje umożliwiające identyfikację lub inne dane wrażliwe, możesz użyć elementu EncryptedSharedPreferences, by w bezpieczny sposób przechowywać takie dane i nie martwić się o implementację kluczy tajnych, wektorów inicjujących i ciągów zaburzających. Więcej sprawdzonych metod i przykładów znajdziesz na tej stronie. Aby bezpiecznie przesyłać dane do innych systemów, programiści powinni używać protokołu TLS/SSL

Usługa Jetpack Security obsługuje symetryczne, uwierzytelnione szyfrowanie przy użyciu stworzonego przez Google projektu open source o nazwie Tink. W zaawansowanych zastosowaniach dotyczących operacji kryptograficznych niższego poziomu zalecamy bezpośrednie używanie biblioteki Tink.

Jeśli wymienione powyżej sprawdzone metody dla Androida nie sprawdzają się w Twojej sytuacji i musisz w sposób jawny zarządzać kluczami, wektorami inicjującymi i ciągami zaburzającymi, zalecamy zastosowanie tych standardów:

  1. Klucze tajne: symetrycznie klucze tajne muszą być nieprzewidywalne i tajne. Do szyfrowania danych lokalnych deweloperzy powinni tworzyć klucze tajne przy użyciu bezpiecznej losowości (lub z danych wygenerowanych przez użytkownika, jeśli używany jest element PBEKeySpecs) i przechowywać te klucze za pomocą systemu AndroidKeystore
  2. Wektory inicjujące: muszą być unikatowe i nieprzewidywalne w wielu wiadomościach, ale nie muszą być tajne. Deweloperzy powinni tworzyć wektory inicjujące przy użyciu kryptograficznie bezpiecznej losowości oraz przechowywać lub przesyłać je razem z powiązanym tekstem szyfrowanym.
  3. Ciągi zaburzające: muszą być unikatowe i nieprzewidywalne w wielu haszach, ale nie muszą być tajne. Deweloperzy powinni tworzyć te ciągi przy użyciu kryptograficznie bezpiecznej losowości oraz przechowywać lub przesyłać je razem z powiązanymi haszami.

Dalsze kroki

  1. Zaktualizuj aplikację w opisany powyżej sposób.
  2. Zaloguj się w Konsoli Play i prześlij zaktualizowaną wersję aplikacji.
Aplikacja zostanie ponownie sprawdzona. Jeśli nie została poprawnie zaktualizowana, ostrzeżenie nadal będzie się pojawiać. Ten proces może potrwać kilka godzin.

Chętnie Ci pomożemy

Jeśli masz pytania techniczne związane z tą luką, możesz je opublikować na stronie Stack Overflow, używając tagu „android-security”.
 

Czy to było pomocne?

Jak możemy ją poprawić?
false
Menu główne
4819137199041701283
true
Wyszukaj w Centrum pomocy
true
true
true
true
true
5016068
false
false