เข้ารหัส

โมดูล Conscrypt เร่งการปรับปรุงความปลอดภัยและปรับปรุงความปลอดภัยของอุปกรณ์โดยไม่ต้องอาศัยการอัปเดต OTA ใช้โค้ด Java และไลบรารีดั้งเดิมเพื่อจัดเตรียมการใช้งาน Android TLS รวมถึงฟังก์ชันการเข้ารหัส Android ส่วนใหญ่ เช่น ตัวสร้างคีย์ การเข้ารหัส และการแยกข้อความ Conscrypt มีให้บริการในรูปแบบ ไลบรารีโอเพ่นซอร์ส แม้ว่าจะมีความเชี่ยวชาญพิเศษบางอย่างเมื่อรวมอยู่ในแพลตฟอร์ม Android

โมดูล Conscrypt ใช้ BoringSSL ซึ่งเป็นไลบรารีเนทิฟที่เป็นทางแยกของ Google ของ OpenSSL และใช้ในผลิตภัณฑ์ต่างๆ ของ Google สำหรับการเข้ารหัสและ TLS (ที่โดดเด่นที่สุดคือ Google Chrome) ร่วมกับโค้ด Conscrypt (ทั้ง Java และโค้ดเนทีฟ) BoringSSL ไม่มีการเผยแพร่อย่างเป็นทางการ (ผู้ใช้ทุกคนสร้างจากส่วนหัว) และไม่รับประกันความเสถียรของ API หรือ ABI

การเปลี่ยนแปลงใน Android 14

Android 14 เปิดตัว Root Trust Store ที่อัปเดตได้ภายใน Conscrypt ใบรับรอง CA (หรือใบรับรอง) มอบความไว้วางใจสำหรับคีย์สาธารณะที่ใช้ภายใน Android และอินเทอร์เน็ตโดยรวม ใบรับรองเหล่านี้ได้รับการตรวจสอบเป็นประจำเพื่อให้แน่ใจว่ามีการลงนามด้วยการเข้ารหัสอย่างเหมาะสม ดังนั้นจึงต้องจัดเตรียมและจัดเก็บไว้ในอุปกรณ์ทั้งหมดที่ใช้ใบรับรองเหล่านี้

ก่อน Mainline นั้น Android จะจัดเก็บใบรับรองไว้ในพาร์ติชันระบบ (ใน system/ca-certificates ) และอัปเดตใบรับรองเหล่านี้ใน Android ทุกรุ่น ขณะนี้ ด้วย Mainline คุณสามารถอัปเดตใบรับรองได้บ่อยขึ้นโดยใช้การอัปเดตรถไฟ Mainline ความสามารถใหม่นี้ควรปรับปรุงกระบวนการอัปเดต ช่วยให้เรามีเวลาดำเนินการสำหรับปัญหาเร็วขึ้น และช่วยยืดอายุการใช้งานของอุปกรณ์

ตั้งแต่ Android 14 เป็นต้นไป ใบรับรองความน่าเชื่อถือรูทจะจัดเก็บไว้ในโมดูล Conscrypt APEX และพาร์ติชันระบบ แอปยังคงสามารถเลือกใบรับรองของตนเองและแก้ไขลักษณะการทำงานของใบรับรองได้โดยใช้ NetworkSecurityConfig

Android 14 รวมถึงการเปลี่ยนแปลงโมดูล Concrypt อื่น ๆ เหล่านี้:

  • เพิ่มการใช้งาน AES-CMAC MAC
  • เลิกใช้งานและลบการใช้งาน MAC `PBEwithHmacSHA2-*`
  • เพิ่มการสนับสนุนแบบจำกัดสำหรับคีย์ X25519 ข้อตกลงคีย์ และลายเซ็น
  • อัปเดต BoringSSL เพื่อความถูกต้องของ X.509
  • ยกเลิกการสนับสนุนใบรับรองที่ลงนาม MD5 ใน CertPath API สาธารณะ ใบรับรองดังกล่าวไม่ได้รับการยอมรับสำหรับการเชื่อมต่อ TLS ตั้งแต่ API ระดับ 16

การเปลี่ยนแปลงใน Android 10

Android 9 ไม่มี API สาธารณะเฉพาะสำหรับ Android สำหรับ Conscrypt แต่ใช้ผู้ให้บริการความปลอดภัยที่ใช้คลาสมาตรฐานสำหรับ Java Cryptography Architecture (JCA) รวมถึง Cipher และ MessageDigest และ Java Secure Socket Extension (JSSE) รวมถึง SSLSocket และ SSLEngine ผู้ใช้โต้ตอบกับคลาสเหล่านั้นและ Concrypt API ที่ไม่เปิดเผยต่อสาธารณะบางส่วนถูกใช้โดย libcore หรือโค้ดเฟรมเวิร์ก

Android 10 เพิ่มวิธี API สาธารณะจำนวนเล็กน้อยใน android.net.ssl ​​เพื่อเข้าถึงฟังก์ชัน Conscrypt ที่ไม่ได้เปิดเผยโดยคลาสภายใต้ javax.net.ssl Android 10 ยังมีสำเนา Bouncy Castle ที่บางเฉียบเพื่อมอบเครื่องมือเข้ารหัสลับที่ได้รับความนิยมน้อยกว่าโดยเป็นส่วนหนึ่งของ Android Runtime (ไม่รวมอยู่ในโมดูล Conscrypt)

รูปแบบและการขึ้นต่อกัน

โมดูล Conscrypt ( com.android.conscrypt ) ได้รับการแจกจ่ายเป็นไฟล์ APEX ที่มีโค้ด Conscrypt Java และไลบรารีดั้งเดิมของ Conscrypt ที่ลิงก์ไปยังไลบรารี Android NDK แบบไดนามิก (เช่น liblog ) ไลบรารีดั้งเดิมยังมีสำเนาของ BoringSSL ที่ได้รับการตรวจสอบแล้ว ( ใบรับรอง #3753 ) ผ่านทาง โปรแกรมตรวจสอบความถูกต้องของโมดูลการเข้ารหัสลับ (CMVP) ของ NIST

โมดูล Conscrypt เปิดเผย API ต่อไปนี้:

  • API สาธารณะ คือส่วนขยายของคลาสและอินเทอร์เฟซในแพ็คเกจภายใต้ java.* และ javax.* รวมถึงคลาสภายใต้ android.net.ssl.* รหัสแอปภายนอกไม่ได้เรียก Concrypt โดยตรง มาตรฐานแพลตฟอร์ม API ช่วยให้มั่นใจได้ว่า API เหล่านี้ยังคงเข้ากันได้แบบย้อนหลังและส่งต่อ
  • API แพลตฟอร์มหลัก คือ API ที่ซ่อนอยู่ซึ่งใช้โดยเฟรมเวิร์กเพื่อเข้าถึงฟังก์ชันการทำงานที่ไม่เปิดเผยต่อสาธารณะ สิ่งเหล่านี้ค่อนข้างจำกัด ผู้ใช้ที่ใหญ่ที่สุดคือ NetworkSecurityConfig ซึ่งขยาย Conscrypt trust manager (ส่วนประกอบที่ตรวจสอบใบรับรอง) เพื่อใช้ คุณสมบัติการกำหนดค่าความปลอดภัยเครือข่าย
  • API ภายในคอร์ นั้นจำกัดอยู่ที่ตัวสร้างอาร์กิวเมนต์เป็นศูนย์ซึ่งเรียกโดยกลไก JCA และ JSEE แบบสะท้อนกลับ