DRM

Ikona HAL DRM Androida

Ten dokument zawiera omówienie platformy zarządzania prawami cyfrowymi (DRM) w Androidzie przedstawia interfejsy, które musi implementować wtyczka DRM. Ten dokument nie opisywanie reguł solidności lub zgodności, które można zdefiniować przez DRM oszustw.

Platforma

Platforma Android zapewnia rozszerzoną platformę DRM, aplikacje zarządzają treściami chronionymi prawami autorskimi zgodnie z licencją ograniczeń związanych z treściami. Platforma DRM obsługuje wiele DRM. schematy; To, jakie schematy DRM obsługuje urządzenie, zależy od jego producenta. Platforma DRM zapewnia ujednolicony interfejs dla programistów aplikacji ukrywa złożoność operacji DRM. Struktura DRM zapewnia w trybie działania w przypadku treści chronionej i niechronionej. Schematy DRM złożonych modeli użytkowania według metadanych licencji. Struktura DRM zapewnia powiązanie między treściami DRM a licencją oraz zarządzanie prawami. Pozwala to na odizolowanie odtwarzacza z zabezpieczeń DRM treści niechronionej. Zobacz MediaDrm dla klasy w celu uzyskania kluczy do odszyfrowywania chronionych strumieni multimediów.

HAL DRM Androida
Rysunek 1a. Abstrakcja dotycząca sprzętu DRM w większym środowisku niż Android 11
Android DRM HAL – post R
Rys. 1b. Abstrakcja dotycząca sprzętu DRM Warstwa uruchamiana w Androidzie 11

Dostępność multimedialnych treści cyfrowych jest ważna dla użytkowników urządzeń mobilnych. Do udostępniać swoje treści, deweloperom aplikacji na Androida i treści cyfrowe wydawcy potrzebują spójnej implementacji DRM w systemie Android. ekosystemu. Aby udostępniać te treści cyfrowe na urządzeniach z Androidem zapewni co najmniej jeden taki sam system DRM na wszystkich urządzeniach, DRM bez opłat licencyjnych na zgodnych urządzeniach z Androidem. Wtyczka DRM jest jest zintegrowana z platformą DRM Androida i może korzystać z zabezpieczeń sprzętowych aby zabezpieczyć treści płatne i dane logowania użytkownika.

Ochrona treści zapewniana przez wtyczkę DRM zależy od funkcji ochrony treści dostępnych na bazowej platformie sprzętowej. możliwości sprzętowe urządzenia powinny obejmować sprzętowy bezpieczny rozruch stworzyć łańcuch zaufania w zakresie bezpieczeństwa i ochrony kluczy kryptograficznych. Możliwości ochrony treści na urządzeniu powinny obejmować ochronę: odszyfrowanych klatek na urządzeniu i w ochronie treści za pomocą zaufanych danych wyjściowych mechanizm ochrony prywatności. Nie wszystkie platformy sprzętowe obsługują wszystkie powyższe funkcje funkcje zabezpieczeń i ochrony treści. Zabezpieczenia nigdy nie są wdrażane w które są oparte na integracji sprzętowej, oprogramowania i usług. Kombinacja funkcji zabezpieczeń sprzętowych, zaufany rozruch oraz izolowany bezpieczny system operacyjny, który zapewnia bezpieczeństwo. ma kluczowe znaczenie dla zapewnienia bezpieczeństwa urządzenia.

Architektura

Struktura DRM jest zaprojektowana tak, aby nie wymagała implementacji. wyodrębnia szczegóły konkretnej implementacji schematu DRM w wtyczki DRM dla danego schematu. Platforma DRM zawiera proste interfejsy API do obsługi złożonych operacji DRM, pozyskiwania licencji, udostępniania urządzenia kojarzyć treści chronione z DRM i ich licencję, a na koniec odszyfrować treść chronioną za pomocą systemu DRM.

Struktura DRM Androida jest oparta na 2 warstwach architektonicznych:

  • Interfejs API platformy DRM, który jest dostępny dla aplikacji przez Androida. struktury aplikacji.
  • Natywna platforma DRM kodu, która udostępnia interfejs wtyczek DRM (agentów) do zarządzania prawami i odszyfrowywania w różnych schematach DRM.
. Platforma DRM Androida
Rys. 2a. platforma DRM w wersji wcześniejszej niż Android 11
Platforma DRM Androida
Rys. 2b. platforma DRM od Androida 11

Zobacz Androida DRM multimediów Android Media Crypto.

Wtyczki DRM

