DRM

Android DRM HAL simgesi

Bu dokümanda, Android dijital haklar yönetimi (DRM) çerçevesine genel bir bakış sunulmaktadır ve Bir DRM eklentisinin uygulaması gereken arayüzleri tanıtır. Bu belgede bir DRM tarafından tanımlanabilecek dayanıklılık kurallarını veya uygunluk kurallarını açıklamak şema.

Çerçeve

Android platformu, genişletilebilir bir DRM çerçevesi sunar ve Uygulamalar, hakları korunan içeriği lisansa göre yönetiyor içerikle ilgili kısıtlamalardır. DRM çerçevesi birçok DRM'yi destekler planlar; cihazın hangi DRM şemalarını desteklediğini cihaz üreticisine bağlıdır. DRM çerçevesi, uygulama geliştiricileri ve DRM işlemlerinin karmaşıklığını gizler. DRM çerçevesi tutarlı bir şekilde, işlem modunun çalışma şeklini belirleyen herkes tarafından belirlenir. DRM şemaları, karmaşık kullanım modellerini lisans meta verilerine göre düzenler. DRM çerçevesi, DRM içeriği ile lisans arasındaki ilişkiyi tanımlar ve hak yönetimini yönetir. Bu, medya oynatıcının DRM korumalı veya korumasız içerik olabilir. MediaDrm'ye bakın .

Android DRM HAL'si.
Şekil 1a. DRM donanım soyutlama Android 11'den önceki katman
Android DRM HAL yayını R
Şekil 1b. DRM donanım soyutlama Android 11'den itibaren katman

Zengin dijital içeriğin kullanılabilirliği, mobil cihaz kullanıcıları için önemlidir. Alıcı: içeriklerini yaygın bir şekilde kullanılabilir hale getirmek, Android geliştiricileri ve Yayıncılar, Android genelinde desteklenen tutarlı bir DRM uygulamasına ihtiyaç duymaktadır. bir ekosistemdir. Dijital içeriğin Android cihazlarda kullanılabilmesi ve Google, tüm cihazlarda en az bir tutarlı DRM bulunduğundan emin olun. Uyumlu Android cihazlarda lisans ücreti olmayan DRM. DRM eklentisi, Android DRM çerçevesiyle entegredir ve donanım destekli koruma kullanabilir ve kullanıcı kimlik bilgilerinin güvenliğini sağlamak için.

DRM eklentisi tarafından sağlanan içerik koruması, güvenlik içerik koruma özelliklerine sahip olması gerekir. İlgili içeriği oluşturmak için kullanılan cihazın donanım güvenliği özelliklerinin, şifreleme anahtarlarının korunması ve güvenlik açısından bir güven zinciri oluşturmalıdır. Cihazın içerik koruma özellikleri, cihazdaki şifresi çözülmüş kareler ve güvenilir bir çıkış aracılığıyla içerik koruması koruma mekanizmasıdır. Tüm donanım platformları yukarıdakilerin tümünü desteklemez güvenlik ve içerik koruma özellikleri. Güvenlik hiçbir zaman tek bir yerde toplamak yerine donanım entegrasyonuna ve hizmetleri kapsar. Donanım güvenlik işlevlerinin, güvenilir başlatma mekanizması ve güvenlik için ayrı bir güvenli işletim sistemi güvenli bir cihaz sağlamak açısından kritik öneme sahiptir.

Mimari

DRM çerçevesi uygulamadan bağımsız ve belirli DRM şeması uygulamasının ayrıntılarını şemaya özel DRM eklentisidir. DRM çerçevesi, işlenecek basit API'ler içerir. karmaşık DRM işlemleri, lisans alma, cihazın temel hazırlığını yapma, ve son olarak DRM içeriğinin şifresini çözer.

Android DRM çerçevesi iki mimari katmanda uygulanmıştır:

  • Android üzerinden uygulamalara sunulan bir DRM çerçevesi API'sı çerçevesini kullanmayı öğreteceğim.
  • DRM eklentileri (aracılar) için bir arayüz sunan yerel kod DRM çerçevesi .
ziyaret edin. 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

Bkz. Android Medya DRM ve Ayrıntılı bilgi için Android Media Crypto'ya göz atın.

DRM eklentileri

