DRM

Android DRM HAL simgesi

Bu belge, Android dijital haklar yönetimi (DRM) çerçevesine genel bir bakış sağlar ve bir DRM eklentisinin uygulaması gereken arabirimleri tanıtır. Bu belge, bir DRM şeması tarafından tanımlanabilecek sağlamlık kurallarını veya uyumluluk kurallarını açıklamaz.

Çerçeve

Android platformu, uygulamaların haklarla korunan içeriği içerikle ilişkili lisans kısıtlamalarına göre yönetmesine izin veren genişletilebilir bir DRM çerçevesi sağlar. DRM çerçevesi birçok DRM şemasını destekler; Bir cihazın desteklediği DRM şemaları, cihaz üreticisine bağlıdır. DRM çerçevesi, uygulama geliştiricileri için birleşik bir arayüz sağlar ve DRM işlemlerinin karmaşıklığını gizler. DRM çerçevesi, korumalı ve korumasız içerik için tutarlı bir çalışma modu sağlar. DRM şemaları, lisans meta verilerine göre karmaşık kullanım modellerini tanımlayabilir. DRM çerçevesi, DRM içeriği ve lisansı arasındaki ilişkiyi sağlar ve hak yönetimini yönetir. Bu, medya yürütücünün DRM korumalı veya korumasız içerikten soyutlanmasını sağlar. Korumalı medya akışlarının şifresini çözmek için anahtarlar almak üzere sınıf için MediaDrm'ye bakın.

Android DRM HAL
Şekil 1a. Android 11'den önceki DRM donanım soyutlama Katmanı
Android DRM HAL sonrası R
Şekil 1b. Android 11'de başlayan DRM donanım soyutlama Katmanı

Zengin dijital içeriğin kullanılabilirliği, mobil cihaz kullanan kullanıcılar için önemlidir. İçeriklerini geniş çapta erişilebilir kılmak için Android geliştiricileri ve dijital içerik yayıncıları, Android ekosisteminde desteklenen tutarlı bir DRM uygulamasına ihtiyaç duyar. Bu dijital içeriği Android cihazlarda kullanılabilir kılmak ve tüm cihazlarda en az bir tutarlı DRM bulunduğundan emin olmak için Google, uyumlu Android cihazlarda lisans ücreti olmadan DRM sağlar. DRM eklentisi, Android DRM çerçevesine entegre edilmiştir ve premium içeriği ve kullanıcı kimlik bilgilerini güvence altına almak için donanım destekli korumayı kullanabilir.

DRM eklentisi tarafından sağlanan içerik koruması, temeldeki donanım platformunun güvenlik ve içerik koruma yeteneklerine bağlıdır. Aygıtın donanım yetenekleri, bir güvenlik güven zinciri ve kriptografik anahtarların korunması için donanımla güvenli önyüklemeyi içermelidir. Cihazın içerik koruma yetenekleri, cihazdaki şifresi çözülmüş çerçevelerin korunmasını ve güvenilir bir çıkış koruma mekanizması aracılığıyla içerik korumasını içermelidir. Tüm donanım platformları, yukarıdaki tüm güvenlik ve içerik koruma özelliklerini desteklemez. Güvenlik hiçbir zaman yığında tek bir yerde uygulanmaz, bunun yerine donanım, yazılım ve hizmetlerin entegrasyonuna dayanır. Donanım güvenlik işlevleri, güvenilir bir önyükleme mekanizması ve güvenlik işlevlerini işlemek için yalıtılmış bir güvenli işletim sistemi kombinasyonu, güvenli bir aygıt sağlamak için kritik önem taşır.

Mimari

DRM çerçevesi, uygulamadan bağımsız olacak şekilde tasarlanmıştır ve şemaya özgü bir DRM eklentisinde belirli DRM şeması uygulamasının ayrıntılarını özetler. DRM çerçevesi, karmaşık DRM işlemlerini yürütmek, lisans almak, cihazı sağlamak, DRM içeriğini ve lisansını ilişkilendirmek ve son olarak DRM içeriğinin şifresini çözmek için basit API'ler içerir.

Android DRM çerçevesi iki mimari katmanda uygulanmaktadır:

  • Android uygulama çerçevesi aracılığıyla uygulamalara sunulan bir DRM çerçeve API'si.
  • DRM eklentileri (aracıları) için çeşitli DRM şemaları için hak yönetimi ve şifre çözme işlemlerini yürütmek üzere bir arabirim ortaya çıkaran yerel bir kod DRM çerçevesi.
Android DRM Çerçevesi
Şekil 2a. Android 11'den önceki DRM çerçevesi
Android DRM Çerçevesi
Şekil 2b. Android 11'de başlayan DRM çerçevesi

Daha fazla ayrıntı için Android Media DRM ve Android Media Crypto'ya bakın.

DRM Eklentileri

Sistem başlangıcında, DRM çerçevesi HAL örneklerini / hizmetlerini ( .rc dosyalarında açıklanmıştır) tarar ve eklentiler HIDL kayıt defteri aracılığıyla keşfedilir. Media DRM Sunucusu ( mediadrmserver ) hem CryptoHal hem de DrmHal nesnelerini oluşturur. CryptoHal ve DrmHal daha sonra DrmHal özgü uygulamalarla eklentileri çağırır.

Eklentiler, bağlayıcı hale getirilmiş HAL'leri uygulamalıdır. Ciltlenmiş HAL'ler , çerçevenin HAL'leri yeniden oluşturmak zorunda kalmadan değiştirilmesine izin veren HAL arayüz tanımlama dilini (HIDL) kullanır.

