Perbaikan untuk Enkripsi Kriptografi yang Tidak Aman

Informasi ini ditujukan bagi developer yang memiliki aplikasi dengan pola enkripsi kriptografi yang tidak aman. Artinya, ciphertext yang dihasilkan bersama kunci rahasia, salt, atau initialization vector (IV) yang dikomputasi secara statis. Lokasi enkripsi kriptografi yang tidak aman dapat ditemukan di notifikasi Play Console untuk aplikasi Anda. 

Cara mengatasi pemberitahuan "Pola Enkripsi Kriptografi yang Tidak Aman" 

Tinjau aplikasi Anda untuk melihat kunci, initialization vector, dan/atau salt yang dikomputasi secara statis yang digunakan dalam operasi enkripsi kriptografi, dan pastikan nilai tersebut dibuat dengan aman. Misalnya, kode berikut menggunakan kunci rahasia dan initialization vector yang dapat dikomputasi secara statis:

   // Pemberitahuan Console merujuk pada metode ini
  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);
  }

  // Kunci dan initialization vector yang tidak aman ada di sini dan harus diubah
  byte[] cipherText = encryptionUtil(“abcdef...”, “010203040506”, plainText);

Nilai yang Dikomputasi secara Statis
Nilai yang dikomputasi secara statis adalah nilai yang selalu sama pada setiap eksekusi aplikasi Anda. Nilai kriptografi yang dikomputasi secara statis dapat diekstrak dari aplikasi Anda dan digunakan untuk menyerang data terenkripsi di aplikasi Anda. Sekalipun Anda memanipulasi kunci, initialization vector, dan salt dengan cara yang kompleks sebelum digunakan, nilai tersebut tetap tidak aman jika manipulasi yang sama digunakan untuk setiap eksekusi program.

Praktik Terbaik Android
Sebaiknya Anda menggunakan Jetpack Security untuk kriptografi simetris. Jika aplikasi Anda mengenkripsi kunci API, informasi identitas pribadi (PII), atau data sensitif lainnya, Anda dapat menggunakan EncryptedSharedPreferences untuk menyimpan data ini dengan aman tanpa perlu mengkhawatirkan penerapan kunci rahasia, initialization vector, dan salt. Praktik terbaik dan contoh lebih lanjut tersedia di halaman ini. Untuk mengirim data ke sistem lain dengan aman, developer sebaiknya menggunakan TLS/SSL untuk mengamankan data saat pengiriman. 

Jetpack Security memanfaatkan project open source Google, yang disebut Tink, untuk menangani enkripsi yang diautentikasi secara simetris. Untuk kasus penggunaan lanjutan mengenai operasi kriptografi tingkat lebih rendah, kami merekomendasikan penggunaan Tink secara langsung.

Jika praktik terbaik Android di atas tidak sesuai dengan kasus penggunaan Anda, dan Anda diwajibkan untuk mengelola kunci, initialization vector, dan salt secara eksplisit, maka kami merekomendasikan standar berikut:

  1. Kunci Rahasia: Kunci rahasia simetris harus benar-benar rahasia dan tidak dapat diprediksi. Untuk mengenkripsi data lokal, sebaiknya developer membuat kunci rahasia menggunakan pengacakan yang aman secara kriptografi (atau dari data buatan pengguna, jika menggunakan PBEKeySpecs) dan menyimpan kunci rahasia tersebut menggunakan AndroidKeystore
  2. Initialization Vector: Initialization vector harus unik dan tidak dapat diprediksi di berbagai pesan, tetapi tidak harus rahasia. Sebaiknya developer membuat initialization vector menggunakan pengacakan yang aman secara kriptografi. Sebaiknya developer menyimpan atau mengirimkan initialization vector beserta ciphertext terkait.
  3. Salt: Salt harus unik dan tidak dapat diprediksi di berbagai hash, tetapi tidak harus rahasia. Sebaiknya developer membuat salt menggunakan pengacakan yang aman secara kriptografi. Sebaiknya developer menyimpan atau mengirimkan salt beserta hash terkait.

Langkah berikutnya

  1. Update aplikasi Anda menggunakan langkah-langkah yang dijelaskan di atas.
  2. Login ke Play Console Anda, dan kirimkan versi aplikasi yang telah diupdate.
Aplikasi Anda akan ditinjau kembali dan, jika belum diupdate dengan benar, peringatan akan tetap ditampilkan. Proses ini dapat memerlukan waktu beberapa jam.

Kami siap membantu

Jika ada pertanyaan teknis lainnya, Anda dapat mengirim postingan ke Stack Overflow dan menggunakan tag “android-security”.
 

Apakah ini membantu?

Bagaimana cara meningkatkannya?
false
Menu utama
17756313008804242868
true
Pusat Bantuan Penelusuran
true
true
true
true
true
5016068
false
false