Sistem başlatılırken DRM çerçevesi, HAL örneklerini/hizmetlerini tarar (.rc dosyalarında açıklanmıştır) ve eklentiler bulunur. Medya DRM Sunucusu (mediadrmserver) hem CryptoHal hem de DrmHal nesneleri görüntülenir. CryptoHal ve DrmHal, ardından tedarikçi firma ile eklentileri çağırın. belirli uygulamalar vardır.

Eklentiler, bağlama işlemi uygulanmış HAL'ler uygulamalıdır. Binder uygulanmış HAL'ler, Android Arayüz Tanımlama Dili (AIDL), Bu, HAL'leri yeniden oluşturmaya gerek kalmadan çerçevenin değiştirilmesine olanak tanır.

Eklentiler, tedarikçi firmalar veya SOC üreticileri tarafından oluşturulur ve /vendor üzerine için geçerlidir. Android 13 veya sonraki sürümlerle kullanıma sunulan tüm cihazlar, yazılan bağlayıcı HAL'leri desteklemelidir AIDL dilinde.

Uygulama

Android 13 için GMS ve AOSP cihazlarda AIDL arayüzü kullanılmalı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. Cihaz manifestini güncelleyin.
  3. SELinux izinlerini ekleyin.
  4. /vendor altında bir .rc dosyası oluşturun.
  5. Eklentiyi uygulayın.

API'ler her IDrmPlugin.aidl sürümünde tanımlanmıştır. ICryptoPlugin.aidl IDrmFactory.aidl, ve ICryptoFactory.aidl

aidl/PLATFORM_ROOT/hardware/interfaces/drm/

Cihaz derleme dosyalarına eklenti hizmeti ekleme

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


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

Cihaz manifestini güncelleyin

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

KARARLI AIDL SÜRÜMÜ, her AIDL API sürümünün sürüm numarasıdır (ör. 1, 2). Alternatif olarak, vintf_parçalar.

SELinux izinleri ekleme

  1. Şuraya ekle: VENDOR DEVICE/sepolicy/vendor/file.te
    type mediadrm_vendor_data_file, file_type, data_file_type;
  2. Şuraya 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. Şuraya ekle: 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şturun

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

Görüntüleyin Ayrıntılı bilgi için Android Init Language (Android Init Dili) başlıklı makaleyi inceleyin.

Eklentiyi uygulama

  1. Eklentinin service.cpp özelliğinde main() giriş noktasını uygulayın geliştirmenizi sağlar.
  2. ICryptoPlugin, IDrmPlugin, ICryptoFactory ve IDrmFactory.
  3. Eklentiye yeni API'leri uygulayın.

DRM eklentisi ayrıntıları

DRM eklentisi tedarikçileri DrmFactory, CryptoFactory ve DRM eklentisi.

DrmFactory

DrmHal sınıfı, kayıtlı DRM eklenti hizmetlerini ve yapılarını arar. DrmFactory aracılığıyla belirli bir kripto şemasını destekleyen karşılık gelen eklentiler sınıfını kullanır.

IDrmFactory, tedarikçinin drm HAL'si ile etkileşim kurmak için ana giriş noktasıdır createplugin API aracılığıyla yapabilirsiniz. createEklentiler API'si, IDrmplugin örnekleri oluşturmak için kullanılır.

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

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

::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, desteklenen DRM eklentilerini oluşturup oluşturamayacağını belirler UUID ile belirtilen bir şifreleme şeması.

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

Eklenti fabrikasının bir mimeType tarafından belirtilen medya kapsayıcı biçimi.

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

CryptoFactory

CryptoHal sınıfı, kayıtlı DRM eklenti hizmetlerini ve yapılarını arar. CryptoFactory aracılığıyla belirli bir kripto şemasını destekleyen karşılık gelen eklentiler sınıfını kullanır.

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

Kripto fabrikasının bir UUID ile belirtilen şifreleme şeması.

::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 ile belirtilen şifreleme şeması.

DRM eklentisi API'leri

API'ler hardware/interfaces/drm/aidl/aidl_api/android.hardware.drm/ VERSION/android/hardware/drm/IDrmPlugin.aidl bölümünde tanımlanmıştır. İlgili IDrmPlugin.h dosyası, derlemenin ardından out/Soong içinde bulunabilir.