Google berkomitmen untuk mendorong terwujudnya keadilan ras bagi komunitas Kulit Hitam. Lihat caranya.
Halaman ini diterjemahkan oleh Cloud Translation API.
Switch to English

DRM

Ikon Android DRM HAL

Dokumen ini memberikan ringkasan framework pengelolaan hak digital (DRM) Android dan memperkenalkan antarmuka yang harus diterapkan oleh plugin DRM. Dokumen ini tidak menjelaskan aturan ketahanan atau aturan kepatuhan yang mungkin ditentukan oleh skema DRM.

Kerangka

Platform Android menyediakan kerangka kerja DRM yang dapat diperluas yang memungkinkan aplikasi mengelola konten yang dilindungi hak sesuai dengan batasan lisensi yang terkait dengan konten tersebut. Kerangka DRM mendukung banyak skema DRM; skema DRM mana yang didukung perangkat tergantung pada produsen perangkat. Kerangka DRM menyediakan antarmuka terpadu untuk pengembang aplikasi dan menyembunyikan kompleksitas operasi DRM. Kerangka kerja DRM menyediakan mode operasi yang konsisten untuk konten yang dilindungi dan tidak dilindungi. Skema DRM dapat menentukan model penggunaan yang kompleks dengan metadata lisensi. Kerangka DRM menyediakan asosiasi antara konten dan lisensi DRM, dan menangani manajemen hak. Hal ini memungkinkan pemutar media disarikan dari konten yang dilindungi DRM atau tidak dilindungi. Lihat MediaDrm agar kelas mendapatkan kunci untuk mendekripsi aliran media yang dilindungi.

Android DRM HAL
Gambar 1a. Lapisan abstraksi perangkat keras DRM sebelum Android 11
Android DRM HAL posting R
Gambar 1b. Lapisan abstraksi perangkat keras DRM dimulai di Android 11

Ketersediaan konten digital yang kaya penting bagi pengguna di perangkat seluler. Agar konten mereka tersedia secara luas, pengembang Android dan penerbit konten digital memerlukan implementasi DRM yang konsisten yang didukung di seluruh ekosistem Android. Untuk membuat konten digital tersebut tersedia di perangkat Android dan untuk memastikan bahwa setidaknya ada satu DRM yang konsisten tersedia di semua perangkat, Google menyediakan DRM tanpa biaya lisensi pada perangkat Android yang kompatibel. Plugin DRM terintegrasi dengan framework DRM Android dan dapat menggunakan perlindungan yang didukung perangkat keras 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. Kemampuan perangkat keras perangkat harus mencakup boot aman perangkat keras untuk membangun rantai kepercayaan keamanan dan perlindungan kunci kriptografi. Kemampuan perlindungan konten perangkat harus mencakup perlindungan bingkai yang didekripsi di perangkat dan perlindungan konten melalui mekanisme perlindungan keluaran tepercaya. Tidak semua platform perangkat keras mendukung semua fitur keamanan dan perlindungan konten di atas. Keamanan tidak pernah diterapkan di satu tempat dalam tumpukan, tetapi bergantung pada integrasi perangkat keras, perangkat lunak, dan layanan. Kombinasi fungsi keamanan perangkat keras, mekanisme boot tepercaya, dan OS aman yang terisolasi untuk menangani fungsi keamanan sangat penting untuk menyediakan perangkat yang aman.

Arsitektur

Kerangka DRM dirancang untuk menjadi implementasi agnostik dan mengabstraksi detail implementasi skema DRM spesifik dalam plugin DRM khusus skema. Kerangka kerja DRM mencakup API sederhana untuk menangani operasi DRM yang kompleks, memperoleh lisensi, menyediakan perangkat, mengaitkan konten DRM dan lisensinya, dan akhirnya mendekripsi konten DRM.

Kerangka DRM Android diimplementasikan dalam dua lapisan arsitektur:

  • API kerangka kerja DRM, yang diekspos ke aplikasi melalui kerangka aplikasi Android.
  • Kerangka kerja DRM kode asli, yang memperlihatkan antarmuka untuk plugin DRM (agen) guna menangani manajemen hak dan dekripsi untuk berbagai skema DRM.
Kerangka DRM Android
Gambar 2a. Kerangka DRM sebelum Android 11
Kerangka DRM Android
Gambar 2b. Kerangka DRM dimulai di Android 11

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

Plugin DRM

Saat memulai sistem, kerangka kerja DRM memindai instance / layanan HAL (dijelaskan dalam file .rc ) dan plugin ditemukan melalui registri HIDL. Media DRM Server ( mediadrmserver ) membuat objek CryptoHal dan DrmHal . CryptoHal dan DrmHal kemudian memanggil plugin dengan implementasi khusus vendor.

Plugin harus menerapkan HAL yang diikat. Binderized HAL menggunakan HAL interface definition language (HIDL) , yang memungkinkan kerangka kerja diganti tanpa harus membangun ulang HAL.

Plugin dibuat oleh vendor atau pembuat SOC dan diletakkan di partisi /vendor pada perangkat. Semua perangkat yang diluncurkan dengan Android 8.0 atau lebih tinggi harus mendukung HAL terikat yang ditulis dalam bahasa HIDL.

Penerapan

