![Android DRM HAL-Symbol](https://source.android.com/static/docs/core/media/images/ape_fwk_hal_drm.png?authuser=9&hl=de)
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](https://source.android.com/static/docs/core/media/images/ape_fwk_drm.png?authuser=9&hl=de)
![Android DRM HAL post R](https://source.android.com/static/docs/core/media/images/aidl-ape_fwk_drm_postQ.png?authuser=9&hl=de)
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 die Android-Plattform 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](https://source.android.com/static/docs/shared-images/ape_fwk_drm_2.png?authuser=9&hl=de)
![Android DRM-Framework](https://source.android.com/static/docs/core/media/images/ape_fwk_drm_2_postO.png?authuser=9&hl=de)
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:
- Fügen Sie den Build-Dateien des Geräts einen Plug-in-Dienst hinzu.
- Aktualisieren Sie das Gerätemanifest.
- Fügen Sie SELinux-Berechtigungen hinzu.
- Erstellen Sie eine
.rc
-Datei unter/vendor
. - 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
- Zu
VENDOR DEVICE/sepolicy/vendor/file.te
hinzufügentype mediadrm_vendor_data_file, file_type, data_file_type;
- 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 - Zu
device/sepolicy/vendor/hal_drm_clearkey.te
hinzufügenvndbinder_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
- Den Einstiegspunkt
main()
inservice.cpp
des Plug-ins implementieren . ICryptoPlugin
,IDrmPlugin
implementierenICryptoFactory
undIDrmFactory
.- 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 inhardware/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“.