Eklentiler, satıcılar veya SOC üreticileri tarafından oluşturulur ve aygıta bir /vendor bölümü yerleştirilir. Android 8.0 veya üstü ile başlatılan tüm cihazlar, HIDL dilinde yazılmış bağlayıcı hale getirilmiş HAL'leri desteklemelidir.

Uygulama

Bir eklenti ile yeni DRM çerçeve API'lerini uygulamak için:

  1. Cihazın derleme dosyalarına eklenti hizmeti ekleyin.
  2. Cihaz bildirimini güncelleyin.
  3. SELinux izinlerini ekleyin.
  4. /vendor .rc altında bir .rc dosyası oluşturun.
  5. Eklentiyi uygulayın.

API'ler IDrmPlugin.hal , ICryptoPlugin.hal , IDrmFactory.hal ve ICryptoFactory.hal her sürümünde tanımlanır

PLATFORM_ROOT/hardware/interfaces/drm/VERSION/

Cihaz derleme dosyalarına eklenti hizmeti ekleme

Örneğin, arayüz 1.3 desteği eklemek için VENDOR DEVICE /device.mk dosyası android.hardware.drm@1.3-service.* paketlerini içermelidir:

1.0 - 1.2 sürümleri R / Android 11'de kullanımdan kaldırılmıştır. R sürümüne yükseltme yapan cihazların 1.0 - 1.2 sürümlerini çalıştırmasına yine de izin verilmektedir. Ancak, R ile başlatılan yeni cihazlar yalnızca sürüm 1.3'ü çalıştırmalıdır.


  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

Cihaz bildirimini güncelleme

Aygıtın vendor manifest.xml dosyası aşağıdaki girişleri içermelidir:


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

Alternatif olarak, vintf_fragments kullanmanızı öneririz.

SELinux izinleri ekleme

  1. VENDOR DEVICE /sepolicy/vendor/file.te Ekle VENDOR DEVICE /sepolicy/vendor/file.te
    type mediadrm_vendor_data_file, file_type, data_file_type;
  2. VENDOR DEVICE /sepolicy/vendor/file_contexts

    Yeni sürümler için güncelleme yapmaktan kaçınmak amacıyla sürüm numaralarını belirtmek için normal ifadeler kullanmanızı öneririz, örneğin:

    /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

    Alternatif olarak, sürüm numaralarını aşağıda gösterildiği gibi güncelleyin.

    /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. device/sepolicy/vendor/hal_drm_clearkey.te ekle
    allow hal_drm_clearkey mediadrm_vendor_data_file:dir create_dir_perms;
        allow hal_drm_clearkey mediadrm_vendor_data_file:file create_file_perms;
        

/ Vendor altında bir .rc dosyası oluşturma

.rc dosyası, bir hizmet başlatıldığında gerçekleştirilecek eylemleri belirtir.

Ayrıntılar için Android Başlangıç ​​Diline bakın.

Eklentiyi uygulamak

  1. Eklenti hizmetinin service.cpp main() giriş noktasını uygulayın.
  2. ICryptoPlugin , IDrmPlugin , ICryptoFactory ve IDrmFactory .
  3. Eklentiye yeni API'leri uygulayın.

DRM eklentisi ayrıntıları

DRM eklenti satıcıları DrmFactory , CryptoFactory ve DRM eklentisini uygular.

DrmFactory

DrmHal sınıfı, kayıtlı DRM eklenti hizmetlerini arar ve DrmFactory sınıfı aracılığıyla belirli bir kripto şemasını destekleyen ilgili eklentileri oluşturur.

IDrmFactory, createPlugin API'si aracılığıyla bir satıcının drm HAL'i ile etkileşim kurmak için ana giriş noktasıdır. CreatePlugin API, IDrmPlugin örnekleri oluşturmak için kullanılır. 1.3 IDrmFactory her zaman 1.0 createPlugin yöntemiyle döndürülen 1.2 IDrmPlugin arabirimleri oluşturmalıdır.

Return<void> getSupportedCryptoSchemes(getSupportedCryptoSchemes_cb _hidl_cb);

1.3 IDrmFactory'de yeni olan getSupportedCryptoSchemes, HIDL drm HAL örneği için desteklenen kripto şemalarının bir listesini döndürür.

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

Eklenti fabrikasının, bir UUID tarafından belirtilen belirli bir şifreleme düzenini destekleyen DRM eklentileri oluşturup oluşturamayacağını belirler.

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

Eklenti fabrikasının, mimeType tarafından belirtilen belirli bir ortam kapsayıcı biçimini destekleyen DRM eklentileri oluşturup oluşturamayacağını belirler.

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

UUID tarafından belirtilen şifreleme şeması için bir DRM eklentisi oluşturur.

CryptoFactory

CryptoHal sınıfı, kayıtlı DRM eklenti hizmetlerini arar ve CryptoFactory sınıfı aracılığıyla belirli bir kripto düzenini destekleyen ilgili eklentileri oluşturur.

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

Kripto fabrikasının, bir UUID tarafından belirtilen belirli bir kripto düzenini destekleyen kripto eklentileri oluşturup oluşturamayacağını belirler.

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

Eklenti fabrikasının, bir UUID tarafından belirtilen belirli bir kripto düzenini destekleyen kripto eklentileri oluşturup oluşturamayacağını belirler.

DRM eklentisi

API'ler, hardware/interfaces/drm/ VERSION /IDrmPlugin.hal . Karşılık gelen IDrmPlugin.h dosyası, IDrmPlugin.h sonra out / Soong içinde bulunabilir.