Untuk mengimplementasikan API framework DRM baru dengan plugin:

  1. Tambahkan layanan plugin ke file build perangkat.
  2. Perbarui manifes perangkat.
  3. Tambahkan izin SELinux.
  4. Buat file .rc bawah /vendor .
  5. Terapkan plugin.

API didefinisikan di setiap versi IDrmPlugin.hal , ICryptoPlugin.hal , IDrmFactory.hal , dan ICryptoFactory.hal

PLATFORM_ROOT/hardware/interfaces/drm/VERSION/

Menambahkan layanan plugin ke file build perangkat

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

Versi 1.0 hingga 1.2 sudah tidak digunakan lagi di R / Android 11. Perangkat yang meningkatkan versi ke R masih diizinkan untuk menjalankan versi 1.0 hingga 1.2. Namun, perangkat baru yang diluncurkan dengan R harus menjalankan hanya versi 1.3.


  PRODUCT_PACKAGES += \
    android.hardware.drm@1.0-impl \
    android.hardware.drm@1.0-service \
    android.hardware.drm@1.3-service.clearkey \
    android.hardware.drm@1.3-service.widevine

Memperbarui manifes perangkat

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


  <hal format="hidl">
    <name>android.hardware.drm</name>
      <transport>hwbinder</transport>
      <fqname>@1.3::ICryptoFactory/clearkey</fqname>
      <fqname>@1.3::IDrmFactory/clearkey</fqname>
      <fqname>@1.3::ICryptoFactory/widevine</fqname>
      <fqname>@1.3::IDrmFactory/widevine</fqname>
  </hal>

Sebagai alternatif, 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

    Kami merekomendasikan penggunaan ekspresi reguler untuk menentukan nomor versi guna menghindari pembaruan untuk rilis baru, misalnya:

    /vendor/bin/hw/android\.hardware\.drm@\[0-9]+\.[0-9]+-service\.clearkey
          u:object_r:hal_drm_clearkey_exec:s0
    /data/vendor/mediadrm(/.*)? u:object_r:mediadrm_vendor_data_file:s0

    Bergantian, perbarui nomor versi seperti yang ditunjukkan di bawah ini.

    /vendor/bin/hw/android\.hardware\.drm@1\.3-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
    allow hal_drm_clearkey mediadrm_vendor_data_file:dir create_dir_perms;
        allow hal_drm_clearkey mediadrm_vendor_data_file:file create_file_perms;
        

Membuat file .rc di bawah / vendor

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

Lihat Bahasa Android Init untuk detailnya.

Menerapkan plugin

  1. Implementasikan titik masuk main() di service.cpp dari layanan plugin.
  2. Implementasikan ICryptoPlugin , IDrmPlugin , ICryptoFactory , dan IDrmFactory .
  3. Terapkan API baru di plugin.

Detail plugin DRM

Vendor plugin DRM menerapkan plugin DrmFactory , CryptoFactory , dan DRM.

DrmFactory

Kelas DrmHal mencari layanan plugin DRM terdaftar dan membuat plugin terkait yang mendukung skema kripto tertentu melalui kelas DrmFactory .

IDrmFactory adalah titik masuk utama untuk berinteraksi dengan drm HAL vendor melalui API createPlugin. API createPlugin digunakan untuk membuat instance IDrmPlugin. 1.3 IDrmFactory harus selalu membuat 1.2 antarmuka IDrmPlugin, yang dikembalikan melalui metode 1.0 createPlugin.

Return<void> getSupportedCryptoSchemes(getSupportedCryptoSchemes_cb _hidl_cb);

Baru di 1.3 IDrmFactory, getSupportedCryptoSchemes mengembalikan daftar skema kripto yang didukung untuk HIDL drm HAL instance.

Return<bool> isCryptoSchemeSupported(const hidl_array<uint8_t, 16>uuid);

Menentukan apakah pabrik plugin dapat membuat plugin DRM yang mendukung skema kripto tertentu, yang ditentukan oleh UUID.

Return<bool> isContentTypeSupported(const hidl_string &mimeType);

Menentukan apakah pabrik plugin mampu membuat plugin DRM yang mendukung format wadah media tertentu yang ditentukan oleh mimeType .

Return<void> createPlugin(const hidl_array<uint8_t, 16>uuid,
        const hidl_string& appPackageName, createPlugin_cb _hidl_cb);

Membuat plugin DRM untuk skema kripto yang ditentukan oleh UUID.

CryptoFactory

Kelas CryptoHal mencari layanan plugin DRM terdaftar dan membuat plugin terkait yang mendukung skema kripto tertentu melalui kelas CryptoFactory .

Return<bool> isCryptoSchemeSupported(const hidl_array<uint8_t, 16>uuid);

Menentukan apakah pabrik kripto mampu membuat plugin kripto yang mendukung skema kripto tertentu, yang ditentukan oleh UUID.

Return<void> createPlugin(const hidl_array<uint8_t, 16>uuid,
        const hidl_vec<uint8_t>initData, createPlugin_cb _hidl_cb)

Menentukan apakah pabrik plugin dapat membuat plugin crypto yang mendukung skema crypto tertentu, yang ditentukan oleh UUID.

Plugin DRM

API didefinisikan di hardware/interfaces/drm/ VERSION /IDrmPlugin.hal . File IDrmPlugin.h sesuai dapat ditemukan di / Soong setelah build.