DRM

Ikon Android DRM HAL

Dokumen ini menyediakan ringkasan framework Manajemen Hak Digital (DRM) Android dan memperkenalkan antarmuka yang harus diimplementasikan oleh plugin DRM. Dokumen ini tidak menjelaskan aturan keandalan atau aturan kepatuhan yang mungkin didefinisikan oleh DRM skema baru.

Kerangka kerja

Platform Android menyediakan framework DRM yang dapat diperluas yang memungkinkan aplikasi mengelola konten yang dilindungi hak sesuai dengan lisensi kendala-kendala yang terkait dengan konten. Framework DRM mendukung banyak DRM skema; skema DRM mana yang didukung perangkat tergantung pada produsen perangkat. Framework DRM menyediakan antarmuka terpadu untuk developer aplikasi dan akan menyembunyikan kompleksitas operasi DRM. Framework DRM memberikan insight yang untuk konten yang dilindungi dan tidak dilindungi. Skema DRM dapat menentukan model penggunaan yang kompleks dengan metadata lisensi. Framework DRM menyediakan asosiasi antara konten dan lisensi DRM, dan menangani pengelolaan hak. Hal ini memungkinkan pemutar media untuk dipisahkan dari konten yang dilindungi DRM, atau konten yang tidak dilindungi. Lihat MediaDrm agar class tersebut dapat memperoleh kunci untuk mendekripsi aliran media yang dilindungi.

HAL DRM Android
Gambar 1a. Abstraksi hardware DRM Lapisan sebelum Android 11
Android DRM HAL postingan R
Gambar 1b. Abstraksi hardware DRM Lapisan mulai dari Android 11

Ketersediaan konten digital yang lengkap penting bagi pengguna di perangkat seluler. Kepada membuat konten mereka tersedia secara luas, developer Android, dan konten digital penayang membutuhkan implementasi DRM yang konsisten dan didukung di seluruh platform Android ekosistem. Untuk membuat konten digital tersedia di perangkat Android dan memastikan bahwa setidaknya ada satu DRM yang konsisten tersedia di semua perangkat, Google menyediakan DRM tanpa biaya lisensi di perangkat Android yang kompatibel. Plugin DRM memiliki terintegrasi dengan framework DRM Android dan dapat menggunakan perlindungan yang didukung hardware untuk mengamankan konten premium dan kredensial pengguna.

Perlindungan konten yang disediakan oleh plugin DRM bergantung pada keamanan dan kemampuan perlindungan konten dari platform perangkat keras yang mendasarinya. Tujuan kemampuan perangkat keras dari perangkat harus mencakup {i>hardware secure boot<i} untuk membangun rantai kepercayaan keamanan dan perlindungan kunci kriptografis. Kemampuan perlindungan konten perangkat harus mencakup perlindungan frame yang didekripsi di perangkat dan perlindungan konten melalui output tepercaya mekanisme perlindungan ini. Tidak semua platform hardware mendukung semua hal di atas keamanan dan perlindungan konten. Keamanan tidak pernah diimplementasikan dalam satu tempat dalam tumpukan itu, tetapi sebaliknya bergantung pada integrasi perangkat keras, perangkat lunak, dan layanan. Kombinasi fungsi keamanan perangkat keras, sebuah mekanisme booting tepercaya, dan OS aman yang terisolasi untuk menangani keamanan sangat penting untuk menyediakan perangkat yang aman.

Arsitektur

Framework DRM dirancang agar tidak bergantung pada implementasi dan mengabstraksi detail implementasi skema DRM tertentu dalam plugin DRM khusus skema. Framework DRM mencakup API sederhana untuk ditangani operasi DRM yang kompleks, memperoleh lisensi, menyediakan perangkat, mengaitkan konten DRM dan lisensinya, dan terakhir, mendekripsi konten DRM.

Framework DRM Android diimplementasikan dalam dua lapisan arsitektur:

  • API framework DRM, yang diekspos ke aplikasi melalui Android aplikasi.
  • Framework DRM kode native, yang mengekspos antarmuka untuk plugin DRM (agen) untuk menangani manajemen dan dekripsi hak untuk berbagai skema DRM.
Framework DRM Android
Gambar 2a. Framework DRM sebelum Android 11
Framework DRM Android
Gambar 2b. Framework DRM mulai Android 11

Lihat Android DRM Media dan Android Media Crypto untuk mengetahui detail selengkapnya.

Plugin DRM

