DRM (Quản lý bản quyền nội dung số)

Biểu tượng HAL DRM cho Android

Tài liệu này cung cấp thông tin tổng quan về khung quản lý quyền kỹ thuật số (DRM) của Android và giới thiệu các giao diện mà một trình bổ trợ DRM phải triển khai. Tài liệu này không mô tả các quy tắc về độ mạnh hoặc quy tắc tuân thủ có thể do DRM xác định hệ thống.

Khung

Nền tảng Android cung cấp khung DRM có thể mở rộng cho phép ứng dụng quản lý nội dung được bảo vệ quyền theo giấy phép những hạn chế liên quan đến nội dung. Khung DRM hỗ trợ nhiều DRM chương trình; các lược đồ DRM mà thiết bị hỗ trợ là tuỳ thuộc vào nhà sản xuất thiết bị. Khung DRM cung cấp một giao diện hợp nhất cho các nhà phát triển ứng dụng và giúp ẩn sự phức tạp của các hoạt động DRM. Khung DRM cung cấp chế độ hoạt động cho nội dung được bảo vệ và không được bảo vệ. Các lược đồ DRM có thể xác định các mô hình sử dụng phức tạp theo siêu dữ liệu giấy phép. Khung DRM cung cấp mối liên kết giữa nội dung và giấy phép DRM, đồng thời xử lý việc quản lý quyền. Điều này cho phép tóm tắt trình phát nội dung đa phương tiện từ các trình phát được bảo vệ bằng DRM hoặc nội dung không được bảo vệ. Xem MediaDrm cho lớp để lấy khoá nhằm giải mã luồng nội dung nghe nhìn được bảo vệ.

Lớp trừu tượng phần cứng (HAL) cho DRM trên Android
Hình 1a. Trừu tượng phần cứng DRM Lớp trước Android 11
Bài đăng HAL DRM cho Android
Hình 1b. Trừu tượng phần cứng DRM Lớp bắt đầu từ Android 11

Tính sẵn có của nội dung kỹ thuật số đa dạng thức có vai trò quan trọng đối với người dùng trên thiết bị di động. Người nhận cung cấp rộng rãi nội dung của họ, nhà phát triển Android và nội dung kỹ thuật số các nhà xuất bản cần triển khai DRM nhất quán được hỗ trợ trên Android hệ sinh thái. Để cung cấp nội dung kỹ thuật số đó trên thiết bị Android và để đảm bảo có ít nhất một DRM nhất quán trên tất cả các thiết bị, Google cung cấp DRM không mất phí giấy phép trên các thiết bị Android tương thích. Trình bổ trợ DRM được tích hợp với khung DRM của Android và có thể sử dụng biện pháp bảo vệ dựa trên phần cứng để bảo mật nội dung trả phí và thông tin đăng nhập của người dùng.

Khả năng bảo vệ nội dung do trình bổ trợ DRM cung cấp phụ thuộc vào tính bảo mật và khả năng bảo vệ nội dung của nền tảng phần cứng cơ bản. Chiến lược phát hành đĩa đơn khả năng phần cứng của thiết bị phải bao gồm tính năng khởi động an toàn phần cứng để thiết lập một chuỗi tin cậy về tính bảo mật và khả năng bảo vệ của khoá mã hoá. Khả năng bảo vệ nội dung của thiết bị phải bao gồm khả năng bảo vệ khung đã giải mã trong thiết bị và biện pháp bảo vệ nội dung thông qua một đầu ra đáng tin cậy cơ chế bảo vệ. Không phải nền tảng phần cứng nào cũng hỗ trợ tất cả những định dạng trên các tính năng bảo mật và bảo vệ nội dung. Bảo mật không bao giờ được triển khai trong một vị trí duy nhất trong ngăn xếp, mà thay vào đó sẽ dựa vào việc tích hợp phần cứng, phần mềm và dịch vụ. Việc kết hợp các chức năng bảo mật phần cứng, một cơ chế khởi động đáng tin cậy và một hệ điều hành bảo mật tách biệt để xử lý vấn đề bảo mật là rất quan trọng để cung cấp một thiết bị an toàn.

Kiến trúc

Khung DRM được thiết kế để hỗ trợ việc triển khai và tóm tắt các chi tiết của việc triển khai lược đồ DRM cụ thể trong một trình bổ trợ DRM dành riêng cho lược đồ. Khung DRM bao gồm các API đơn giản để xử lý các hoạt động DRM phức tạp, mua giấy phép, cung cấp thiết bị, liên kết nội dung DRM và giấy phép của nội dung đó rồi cuối cùng là giải mã nội dung DRM.

Khung DRM của Android được triển khai trong 2 lớp kiến trúc:

  • API khung DRM được hiển thị với các ứng dụng thông qua Android khung ứng dụng của Google.
  • Khung DRM mã gốc hiển thị giao diện cho các trình bổ trợ DRM (tác nhân) để xử lý việc quản lý và giải mã quyền cho nhiều lược đồ DRM.
Khung DRM của Android
Hình 2a. Khung DRM trước Android 11
Khung DRM của Android
Hình 2b. Khung DRM bắt đầu trên Android 11

Xem Android DRM cho nội dung đa phương tiện Android Media Crypto để biết thêm thông tin.

Trình bổ trợ DRM

Khi khởi động hệ thống, khung DRM quét tìm các thực thể/dịch vụ HAL (mô tả trong các tệp .rc ) và plugin được khám phá. Máy chủ DRM cho nội dung đa phương tiện (mediadrmserver) tạo cả đối tượng CryptoHalDrmHal. CryptoHalDrmHal sau đó gọi các trình bổ trợ bằng nhà cung cấp- những cách triển khai cụ thể.

