DRM

Android DRM HAL-Symbol

Dieses Dokument bietet einen Überblick über das Android-Framework für die digitale Rechteverwaltung (Digital Rights Management, DRM) und stellt die Schnittstellen vor, die ein DRM-Plug-in implementieren muss. Dieses Dokument enthält keine beschreiben Robustheitsregeln oder Complianceregeln, die von der digitalen Rechteverwaltung definiert werden können. .

Framework

Die Android-Plattform bietet ein erweiterbares DRM-Framework, Apps verwalten urheberrechtlich geschützte Inhalte gemäß der Lizenz die mit dem Inhalt verbunden sind. Das DRM-Framework unterstützt viele DRM Schemata; Welche DRM-Schemata ein Gerät unterstützt, bleibt dem Gerätehersteller überlassen. Das DRM-Framework bietet eine einheitliche Oberfläche für Anwendungsentwickler und die Komplexität von DRM-Vorgängen. Das DRM-Framework bietet eine einheitliche für geschützte und nicht geschützte Inhalte. Mit DRM-Schemata können komplexe Nutzungsmodelle nach Lizenzmetadaten. Das DRM-Framework bietet Verknüpfung zwischen DRM-Inhalten und -Lizenzen und übernimmt die Rechteverwaltung. So kann der Mediaplayer von DRM-geschützten oder für nicht geschützte Inhalte. Weitere Informationen finden Sie im Hilfeartikel MediaDrm. , damit die Klasse Schlüssel zum Entschlüsseln geschützter Medienstreams abrufen kann.

Android DRM HAL
Abbildung 1a. DRM-Hardwareabstraktion Ebene vor Android 11
Android DRM HAL post R
Abbildung 1b. DRM-Hardwareabstraktion ab Android 11

Die Verfügbarkeit von Rich-Media-Content ist für Nutzer von Mobilgeräten wichtig. Bis ihre Inhalte allgemein verfügbar machen, Android-Entwickler und digitale Inhalte brauchen Verlage und Webpublisher eine einheitliche DRM-Implementierung, die auf allen Android-Geräten Ökosystem. Um diese digitalen Inhalte auf Android-Geräten verfügbar zu machen und sicherzustellen, dass auf allen Geräten mindestens eine einheitliche digitale Rechteverwaltung verfügbar ist, bietet Google Digitale Rechteverwaltung ohne Lizenzgebühren auf kompatiblen Android-Geräten. Das DRM-Plug-in ist ist in das Android-DRM-Framework integriert und kann hardwaregestützten Schutz nutzen um Premiuminhalte und Nutzeranmeldedaten zu sichern.

Der Inhaltsschutz des DRM-Plug-ins hängt von der Sicherheit und Inhaltsschutzfunktionen der zugrunde liegenden Hardwareplattform. Die Die Hardwarefunktionen des Geräts sollten Hardware Secure Boot umfassen, eine Vertrauenskette für die Sicherheit und den Schutz kryptografischer Schlüssel aufzubauen. Die Funktionen des Geräts zum Schutz von Inhalten sollten entschlüsselte Frames im Geräte- und Inhaltsschutz über eine vertrauenswürdige Ausgabe zu schützen. Nicht alle Hardwareplattformen unterstützen alle der oben genannten Funktionen. Funktionen für Sicherheit und Inhaltsschutz. Sicherheit wird nie in einem an einer zentralen Stelle im Stack platziert, sondern auf die Integration von Hardware, Software und Dienste. Die Kombination aus Hardware-Sicherheitsfunktionen, vertrauenswürdigen Bootmechanismus und einem isolierten, sicheren Betriebssystem für die Sicherheit Funktionen sind entscheidend, um ein sicheres Gerät bereitzustellen.

Architektur

Das DRM-Framework ist implementierungsunabhängig und die Details der spezifischen DRM-Schemaimplementierung in einem DRM-Plug-in für Schemas. Das DRM-Framework umfasst einfache APIs die digitale Rechteverwaltung, den Erwerb von Lizenzen, die Bereitstellung des Geräts, DRM-Inhalte und deren Lizenz verknüpfen und schließlich DRM-Inhalte entschlüsseln.

Das DRM-Framework von Android ist in zwei Architekturebenen implementiert:

  • Eine DRM-Framework-API, die Apps über das Android- Anwendungs-Framework.
  • Ein natives Code-DRM-Framework, das eine Schnittstelle für DRM-Plug-ins (Agents) bereitstellt zur Rechteverwaltung und -entschlüsselung bei verschiedenen DRM-Schemata.
Android DRM-Framework
Abbildung 2a: DRM-Framework vor Android 11
Android DRM-Framework
Abbildung 2b: DRM-Framework ab Android 11

Weitere Informationen finden Sie unter Android-Geräte DRM für Medien und <ph type="x-smartling-placeholder"></ph> Android Media Crypto

DRM-Plug-ins

Beim Systemstart sucht das DRM-Framework nach HAL-Instanzen/-Diensten (beschrieben in .rc -Dateien). und Plug-ins gefunden werden. Media DRM Server (mediadrmserver) erstellt CryptoHal- und DrmHal-Objekte. CryptoHal und DrmHal rufen dann die Plug-ins mit der Methode spezifische Implementierungen.

