DRM, 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çıklamamaktadır.

Çerçeve

Android platformu, uygulamaların, içerikle ilişkili lisans kısıtlamalarına göre hakları korunan içeriği yönetmesine olanak tanıyan 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 ile lisans arasındaki ilişkiyi sağlar ve hak yönetimini yönetir. Bu, medya oynatı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ı elde etmek için sınıf için MediaDrm'e 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 cihazlardaki kullanıcılar için önemlidir. Android geliştiricileri ve dijital içerik yayıncıları, içeriklerini geniş çapta kullanılabilir hale getirmek için Android ekosisteminde desteklenen tutarlı bir DRM uygulamasına ihtiyaç duyar. Bu dijital içeriği Android cihazlarda kullanılabilir hale getirmek ve tüm cihazlarda kullanılabilen en az bir tutarlı DRM olduğundan emin olmak için Google, uyumlu Android cihazlarda DRM'yi lisans ücreti olmadan sağlar. DRM eklentisi, Android DRM çerçevesiyle entegredir ve premium içeriği ve kullanıcı kimlik bilgilerini güvence altına almak için donanım destekli koruma kullanabilir.

DRM eklentisi tarafından sağlanan içerik koruması, temel alınan donanım platformunun güvenlik ve içerik koruma özelliklerine bağlıdır. Cihazın donanım yetenekleri, bir güvenlik güven zinciri oluşturmak ve kriptografik anahtarların korunmasını sağlamak için donanım güvenli önyüklemeyi içermelidir. Cihazın içerik koruma yetenekleri, cihazdaki şifresi çözülen çerçevelerin korunmasını ve güvenilir bir çıktı koruma mekanizması aracılığıyla içerik korumasını içermelidir. Tüm donanım platformları, yukarıdaki güvenlik ve içerik koruma özelliklerinin tümünü 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şlevlerinin, güvenilir bir önyükleme mekanizmasının ve güvenlik işlevlerinin ele alınması için yalıtılmış bir güvenli işletim sisteminin birleşimi, güvenli bir aygıt sağlamak için kritik öneme sahiptir.

Mimari

DRM çerçevesi, uygulamadan bağımsız olacak şekilde tasarlanmıştır ve şemaya özel 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, lisansları 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 maruz kalan bir DRM çerçevesi API'si.
  • Çeşitli DRM şemaları için hak yönetimi ve şifre çözmeyi işlemek üzere DRM eklentileri (aracılar) için bir arabirim sunan 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 keşfedilir. Media DRM Sunucusu ( mediadrmserver ) hem CryptoHal hem de DrmHal nesneleri oluşturur. CryptoHal ve DrmHal daha sonra satıcıya özel uygulamalarla eklentileri çağırır.

Eklentiler, ciltlenmiş HAL'leri uygulamalıdır. Bağlanmış HAL'ler, çerçevenin HAL'leri yeniden oluşturmaya gerek kalmadan değiştirilmesine olanak tanıyan Android Arabirim Tanımlama Dili'ni (AIDL) kullanır.

Eklentiler, satıcılar veya SOC üreticileri tarafından oluşturulur ve cihazda bir /vendor bölümüne yerleştirilir. Android 13 veya sonraki sürümlerle başlatılan tüm cihazlar, AIDL dilinde yazılmış ciltlenmiş HAL'leri desteklemelidir.

uygulama

Android 13 için GMS ve AOSP cihazlarının sürümü AIDL arayüzünü kullanmalıdır.

Bir eklenti tarafından yeni DRM çerçeveleri API'lerini uygulamak için:

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

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

aidl/PLATFORM_ROOT/hardware/interfaces/drm/

Cihaz derleme dosyalarına eklenti hizmeti ekleme

Örneğin, AIDL arabirim desteği eklemek için VENDOR DEVICE /device.mk dosyası android.hardware.drm-service.* paketlerini içermelidir:


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

Cihaz bildirimini güncelleme

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

  <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, her AIDL API sürümünün sürüm numarasıdır (örn. 1, 2). Alternatif olarak, vintf_fragments kullanmanızı öneririz.

SELinux izinleri ekleme

  1. SATICI CİHAZINA ekle VENDOR DEVICE /sepolicy/vendor/file.te
    type mediadrm_vendor_data_file, file_type, data_file_type;
  2. SATICI CİHAZINA ekle 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. 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)
        

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

.rc dosyası, bir hizmet başlatıldığında yapılacak işlemleri belirtir.

Ayrıntılar için Android Init Dili'ne bakın.

Eklentiyi uygulama

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

DRM eklentisi ayrıntıları

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

DrmFabrika

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

IDrmFactory, bir satıcının drm HAL'i ile createPlugin API aracılığıyla etkileşim kurmak için ana giriş noktasıdır. createPlugin API, IDrmPlugin örnekleri oluşturmak için kullanılır.

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

getSupportedCryptoSchemes, AIDL drm HAL örneği için desteklenen şifreleme şemalarının bir listesini döndürür.

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

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

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

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

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

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

Kripto Fabrikası

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

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

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

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

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

DRM eklentisi API'leri

API'ler, hardware/interfaces/drm/aidl/aidl_api/android.hardware.drm/ VERSION /android/hardware/drm/IDrmPlugin.aidl . Karşılık gelen IDrmPlugin.h dosyası, derlemeden sonra out/Soong'da bulunabilir.