Podczas uruchamiania systemu platforma DRM skanuje pod kątem instancji/usług HAL (opisanych w plikach .rc ) i wtyczki. Serwer DRM multimediów (mediadrmserver) tworzy CryptoHal i DrmHal. CryptoHal i DrmHal wywołują wtyczki z dostawcą – i konkretnych implementacji.

Wtyczki powinny implementować powiązane listy HAL. Powiązane interfejsy HAL używają Język definiowania interfejsu Androida (AIDL), co umożliwia zastąpienie platformy bez konieczności ponownego tworzenia list HAL.

Wtyczki są tworzone przez dostawców lub twórców SOC i umieszczane w partycji /vendor urządzenia. Wszystkie urządzenia z Androidem 13 lub nowszym muszą obsługiwać powiązane powiązane listy HAL zapisane w języku AIDL.

Implementacja

Urządzenia GMS i AOSP w wersji na Androida 13 muszą używać interfejsu AIDL.

Aby wdrożyć interfejsy API nowych platform DRM za pomocą wtyczki:

  1. Dodaj usługę wtyczek do plików kompilacji urządzenia.
  2. Zaktualizuj plik manifestu urządzenia.
  3. Dodaj uprawnienia SELinux.
  4. Utwórz plik .rc w katalogu /vendor.
  5. Zaimplementuj wtyczkę.

Interfejsy API są zdefiniowane w każdej wersji IDrmPlugin.aidl, ICryptoPlugin.aidl, IDrmFactory.aidl i ICryptoFactory.aidl

aidl/PLATFORM_ROOT/hardware/interfaces/drm/

Dodaj usługę wtyczek do plików kompilacji urządzenia

Aby na przykład dodać obsługę interfejsu AIDL, plik VENDOR DEVICE/device.mk musi zawierać Pakiety (android.hardware.drm-service.*):


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

Zaktualizuj plik manifestu urządzenia

Plik vendor manifest.xml dotyczący urządzenia musi zawierać te pozycje:

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

WERSJA STABLE AIDL to numer wersji każdej wersji interfejsu API AIDL (np. 1, 2). Alternatywnie zalecamy użycie vintf_fragments.

Dodaj uprawnienia SELinux

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

Tworzenie pliku RC w katalogu /vendor

Plik .rc określa działania, które mają być wykonywane po uruchomieniu usługi.

Zobacz Język Android Init.

Implementacja wtyczki

  1. Zaimplementuj punkt wejścia main() w tagu service.cpp wtyczki posprzedażna.
  2. Wdróż ICryptoPlugin, IDrmPlugin, ICryptoFactory i IDrmFactory.
  3. Zaimplementuj nowe interfejsy API we wtyczce.

Szczegóły wtyczki DRM

Dostawcy wtyczek DRM wdrażają DrmFactory, CryptoFactory i Wtyczka DRM.

DrmFactory

Klasa DrmHal wyszukuje usługi i konstrukcje zarejestrowanych wtyczek DRM odpowiednie wtyczki, które obsługują dany schemat kryptograficzny za pomocą protokołu DrmFactory. zajęcia.

IDrmFactory to główny punkt wejścia do interakcji z HAL DRM dostawcy za pomocą interfejsu API createPlugin. Interfejs createPlugin API jest używany do tworzenia instancji IDrmPlugin.

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

getSupportedCryptoSchemes zwraca listę obsługiwanych schematów kryptograficznych dla instancji HAL AIDL.

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

Określa, czy fabryka wtyczki może tworzyć wtyczki DRM, które obsługują danego schematu kryptograficznego określonego przez identyfikator UUID.

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

Określa, czy fabryka wtyczki może tworzyć wtyczki DRM, które obsługują w danym formacie kontenera multimediów określony przez funkcję 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);

Konstruuje wtyczkę DRM dla schematu kryptograficznego określonego przez UUID.

CryptoFactory

Klasa CryptoHal wyszukuje usługi i konstrukcje zarejestrowanych wtyczek DRM odpowiednie wtyczki, które obsługują dany schemat kryptograficzny za pomocą protokołu CryptoFactory. zajęcia.

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

Określa, czy fabryka kryptowalut może tworzyć wtyczki kryptograficzne obsługujące danego schematu kryptograficznego określonego przez identyfikator 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);

Określa, czy fabryka wtyczek może tworzyć wtyczki kryptograficzne obsługujące danego schematu kryptograficznego określonego przez identyfikator UUID.

Interfejsy API wtyczki DRM

Interfejsy API zostały zdefiniowane w hardware/interfaces/drm/aidl/aidl_api/android.hardware.drm/ VERSION/android/hardware/drm/IDrmPlugin.aidl. Odpowiednik Plik IDrmPlugin.h można znaleźć w obszarze Out/Soong po zakończeniu kompilacji.