Plug-ins sollten binderisierte HALs implementieren. Gebundene HALs verwenden die Android Interface Definition Language (AIDL) Dadurch kann das Framework ersetzt werden, ohne HALs neu erstellen zu müssen.

Plug-ins werden von Anbietern oder SOC-Herstellern erstellt und in einer /vendor-Partition auf auf dem Gerät. Alle Geräte, die mit Android 13 oder höher auf den Markt gebracht werden, müssen binderisierte HALs unterstützen in der AIDL-Sprache.

Implementierung

GMS- und AOSP-Gerätereleases für Android 13 müssen die AIDL-Schnittstelle verwenden.

So implementieren Sie neue DRM-Frameworks APIs über ein Plug-in:

  1. Fügen Sie den Build-Dateien des Geräts einen Plug-in-Dienst hinzu.
  2. Aktualisieren Sie das Gerätemanifest.
  3. Fügen Sie SELinux-Berechtigungen hinzu.
  4. Erstellen Sie eine .rc-Datei unter /vendor.
  5. Implementieren Sie das Plug-in.

APIs sind in jeder Version von IDrmPlugin.aidl definiert, ICryptoPlugin.aidl, IDrmFactory.aidl, und ICryptoFactory.aidl

aidl/PLATFORM_ROOT/hardware/interfaces/drm/

Plug-in-Dienst zu Build-Dateien des Geräts hinzufügen

Um beispielsweise die Unterstützung der AIDL-Schnittstelle hinzuzufügen, Die Datei VENDOR DEVICE/device.mk muss den Parameter android.hardware.drm-service.* Pakete:


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

Gerätemanifest aktualisieren

Die Datei vendor manifest.xml für das Gerät muss die folgenden Einträge enthalten:

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

Die STABLE AIDL VERSION ist die Versionsnummer jedes AIDL API-Release (z.B. 1, 2). Alternativ empfehlen wir die Verwendung von . vintf_fragments.

SELinux-Berechtigungen hinzufügen

  1. Zu VENDOR DEVICE/sepolicy/vendor/file.te
    hinzufügen
    type mediadrm_vendor_data_file, file_type, data_file_type;
  2. Zu VENDOR DEVICE/sepolicy/vendor/file_contexts
    hinzufügen
        /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. Zu device/sepolicy/vendor/hal_drm_clearkey.te
    hinzufügen
        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)
        

RC-Datei unter /vendor erstellen

Die Datei .rc gibt die Aktionen an, die beim Starten eines Dienstes ausgeführt werden sollen.

Weitere Informationen finden Sie unter Android Init Language.

Plug-in implementieren

  1. Einstiegspunkt main() in service.cpp des Plug-ins implementieren Service.
  2. ICryptoPlugin, IDrmPlugin implementieren ICryptoFactory und IDrmFactory.
  3. Implementieren Sie die neuen APIs im Plug-in.

Details zum DRM-Plug-in

DRM-Plug-in-Anbieter implementieren DrmFactory, CryptoFactory und DRM-Plug-in.

DrmFactory

Die Klasse DrmHal sucht nach registrierten DRM-Plug-in-Diensten und -Konstrukten entsprechende Plug-ins, die ein bestimmtes Kryptoschema über den DrmFactory unterstützen .

IDrmFactory ist der Haupteinstiegspunkt für die Interaktion mit dem drm-HAL eines Anbieters über das createPlugin-API. Die createPlugin API wird zum Erstellen von IDrmPlugin-Instanzen verwendet.

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

getSupportedCryptoSchemes gibt eine Liste der unterstützten Crypto-Schemas zurück für die AIDL drm HAL-Instanz.

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

Bestimmt, ob die Plug-in-Factory DRM-Plug-ins erstellen kann, die diese unterstützen einem bestimmten Kryptoschema, das durch eine UUID angegeben wird.

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

Bestimmt, ob die Plug-in-Factory DRM-Plug-ins erstellen kann, die ein gegebenes Mediencontainerformat, das durch mimeType angegeben wird.

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

Konstruiert ein DRM-Plug-in für das durch die UUID angegebene Kryptoschema.

Kryptofabrik

Die Klasse CryptoHal sucht nach registrierten DRM-Plug-in-Diensten und -Konstrukten entsprechende Plug-ins, die ein bestimmtes Kryptoschema über den CryptoFactory unterstützen .

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

Bestimmt, ob die Crypto Factory Krypto-Plug-ins erstellen kann, die ein Krypto-Schema, das durch eine UUID angegeben wird.

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

Legt fest, ob die Plug-in-Factory Krypto-Plug-ins erstellen kann, die ein Krypto-Schema, das durch eine UUID angegeben wird.

DRM-Plug-in-APIs

Die APIs sind in hardware/interfaces/drm/aidl/aidl_api/android.hardware.drm/ VERSION/android/hardware/drm/IDrmPlugin.aidl definiert. Die entsprechenden Die Datei IDrmPlugin.h befindet sich nach dem Build unter „out/Soong“.