Google is committed to advancing racial equity for Black communities. See how.
Diese Seite wurde von der Cloud Translation API übersetzt.
Switch to English

DRM

Android DRM HAL-Symbol

Dieses Dokument bietet einen Überblick über das DRM-Framework (Android Digital Rights Management) und stellt die Schnittstellen vor, die ein DRM-Plugin implementieren muss. Dieses Dokument beschreibt keine Robustheitsregeln oder Compliance-Regeln, die durch ein DRM-Schema definiert werden können.

Rahmen

Die Android-Plattform bietet ein erweiterbares DRM-Framework, mit dem Apps rechtsgeschützte Inhalte gemäß den mit den Inhalten verbundenen Lizenzbeschränkungen verwalten können. Das DRM-Framework unterstützt viele DRM-Schemata. Welche DRM-Schemata ein Gerät unterstützt, hängt vom Gerätehersteller ab. Das DRM-Framework bietet Anwendungsentwicklern eine einheitliche Schnittstelle und verbirgt die Komplexität von DRM-Vorgängen. Das DRM-Framework bietet einen konsistenten Betriebsmodus für geschützte und nicht geschützte Inhalte. DRM-Schemata können komplexe Nutzungsmodelle anhand von Lizenzmetadaten definieren. Das DRM-Framework stellt die Zuordnung zwischen DRM-Inhalt und Lizenz her und übernimmt die Rechteverwaltung. Dadurch kann der Media Player von DRM-geschützten oder nicht geschützten Inhalten abstrahiert werden. Informationen zu Klassen zum Entschlüsseln geschützter Medienströme finden Sie unter MediaDrm .

Android DRM HAL
Abbildung 1a. DRM-Hardware-Abstraktionsschicht vor Android 11
Android DRM HAL Beitrag R.
Abbildung 1b. DRM-Hardware-Abstraktionsschicht ab Android 11

Die Verfügbarkeit umfangreicher digitaler Inhalte ist für Benutzer mobiler Geräte wichtig. Um ihre Inhalte allgemein verfügbar zu machen, benötigen Android-Entwickler und Herausgeber digitaler Inhalte eine konsistente DRM-Implementierung, die im gesamten Android-Ökosystem unterstützt wird. Um diese digitalen Inhalte auf Android-Geräten verfügbar zu machen und sicherzustellen, dass auf allen Geräten mindestens ein konsistentes DRM verfügbar ist, bietet Google DRM ohne Lizenzgebühren auf kompatiblen Android-Geräten an. Das DRM-Plugin ist in das Android DRM-Framework integriert und kann mithilfe eines hardwaregestützten Schutzes Premium-Inhalte und Benutzeranmeldeinformationen sichern.

Der vom DRM-Plugin bereitgestellte Inhaltsschutz hängt von den Sicherheits- und Inhaltsschutzfunktionen der zugrunde liegenden Hardwareplattform ab. Die Hardwarefunktionen des Geräts sollten einen sicheren Hardware-Start umfassen, um eine Vertrauenskette für die Sicherheit und den Schutz kryptografischer Schlüssel herzustellen. Die Inhaltsschutzfunktionen des Geräts sollten den Schutz entschlüsselter Frames im Gerät und den Inhaltsschutz durch einen vertrauenswürdigen Ausgabeschutzmechanismus umfassen. Nicht alle Hardwareplattformen unterstützen alle oben genannten Sicherheits- und Inhaltsschutzfunktionen. Sicherheit wird niemals an einer einzigen Stelle im Stapel implementiert, sondern beruht auf der Integration von Hardware, Software und Diensten. Die Kombination von Hardware-Sicherheitsfunktionen, einem vertrauenswürdigen Startmechanismus und einem isolierten sicheren Betriebssystem für die Verwaltung von Sicherheitsfunktionen ist für die Bereitstellung eines sicheren Geräts von entscheidender Bedeutung.

Die Architektur

Das DRM-Framework ist implementierungsunabhängig konzipiert und abstrahiert die Details der spezifischen Implementierung des DRM-Schemas in einem schemaspezifischen DRM-Plugin. Das DRM-Framework enthält einfache APIs, um komplexe DRM-Vorgänge zu verarbeiten, Lizenzen zu erwerben, das Gerät bereitzustellen, DRM-Inhalte und deren Lizenz zuzuordnen und schließlich DRM-Inhalte zu entschlüsseln.

Das Android DRM-Framework ist in zwei Architekturebenen implementiert:

  • Eine DRM-Framework-API, die über das Android-Anwendungsframework für Apps verfügbar gemacht wird.
  • Ein natives Code-DRM-Framework, das eine Schnittstelle für DRM-Plugins (Agenten) zur Verwaltung und Entschlüsselung von Rechten für verschiedene DRM-Schemata bereitstellt.
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 Media DRM und Android Media Crypto .

DRM-Plugins

