การแก้ไขช่องโหว่การเข้ารหัสลับที่ไม่ปลอดภัย

ข้อมูลนี้มีไว้สำหรับนักพัฒนาซอฟต์แวร์ของแอปที่มีรูปแบบการเข้ารหัสลับที่ไม่ปลอดภัย ซึ่งก็คือข้อความเข้ารหัสที่สร้างขึ้นด้วยคีย์ลับที่คำนวณแบบคงที่, Salt หรือเวกเตอร์การเริ่มต้น (IV) ดูตำแหน่งการเข้ารหัสลับที่ไม่ปลอดภัยได้ในการแจ้งเตือน Play Console สำหรับแอป 

วิธีแก้ไขการแจ้งเตือน “รูปแบบการเข้ารหัสลับที่ไม่ปลอดภัย” 

ตรวจสอบแอปเพื่อหาคีย์ที่คำนวณแบบคงที่ เวกเตอร์การเริ่มต้น และ/หรือ Salt ที่ใช้ในการเข้ารหัสลับและดูแลให้มีการสร้างค่าเหล่านี้อย่างปลอดภัย ตัวอย่างเช่น โค้ดต่อไปนี้ใช้คีย์ลับที่คำนวณแบบคงที่ได้และเวกเตอร์การเริ่มต้นที่คำนวณแบบคงที่ได้

   // การแจ้งเตือนของ Console อ้างอิงเมธอดนี้
  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);

ค่าที่คำนวณแบบคงที่
ค่าที่คำนวณแบบคงที่คือค่าที่เหมือนกันในการดำเนินการกับแอปทุกครั้ง ค่ารหัสลับที่คำนวณแบบคงที่จะแยกออกจากแอปและใช้เพื่อโจมตีข้อมูลที่เข้ารหัสของแอปได้ แม้ว่าคุณปรับเปลี่ยนคีย์ เวกเตอร์การเริ่มต้น และ Salt ด้วยวิธีที่ซับซ้อนก่อนใช้งาน ค่าเหล่านี้จะยังคงไม่ปลอดภัยหากการปรับเปลี่ยนเหล่านี้เหมือนกันทั้งหมดในการดำเนินการกับโปรแกรมทุกครั้ง

แนวทางปฏิบัติที่ดีที่สุดสำหรับ Android
เราขอแนะนำให้ใช้ Jetpack Security สำหรับการเข้ารหัสลับแบบสมมาตร หากแอปเข้ารหัสคีย์ API, ข้อมูลส่วนบุคคลที่ระบุตัวบุคคลนั้นได้ (PII) หรือข้อมูลที่ละเอียดอ่อนอื่นๆ คุณจะใช้ EncryptedSharedPreferences เพื่อจัดเก็บข้อมูลนี้อย่างปลอดภัยโดยไม่ต้องกังวลเกี่ยวกับการใช้คีย์ลับ เวกเตอร์การเริ่มต้น และ Salt ดูแนวทางปฏิบัติที่ดีที่สุดและตัวอย่างเพิ่มเติมในหน้านี้ สำหรับการส่งข้อมูลไปยังระบบอื่นๆ อย่างปลอดภัย นักพัฒนาซอฟต์แวร์ควรใช้ TLS/SSL เพื่อรักษาความปลอดภัยการส่งข้อมูล 

Jetpack Security ใช้โครงการโอเพนซอร์สของ Google อย่างเช่น Tink เพื่อจัดการการเข้ารหัสที่มีการตรวจสอบสิทธิ์แบบสมมาตร สำหรับ Use Case ขั้นสูงเกี่ยวกับการดำเนินการเข้ารหัสลับระดับต่ำกว่า เราขอแนะนำให้ใช้ Tink โดยตรง

หากแนวทางปฏิบัติที่ดีที่สุดสำหรับ Android ข้างต้นไม่ตรงกับ Use Case ของคุณ และคุณต้องจัดการคีย์ เวกเตอร์การเริ่มต้น และ Salt อย่างชัดแจ้ง เราขอแนะนำให้ปฏิบัติตามมาตรฐานเหล่านั้น

  1. คีย์ลับ: คีย์ลับแบบสมมาตรต้องเป็นแบบคาดเดาไม่ได้และเป็นความลับ สำหรับการเข้ารหัสข้อมูลในเครื่อง นักพัฒนาซอฟต์แวร์ควรสร้างคีย์ลับโดยใช้การสุ่มเพื่อความปลอดภัยแบบเข้ารหัสลับ (หรือจากข้อมูลที่ผู้ใช้สร้างขึ้น หากใช้ PBEKeySpecs) และจัดเก็บคีย์ลับโดยใช้ AndroidKeystore 
  2. เวกเตอร์การเริ่มต้น: เวกเตอร์การเริ่มต้นต้องไม่ซ้ำกันและคาดเดาไม่ได้ในข้อความหลายรายการแต่ไม่จำเป็นต้องเป็นความลับ นักพัฒนาซอฟต์แวร์ควรสร้างเวกเตอร์การเริ่มต้นโดยใช้การสุ่มเพื่อความปลอดภัยแบบเข้ารหัสลับ นักพัฒนาซอฟต์แวร์ควรจัดเก็บหรือส่งเวกเตอร์การเริ่มต้นพร้อมด้วยข้อความเข้ารหัสที่เกี่ยวข้อง
  3. Salt: Salt ต้องไม่ซ้ำกันและคาดเดาไม่ได้ในแฮชหลายรายการแต่ไม่จำเป็นต้องเป็นความลับ นักพัฒนาซอฟต์แวร์ควรสร้าง Salt โดยใช้การสุ่มเพื่อความปลอดภัยแบบเข้ารหัสลับ นักพัฒนาซอฟต์แวร์ควรจัดเก็บหรือส่ง Salt พร้อมด้วยแฮชที่เกี่ยวข้อง

ขั้นตอนถัดไป

  1. อัปเดตแอปโดยทำตามขั้นตอนที่ไฮไลต์อยู่ด้านบน
  2. ลงชื่อเข้าใช้ Play Console และส่งแอปเวอร์ชันที่อัปเดตแล้ว
แอปของคุณจะได้รับการตรวจสอบอีกครั้ง หากยังไม่อัปเดตแอปอย่างถูกต้อง คุณจะยังคงเห็นคำเตือน ขั้นตอนนี้อาจใช้เวลาหลายชั่วโมง

เราพร้อมช่วยเหลือคุณ

หากมีคำถามทางเทคนิคเกี่ยวกับช่องโหว่ คุณโพสต์ถามได้ที่ Stack Overflow และใช้แท็ก “android-security”
 

ข้อมูลนี้มีประโยชน์ไหม

เราจะปรับปรุงได้อย่างไร
false
เมนูหลัก
12709000515605312999
true
ค้นหาศูนย์ช่วยเหลือ
true
true
true
true
true
5016068
false
false