Saat sistem dimulai, framework DRM memindai instance/layanan HAL (dijelaskan dalam file .rc ) dan plugin ditemukan. Server DRM Media (mediadrmserver) membuat objek CryptoHal dan DrmHal. CryptoHal dan DrmHal lalu panggil plugin dengan vendor- implementasi yang spesifik.

Plugin harus menerapkan HAL binder. HAL Terbiner menggunakan Android Interface Definition Language (AIDL), yang memungkinkan penggantian framework tanpa harus membangun ulang HAL.

Plugin dibuat oleh vendor atau pembuat SOC dan ditempatkan di partisi /vendor di perangkat. Semua perangkat yang diluncurkan dengan Android 13 atau yang lebih baru harus mendukung HAL terbinderisasi yang ditulis dalam bahasa AIDL.

Implementasi

Rilis perangkat GMS dan AOSP untuk Android 13 harus menggunakan antarmuka AIDL.

Untuk mengimplementasikan API framework DRM baru melalui plugin:

  1. Tambahkan layanan plugin ke file build perangkat.
  2. Update manifes perangkat.
  3. Menambahkan izin SELinux.
  4. Buat file .rc di bagian /vendor.
  5. Implementasikan plugin.

API ditentukan dalam setiap versi IDrmPlugin.aidl, ICryptoPlugin.aidl, IDrmFactory.aidl, dan ICryptoFactory.aidl

aidl/PLATFORM_ROOT/hardware/interfaces/drm/

Menambahkan layanan plugin ke file build perangkat

Misalnya, untuk menambahkan dukungan antarmuka AIDL, file VENDOR DEVICE/device.mk harus menyertakan Paket android.hardware.drm-service.*:


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

Mengupdate manifes perangkat

File vendor manifest.xml untuk perangkat harus menyertakan entri berikut:

  <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 adalah nomor versi dari setiap rilis AIDL API (mis. 1, 2). Selain itu, sebaiknya gunakan vintf_fragments.

Menambahkan izin SELinux

  1. Tambahkan ke VENDOR DEVICE/sepolicy/vendor/file.te
    type mediadrm_vendor_data_file, file_type, data_file_type;
  2. Tambahkan ke 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. Tambahkan ke 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)
        

Membuat file RC di bagian /vendor

File .rc menentukan tindakan yang akan diambil saat layanan diluncurkan.

Lihat Bahasa Init Android untuk mengetahui detailnya.

Mengimplementasikan plugin

  1. Menerapkan titik entri main() di service.cpp plugin layanan.
  2. Implementasikan ICryptoPlugin, IDrmPlugin, ICryptoFactory, dan IDrmFactory.
  3. Implementasikan API baru dalam plugin.

Detail plugin DRM

Vendor plugin DRM mengimplementasikan DrmFactory, CryptoFactory, dan Plugin DRM.

DrmFactory

Class DrmHal menelusuri layanan dan konstruksi plugin DRM terdaftar plugin terkait yang mendukung skema kripto tertentu melalui DrmFactory .

IDrmFactory adalah titik masuk utama untuk berinteraksi dengan drm HAL vendor melalui createPlugin API. CreatePlugin API digunakan untuk membuat instance IDrmPlugin.

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

getsupportedCryptoSchemes menampilkan daftar skema kripto yang didukung untuk instance 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);

Menentukan apakah factory plugin mampu membangun plugin DRM yang mendukung skema kripto{i> <i}tertentu, yang ditentukan oleh UUID.

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

Menentukan apakah pabrik plugin dapat membangun plugin DRM yang mendukung format penampung media tertentu yang ditentukan oleh 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);

Membuat plugin DRM untuk skema kripto yang ditentukan oleh UUID.

Pabrik Kripto

Class CryptoHal menelusuri layanan dan konstruksi plugin DRM terdaftar plugin terkait yang mendukung skema kripto tertentu melalui CryptoFactory .

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

Menentukan apakah pabrik kripto dapat membangun plugin kripto yang mendukung skema kriptografis tertentu, yang ditentukan oleh 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);

Menentukan apakah pabrik plugin dapat membangun plugin kripto yang mendukung skema kriptografis tertentu, yang ditentukan oleh UUID.

API plugin DRM

API ditentukan di hardware/interfaces/drm/aidl/aidl_api/android.hardware.drm/ VERSION/android/hardware/drm/IDrmPlugin.aidl. Model File IDrmPlugin.h dapat ditemukan di luar/Segera setelah build.