Beim Systemstart .rc das DRM-Framework nach HAL-Instanzen / -Diensten (beschrieben in .rc Dateien) und Plugins werden über die HIDL-Registrierung erkannt. Media DRM Server ( mediadrmserver ) erstellt sowohl CryptoHal als auch DrmHal Objekte. CryptoHal und DrmHal rufen dann die Plugins mit herstellerspezifischen Implementierungen auf.

Plugins sollten binderisierte HALs implementieren. Binderisierte HALs verwenden die HAL-Schnittstellendefinitionssprache (HIDL) , mit der das Framework ersetzt werden kann, ohne dass HALs neu erstellt werden müssen.

Plugins werden von Anbietern oder SOC-Herstellern erstellt und in eine /vendor Partition auf dem Gerät eingefügt. Alle Geräte, die mit Android 8.0 oder höher gestartet werden, müssen binderisierte HALs unterstützen, die in der HIDL-Sprache geschrieben sind.

Implementierung

So implementieren Sie neue DRM-Framework-APIs mithilfe eines Plugins:

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

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

PLATFORM_ROOT/hardware/interfaces/drm/VERSION/

Hinzufügen eines Plugin-Dienstes zu Geräteerstellungsdateien

Um beispielsweise die Unterstützung für Schnittstelle 1.3 hinzuzufügen, muss die VENDOR DEVICE /device.mk android.hardware.drm@1.3-service.* Pakete android.hardware.drm@1.3-service.* :

Die Versionen 1.0 bis 1.2 sind in R / Android 11 veraltet. Geräte, die auf R aktualisiert werden, dürfen weiterhin die Versionen 1.0 bis 1.2 ausführen. Neue Geräte, die mit R gestartet werden, dürfen jedoch nur Version 1.3 ausführen.


  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

Aktualisieren des Gerätemanifests

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


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

Alternativ empfehlen wir die Verwendung von vintf_fragments.

Hinzufügen von SELinux-Berechtigungen

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

    Wir empfehlen, reguläre Ausdrücke zu verwenden, um die Versionsnummern anzugeben, um Aktualisierungen für neue Versionen zu vermeiden, zum Beispiel:

    /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

    Alternativ können Sie die Versionsnummern wie unten gezeigt aktualisieren.

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

Erstellen einer .rc-Datei unter / vendor

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

Weitere Informationen finden Sie unter Android Init Language .

Implementierung des Plugins

  1. Implementieren Sie den main() -Einstiegspunkt in service.cpp des Plugin-Dienstes.
  2. Implementieren Sie ICryptoPlugin , IDrmPlugin , ICryptoFactory und IDrmFactory .
  3. Implementieren Sie die neuen APIs im Plugin.

Details zum DRM-Plugin

Anbieter von DRM-Plugins implementieren DrmFactory , CryptoFactory und DRM-Plugins.

DrmFactory

Die DrmHal Klasse sucht nach registrierten DRM-Plugin-Diensten und erstellt entsprechende Plugins, die ein bestimmtes Krypto-Schema über die DrmFactory Klasse unterstützen.

IDrmFactory ist der Haupteinstiegspunkt für die Interaktion mit dem drm HAL eines Anbieters über die createPlugin-API. Die createPlugin-API wird zum Erstellen von IDrmPlugin-Instanzen verwendet. Die 1.3 IDrmFactory muss immer 1.2 IDrmPlugin-Schnittstellen erstellen, die über die 1.0 createPlugin-Methode zurückgegeben werden.

Return<void> getSupportedCryptoSchemes(getSupportedCryptoSchemes_cb _hidl_cb);

GetSupportedCryptoSchemes ist neu in 1.3 IDrmFactory und gibt eine Liste der unterstützten Kryptoschemata für die HIDL drm HAL-Instanz zurück.

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

Legt fest, ob die Plugin-Factory DRM-Plugins erstellen kann, die ein bestimmtes Krypto-Schema unterstützen, das von einer UUID angegeben wird.

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

Legt fest, ob die Plugin-Factory DRM-Plugins mimeType , die ein bestimmtes von mimeType angegebenes mimeType .

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

Erstellt ein DRM-Plugin für das von UUID angegebene Kryptoschema.

CryptoFactory

Die CryptoHal Klasse sucht nach registrierten DRM-Plugin-Diensten und erstellt entsprechende Plugins, die ein bestimmtes Krypto-Schema über die CryptoFactory Klasse unterstützen.

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

Legt fest, ob die Crypto Factory Crypto-Plugins erstellen kann, die ein bestimmtes Crypto-Schema unterstützen, das von einer UUID angegeben wird.

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

Legt fest, ob die Plugin-Factory Krypto-Plugins erstellen kann, die ein bestimmtes Krypto-Schema unterstützen, das von einer UUID angegeben wird.

DRM-Plugin

Die APIs sind in hardware/interfaces/drm/ VERSION /IDrmPlugin.hal . Die entsprechende IDrmPlugin.h Datei befindet sich nach dem Build in out / Soong.