แนวคิด

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

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

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

Android 15 จำกัดการใช้งาน TLS เวอร์ชัน 1.0 และ 1.1 ก่อนหน้านี้ Android ได้เลิกใช้งานเวอร์ชันเหล่านี้แล้ว แต่ตอนนี้ไม่อนุญาตให้แอปที่กําหนดเป้าหมายเป็น Android 15 ใช้เวอร์ชันดังกล่าว

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

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

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

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

Android 14 ยังมีการเปลี่ยนแปลงอื่นๆ ในโมดูล Conscrypt ดังนี้

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

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

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

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

รูปแบบและทรัพยากร Dependency

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

โมดูล Conscrypt จะแสดง API ต่อไปนี้

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