เอกสารฉบับนี้กล่าวถึงภาพรวมของเฟรมเวิร์กการจัดการสิทธิ์ดิจิทัล (DRM) และของ Android แนะนำอินเทอร์เฟซที่ปลั๊กอิน DRM ต้องใช้ เอกสารนี้ไม่ อธิบายกฎด้านความน่าเชื่อถือหรือกฎการปฏิบัติตามข้อกำหนดที่ DRM อาจกำหนดได้ สคีม
เฟรมเวิร์ก
แพลตฟอร์ม Android มีเฟรมเวิร์ก DRM แบบยืดหยุ่นที่ช่วยให้ แอปที่จัดการเนื้อหาที่ได้รับการคุ้มครองสิทธิ์ตามใบอนุญาต ข้อจำกัดที่เกี่ยวข้องกับเนื้อหา เฟรมเวิร์ก DRM รองรับ DRM จำนวนมาก แผนการ; รูปแบบ DRM ที่อุปกรณ์รองรับจะขึ้นอยู่กับผู้ผลิตอุปกรณ์ เฟรมเวิร์ก DRM มีอินเทอร์เฟซที่เป็นหนึ่งเดียวสำหรับนักพัฒนาแอปพลิเคชันและ ซ่อนความซับซ้อนของการดำเนินการ DRM เฟรมเวิร์ก DRM มอบ โหมดการทำงานสำหรับเนื้อหาที่มีการคุ้มครองและไม่ได้ป้องกัน รูปแบบ DRM สามารถกำหนด โมเดลการใช้งานที่ซับซ้อนตามข้อมูลเมตาของใบอนุญาต เฟรมเวิร์ก DRM มอบ การเชื่อมโยงระหว่างเนื้อหาและใบอนุญาต DRM รวมถึงจัดการการจัดการสิทธิ์ วิธีนี้ทำให้มีเดียเพลเยอร์สามารถแยกออกจากการปกป้องด้วย DRM หรือ ที่ไม่มีการปกป้อง ดู MediaDrm คลาสสามารถรับคีย์สำหรับการถอดรหัสสตรีมสื่อที่มีการป้องกัน
ความพร้อมใช้งานของเนื้อหาดิจิทัลที่หลากหลายนั้นสำคัญต่อผู้ใช้อุปกรณ์เคลื่อนที่ ถึง เผยแพร่เนื้อหาของตนในวงกว้าง นักพัฒนาแอป Android และเนื้อหาดิจิทัล ผู้เผยแพร่โฆษณาต้องการการติดตั้งใช้งาน DRM ที่สอดคล้องกันที่รองรับใน Android ระบบนิเวศ เพื่อให้เนื้อหาดิจิทัลนั้นพร้อมใช้งานบนอุปกรณ์ Android และเพื่อ เพื่อให้มี DRM ที่สม่ำเสมออย่างน้อย 1 รายการที่ใช้ได้ในทุกอุปกรณ์ Google DRM โดยไม่มีค่าธรรมเนียมใบอนุญาตในอุปกรณ์ Android ที่รองรับการใช้งาน ปลั๊กอิน DRM คือ ผสานรวมกับเฟรมเวิร์ก DRM ของ Android และใช้การปกป้องแบบใช้ฮาร์ดแวร์ได้ เพื่อรักษาความปลอดภัยของเนื้อหาพรีเมียมและข้อมูลรับรองของผู้ใช้
การปกป้องเนื้อหาที่ปลั๊กอิน DRM มีให้จะขึ้นอยู่กับความปลอดภัยและ ความสามารถในการปกป้องเนื้อหาของแพลตฟอร์มฮาร์ดแวร์พื้นฐาน ความสามารถของฮาร์ดแวร์ของอุปกรณ์ควรรวมถึงการเปิดเครื่องที่ปลอดภัยด้วยฮาร์ดแวร์ สร้างห่วงโซ่ความน่าเชื่อถือในการรักษาความปลอดภัยและการป้องกันคีย์การเข้ารหัส ความสามารถในการปกป้องเนื้อหาของอุปกรณ์ควรรวมถึงการปกป้อง ถอดรหัสเฟรมในอุปกรณ์และการป้องกันเนื้อหาผ่านเอาต์พุตที่เชื่อถือได้ กลไกการป้องกัน แพลตฟอร์มฮาร์ดแวร์บางอย่างไม่รองรับคุณลักษณะข้างต้นทั้งหมด และการปกป้องเนื้อหา จะไม่มีการใช้ความปลอดภัยใน ที่เดียวในสแต็ก แต่อาศัยการผสานรวมฮาร์ดแวร์แทน ซอฟต์แวร์ และบริการต่างๆ การผสมผสานของฟังก์ชันการรักษาความปลอดภัยของฮาร์ดแวร์ กลไกการเปิดเครื่องที่เชื่อถือได้ และระบบปฏิบัติการที่ปลอดภัยแยกต่างหากสำหรับการจัดการการรักษาความปลอดภัย มีความสำคัญอย่างยิ่งในการจัดหาอุปกรณ์ที่ปลอดภัย
สถาปัตยกรรม
เฟรมเวิร์ก DRM ออกแบบมาเพื่อใช้กับการนำไปใช้งานและ แสดงรายละเอียดเกี่ยวกับการใช้รูปแบบ DRM ที่เฉพาะเจาะจงใน ปลั๊กอิน DRM เฉพาะชุดรูปแบบ เฟรมเวิร์ก DRM มี API ที่ใช้งานง่าย การดำเนินการ DRM ที่ซับซ้อน การขอใบอนุญาต การจัดสรรอุปกรณ์ เชื่อมโยงเนื้อหา DRM และใบอนุญาตของ DRM และสุดท้ายสามารถถอดรหัสเนื้อหา DRM
เฟรมเวิร์ก DRM ของ Android นำไปใช้งานในเลเยอร์สถาปัตยกรรม 2 ชั้นดังนี้
- API เฟรมเวิร์ก DRM ซึ่งแสดงต่อผู้ใช้ผ่าน Android เฟรมเวิร์กของแอปพลิเคชัน
- เฟรมเวิร์ก DRM ของโค้ดแบบเนทีฟที่แสดงอินเทอร์เฟซสำหรับปลั๊กอิน DRM (agent) ในการจัดการการจัดการสิทธิ์และการถอดรหัสสำหรับแผน DRM ต่างๆ
โปรดดู Android Media DRM และ ดูรายละเอียดเพิ่มเติมได้ที่ Android Media Crypto
ปลั๊กอิน DRM
เมื่อเริ่มต้นระบบ เฟรมเวิร์ก DRM จะสแกนหาอินสแตนซ์/บริการ HAL (อธิบายไว้ในไฟล์ .rc
)
และปลั๊กอินต่างๆ เซิร์ฟเวอร์ DRM ของสื่อ (mediadrmserver
) สร้าง
ทั้งวัตถุ CryptoHal
และ DrmHal
CryptoHal
และ DrmHal
แล้วเรียกปลั๊กอินกับผู้ให้บริการ
การติดตั้งใช้งานที่เฉพาะเจาะจง
ปลั๊กอินควรใช้ HAL ที่เชื่อมโยงไว้ Binderized HALs ใช้องค์ประกอบ Android Interface Definition Language (AIDL) ซึ่งทำให้สามารถแทนที่เฟรมเวิร์กได้โดยไม่ต้องสร้าง HAL ใหม่
ปลั๊กอินสร้างขึ้นโดยผู้ให้บริการหรือผู้ผลิต SOC และวางในพาร์ติชัน /vendor
ไว้
อุปกรณ์ อุปกรณ์ทั้งหมดที่เปิดตัวด้วย Android 13 ขึ้นไปต้องรองรับ HAL ที่มีการเชื่อมโยงระหว่างอุปกรณ์
ในภาษา AIDL
การใช้งาน
อุปกรณ์ที่เปิดตัว GMS และ AOSP สำหรับ Android 13 ต้องใช้อินเทอร์เฟซ AIDL
วิธีใช้งาน API เฟรมเวิร์ก DRM ใหม่ด้วยปลั๊กอิน
- เพิ่มบริการปลั๊กอินไปยังไฟล์บิลด์ของอุปกรณ์
- อัปเดตไฟล์ Manifest ของอุปกรณ์
- เพิ่มสิทธิ์ SELinux
- สร้างไฟล์
.rc
ใน/vendor
- ติดตั้งปลั๊กอิน
มีการกำหนด API ไว้ใน IDrmPlugin.aidl
แต่ละเวอร์ชัน
ICryptoPlugin.aidl
IDrmFactory.aidl
และ ICryptoFactory.aidl
aidl/PLATFORM_ROOT/hardware/interfaces/drm/
เพิ่มบริการปลั๊กอินไปยังไฟล์บิลด์ของอุปกรณ์
เช่น หากต้องการเพิ่มการรองรับอินเทอร์เฟซ AIDL
ไฟล์ VENDOR DEVICE/device.mk
ต้องมีส่วน
android.hardware.drm-service.*
แพ็กเกจ:
PRODUCT_PACKAGES += \ android.hardware.drm-service.clearkey \ android.hardware.drm-service.widevine
อัปเดตไฟล์ Manifest ของอุปกรณ์
ไฟล์ vendor manifest.xml
ของอุปกรณ์ต้องมีรายการต่อไปนี้
<hal format="aidl"> <name>android.hardware.drm</name> <version>STABLE AIDL VERSION</version> <fqname>ICryptoFactory/clearkey</fqname> <fqname>IDrmFactory/clearkey</fqname> <fqname>ICryptoFactory/widevine</fqname> <fqname>IDrmFactory/widevine</fqname> </hal>
STABLE AIDL VERSION คือหมายเลขเวอร์ชันของ AIDL API แต่ละรุ่น (เช่น 1, 2) หรือเราขอแนะนำให้ใช้ vintf_fragments
เพิ่มสิทธิ์ SELinux
- เพิ่มใน
VENDOR DEVICE/sepolicy/vendor/file.te
type mediadrm_vendor_data_file, file_type, data_file_type;
- เพิ่มใน
VENDOR DEVICE/sepolicy/vendor/file_contexts
/vendor/bin/hw/android\.hardware\.drm-service\.clearkey u:object_r:hal_drm_clearkey_exec:s0
/data/vendor/mediadrm(/.*)? u:object_r:mediadrm_vendor_data_file:s0 - เพิ่มใน
device/sepolicy/vendor/hal_drm_clearkey.te
vndbinder_use(hal_drm_clearkey) allow hal_drm_clearkey servicemanager:binder { call transfer }; allow hal_drm_clearkey hal_drm_service:service_manager add; allow hal_drm_clearkey { appdomain -isolated_app }:fd use; get_prop(ramdump, public_vendor_default_prop)
สร้างไฟล์ RC ภายใต้ /vendor
ไฟล์ .rc
ระบุการดำเนินการที่ต้องทำเมื่อเปิดให้บริการ
โปรดดู Android Init Language เพื่อดูรายละเอียด
ติดตั้งปลั๊กอิน
- ใช้จุดแรกเข้า
main()
ในservice.cpp
ของปลั๊กอิน service. - ติดตั้งใช้งาน
ICryptoPlugin
,IDrmPlugin
ICryptoFactory
และIDrmFactory
- ใช้ API ใหม่ในปลั๊กอิน
รายละเอียดปลั๊กอิน DRM
ผู้ให้บริการปลั๊กอิน DRM นำ DrmFactory
, CryptoFactory
และ
ปลั๊กอิน DRM
โรงงาน Drm
คลาส DrmHal
ค้นหาบริการปลั๊กอิน DRM และโครงสร้างที่ลงทะเบียนไว้
ปลั๊กอินที่เกี่ยวข้องซึ่งรองรับชุดรูปแบบคริปโตที่ระบุผ่านDrmFactory
IDrmfactor คือจุดแรกเข้าหลักในการโต้ตอบกับ HAL ใน DRM ของผู้ให้บริการ ผ่าน createPlugin API ระบบใช้ createPlugin API ในการสร้างอินสแตนซ์ IDrmPlugin
::ndk::ScopedAStatus getSupportedCryptoSchemes( std::vector<::aidl::android::hardware::drm::Uuid>* _aidl_return);
getSupportedCryptoSchemes แสดงรายการรูปแบบคริปโตที่รองรับ สำหรับอินสแตนซ์ drm drm ของ AIDL
::ndk::ScopedAStatus isCryptoSchemeSupported( const ::aidl::android::hardware::drm::Uuid& in_uuid, const std::string& in_mimeType, ::aidl::android::hardware::drm::SecurityLevel in_securityLevel, bool* _aidl_return);
ตรวจสอบว่าโรงงานปลั๊กอินสามารถสร้างปลั๊กอิน DRM ที่สนับสนุนได้หรือไม่ รูปแบบคริปโตหนึ่งๆ ซึ่งระบุโดย UUID
::ndk::ScopedAStatus isContentTypeSupported(const std::string& in_mimeType, bool* _aidl_return);
ตรวจสอบว่าโรงงานปลั๊กอินสามารถสร้างปลั๊กอิน DRM ที่สนับสนุน
รูปแบบคอนเทนเนอร์สื่อที่ระบุโดย mimeType
::ndk::ScopedAStatus createPlugin( const ::aidl::android::hardware::drm::Uuid& in_uuid, const std::string& in_appPackageName, std::shared_ptr<::aidl::android::hardware::drm::IDrmPlugin>* _aidl_return);
สร้างปลั๊กอิน DRM สำหรับรูปแบบคริปโตที่ระบุโดย UUID
โรงงานคริปโต
คลาส CryptoHal
ค้นหาบริการปลั๊กอิน DRM และโครงสร้างที่ลงทะเบียนไว้
ปลั๊กอินที่เกี่ยวข้องซึ่งรองรับชุดรูปแบบคริปโตที่ระบุผ่านCryptoFactory
::ndk::ScopedAStatus isCryptoSchemeSupported( const ::aidl::android::hardware::drm::Uuid& in_uuid, bool* _aidl_return);
ตรวจสอบว่าโรงงานคริปโตสามารถสร้างปลั๊กอินคริปโตที่รองรับ รูปแบบคริปโตที่ระบุ โดย UUID
::ndk::ScopedAStatus createPlugin( const ::aidl::android::hardware::drm::Uuid& in_uuid, const std::vector<uint8_t>& in_initData, std::shared_ptr<::aidl::android::hardware::drm::ICryptoPlugin>* _aidl_return);
ตรวจสอบว่าโรงงานปลั๊กอินสามารถสร้างปลั๊กอินคริปโตที่รองรับ รูปแบบคริปโตที่ระบุ โดย UUID
API ปลั๊กอิน DRM
API กําหนดไว้ในhardware/interfaces/drm/aidl/aidl_api/android.hardware.drm/
VERSION/android/hardware/drm/IDrmPlugin.aidl
ฟิลด์
ไฟล์ IDrmPlugin.h
ไฟล์จะอยู่ในหรือหลังจากการสร้างเร็วๆ นี้