Trình bổ trợ nên triển khai HAL liên kết. HAL được liên kết sử dụng Ngôn ngữ định nghĩa giao diện Android (AIDL), cho phép thay thế khung mà không phải tạo lại HAL.

Trình bổ trợ do các nhà cung cấp hoặc nhà sản xuất SOC và đặt vào phân vùng /vendor trên thiết bị. Tất cả thiết bị chạy Android 13 trở lên đều phải hỗ trợ lớp HAL liên kết được viết bằng ngôn ngữ AIDL.

Triển khai

Bản phát hành thiết bị GMS và AOSP cho Android 13 phải sử dụng giao diện AIDL.

Cách triển khai API khung DRM mới bằng một trình bổ trợ:

  1. Thêm dịch vụ trình bổ trợ vào tệp bản dựng của thiết bị.
  2. Cập nhật tệp kê khai thiết bị.
  3. Thêm quyền SELinux.
  4. Tạo một tệp .rc trong /vendor.
  5. Triển khai trình bổ trợ.

Các API được xác định trong từng phiên bản của IDrmPlugin.aidl, ICryptoPlugin.aidl, IDrmFactory.aidlICryptoFactory.aidl

aidl/PLATFORM_ROOT/hardware/interfaces/drm/

Thêm dịch vụ trình bổ trợ vào tệp bản dựng của thiết bị

Ví dụ: để thêm tính năng hỗ trợ giao diện AIDL, tệp VENDOR DEVICE/device.mk phải bao gồm Gói android.hardware.drm-service.*:


  PRODUCT_PACKAGES += \
    android.hardware.drm-service.clearkey \
    android.hardware.drm-service.widevine

Cập nhật tệp kê khai thiết bị

Tệp vendor manifest.xml cho thiết bị này phải bao gồm các mục sau:

  <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>

PHIÊN BẢN AIDL ỔN ĐỊNH là số phiên bản của mỗi bản phát hành API AIDL (ví dụ: 1, 2). Ngoài ra, chúng tôi khuyên bạn nên sử dụng vintf_fragments.

Thêm quyền SELinux

  1. Thêm vào VENDOR DEVICE/sepolicy/vendor/file.te
    type mediadrm_vendor_data_file, file_type, data_file_type;
  2. Thêm vào 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
  3. Thêm vào 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)
        

Tạo tệp RC trong /vendor

Tệp .rc chỉ định các thao tác cần thực hiện khi khởi chạy một dịch vụ.

Xem Ngôn ngữ khởi tạo cho Android để biết thông tin chi tiết.

Triển khai trình bổ trợ

  1. Triển khai điểm truy cập main() trong service.cpp của trình bổ trợ .
  2. Triển khai ICryptoPlugin, IDrmPlugin, ICryptoFactoryIDrmFactory.
  3. Triển khai các API mới trong trình bổ trợ.

Thông tin chi tiết về trình bổ trợ DRM

Nhà cung cấp trình bổ trợ DRM triển khai DrmFactory, CryptoFactory và Trình bổ trợ DRM.

Nhà máy Drm

Lớp DrmHal tìm kiếm các dịch vụ và cấu trúc trình bổ trợ DRM đã đăng ký các trình bổ trợ tương ứng hỗ trợ một lược đồ mật mã nhất định thông qua DrmFactory .

IDrmFactory là điểm truy cập chính để tương tác với HAL drm của nhà cung cấp thông qua API createPlugin. API createPlugin được dùng để tạo các bản sao IDrmPlugin.

::ndk::ScopedAStatus getSupportedCryptoSchemes(
    std::vector<::aidl::android::hardware::drm::Uuid>* _aidl_return);

getHỗ trợCryptoSchemes trả về danh sách các giao thức mã hoá được hỗ trợ cho phiên bản AIDL drm HAL.

::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);

Xác định xem nhà máy sản xuất trình bổ trợ có thể tạo các trình bổ trợ DRM hỗ trợ một giao thức mã hoá nhất định, do một mã nhận dạng duy nhất (UUID) chỉ định.

::ndk::ScopedAStatus isContentTypeSupported(const std::string& in_mimeType,
    bool* _aidl_return);

Xác định xem nhà máy sản xuất trình bổ trợ có thể tạo các trình bổ trợ DRM hỗ trợ định dạng vùng chứa phương tiện nhất định do mimeType chỉ định.

::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);

Tạo một trình bổ trợ DRM cho lược đồ mã hoá do UUID chỉ định.

Nhà máy tiền mã hoá

Lớp CryptoHal tìm kiếm các dịch vụ và cấu trúc trình bổ trợ DRM đã đăng ký các trình bổ trợ tương ứng hỗ trợ một lược đồ mật mã nhất định thông qua CryptoFactory .

::ndk::ScopedAStatus isCryptoSchemeSupported(
    const ::aidl::android::hardware::drm::Uuid& in_uuid,
    bool* _aidl_return);

Xác định xem nhà máy mã hoá có thể xây dựng các trình bổ trợ mã hoá hỗ trợ giao thức mã hoá cụ thể do một mã nhận dạng duy nhất (UUID) chỉ định.

::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);

Xác định xem nhà máy trình bổ trợ có thể xây dựng các trình bổ trợ mã hoá hỗ trợ giao thức mã hoá cụ thể do một mã nhận dạng duy nhất (UUID) chỉ định.

API trình bổ trợ DRM

Các API này được định nghĩa trong hardware/interfaces/drm/aidl/aidl_api/android.hardware.drm/ VERSION/android/hardware/drm/IDrmPlugin.aidl. Thuộc tính tương ứng Bạn có thể tìm thấy tệp IDrmPlugin.h ở bên ngoài/Soong sau khi tạo bản dựng.