DRM

Ícono de la HAL de DRM de Android

En este documento, se brinda una descripción general del marco de trabajo de administración de derechos digitales (DRM) de Android y presenta las interfaces que debe implementar un complemento de DRM. Este documento no describen reglas de solidez o reglas de cumplimiento que pueden definirse por una DRM .

Framework

La plataforma de Android proporciona un framework de DRM extensible que permite aplicaciones administran el contenido protegido por derechos de acuerdo con la licencia. restricciones asociadas al contenido. El framework DRM admite muchas aplicaciones esquemas; los esquemas de DRM que admite un dispositivo depende del fabricante del dispositivo. El framework DRM proporciona una interfaz unificada para los desarrolladores de aplicaciones y oculta la complejidad de las operaciones de DRM. El framework de la DRM proporciona modo de operación para el contenido protegido y no protegido. Los esquemas de DRM pueden definir modelos de uso complejos con metadatos de licencia. El framework DRM proporciona asociación entre el contenido y la licencia de DRM, y maneja la administración de derechos. lo que permite que el reproductor multimedia se abstraiga de contenido no protegido. Ver MediaDrm para que la clase obtenga claves para desencriptar transmisiones de contenido multimedia protegidas.

HAL de DRM de Android
Figura 1a: Abstracción de hardware de DRM Capa anterior a Android 11
Publicación R de DRM de la HAL de Android
Figura 1b: Abstracción de hardware de DRM Capa a partir de Android 11

La disponibilidad de contenido digital enriquecido es importante para los usuarios de dispositivos móviles. Para hacer que su contenido esté ampliamente disponible, desarrolladores de Android y contenido digital los editores necesitan una implementación de DRM coherente en todas las plataformas en Google Cloud. Para que ese contenido digital esté disponible en dispositivos Android y para garantizar que haya al menos una DRM coherente disponible en todos los dispositivos, Google proporciona DRM sin tarifas de licencia en dispositivos Android compatibles. El complemento DRM está están integrados en el marco de DRM de Android y pueden usar protecciones respaldadas por hardware para proteger contenido premium y credenciales de usuario.

La protección de contenido que proporciona el complemento DRM depende de la seguridad y capacidades de protección de contenido de la plataforma de hardware subyacente. El hardware del dispositivo deben incluir el arranque seguro del hardware para establecer una cadena de confianza de seguridad y protección de claves criptográficas. Las capacidades de protección de contenido del dispositivo deben incluir la protección de fotogramas desencriptados en el dispositivo y protección de contenido a través de un resultado confiable mecanismo de protección. No todas las plataformas de hardware admiten todas las funciones anteriores. seguridad y protección de contenido. La seguridad nunca se implementa en un un solo lugar en la pila, sino que depende de la integración del hardware software y servicios de Google. La combinación de funciones de seguridad de hardware, un mecanismo de inicio confiable y un SO aislado y seguro para controlar la seguridad es crucial para brindar un dispositivo seguro.

Arquitectura

El framework DRM está diseñado para ser independiente de la implementación y abstrae los detalles de la implementación específica del esquema DRM en un complemento de DRM específico del esquema. El marco DRM incluye APIs simples para manejar operaciones complejas de DRM, adquirir licencias, aprovisionar el dispositivo, asociar el contenido de DRM y su licencia, y, por último, desencriptar el contenido de DRM.

El framework de DRM de Android se implementa en dos capas de arquitectura:

  • Una API de marco de DRM, que se expone a las apps a través de Android en el framework de aplicaciones.
  • Un marco de trabajo DRM de código nativo, que expone una interfaz para complementos DRM (agentes) para manejar la gestión de derechos y la desencriptación de diversos esquemas de DRM.
Marco DRM de Android
Figura 2a: Marco de DRM anterior a Android 11
Marco DRM de Android
Figura 2b: Marco de DRM a partir de Android 11

Consulta Android DRM de contenido multimedia y Android Media Crypto para obtener más detalles.

Complementos de DRM

Durante el inicio del sistema, el framework de DRM busca instancias o servicios de HAL (que se describen en archivos .rc ). y complementos. El servidor DRM de medios (mediadrmserver) crea objetos CryptoHal y DrmHal. CryptoHal y DrmHal, luego, llaman a los complementos con provider- para implementaciones específicas.

Los complementos deben implementar HALs con vínculos. Las HAL enlazadas usan Lenguaje de definición de la interfaz de Android (AIDL), lo que permite reemplazar el framework sin tener que volver a compilar las HAL.

Los proveedores o creadores del SOC crean los complementos y se colocan en una partición /vendor en el dispositivo. Todos los dispositivos que se lanzan con Android 13 o versiones posteriores deben admitir HALs enlazadas y escritas en el lenguaje del AIDL.

Implementación

Las versiones de dispositivos con GMS y AOSP para Android 13 deben usar la interfaz de AIDL.

Para implementar nuevas APIs de frameworks de DRM mediante un complemento, haz lo siguiente:

  1. Agrega el servicio de complementos a los archivos de compilación del dispositivo.
  2. Actualiza el manifiesto del dispositivo.
  3. Agrega permisos de SELinux.
  4. Crea un archivo .rc en /vendor.
  5. Implementa el complemento.

Las APIs se definen en cada versión de IDrmPlugin.aidl, ICryptoPlugin.aidl, IDrmFactory.aidl y ICryptoFactory.aidl

aidl/PLATFORM_ROOT/hardware/interfaces/drm/

Cómo agregar un servicio de complemento a archivos de compilación de dispositivos

Por ejemplo, para agregar compatibilidad con la interfaz de AIDL, el archivo VENDOR DEVICE/device.mk debe incluir el android.hardware.drm-service.* paquetes:


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

Actualiza el manifiesto del dispositivo

El archivo vendor manifest.xml del dispositivo debe incluir las siguientes entradas:

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

La VERSIÓN ESTABLE del AIDL es el número de versión de cada versión de la API del AIDL (p.ej., 1, 2). De manera alternativa, recomendamos utilizar vintf_fragments.

Agrega permisos de SELinux

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

Crea un archivo RC en /vendor

El archivo .rc especifica las acciones que se realizarán cuando se inicie un servicio.

Consulta Android Init Language para obtener más información.

Cómo implementar el complemento

  1. Implementa el punto de entrada main() en service.cpp del complemento. servicio.
  2. Implementa ICryptoPlugin, IDrmPlugin, ICryptoFactory y IDrmFactory.
  3. Implementa las APIs nuevas en el complemento.

Detalles del complemento DRM

Los proveedores de complementos de DRM implementan DrmFactory, CryptoFactory y Complemento de DRM.

DrmFactory

La clase DrmHal busca servicios y construcciones de complementos de DRM registrados los complementos correspondientes que admiten un esquema criptográfico determinado por medio de DrmFactory clase.

IDrmFactory es el punto de entrada principal para interactuar con la HAL de drm de un proveedor a través de la API createPlugin. La API createPlugin se usa para crear instancias de IDrmPlugin.

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

getSupportedCryptoSchemes muestra una lista de esquemas criptográficos compatibles. para la instancia de la HAL del drm de 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);

Determina si la fábrica de complementos puede crear complementos de DRM que admitan un esquema criptográfico determinado, que se especifica mediante un UUID.

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

Determina si la fábrica de complementos puede crear complementos de DRM que admitan una determinado formato de contenedor multimedia especificado por 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);

Crea un complemento de DRM para el esquema criptográfico que especifica el UUID.

CryptoFactory

La clase CryptoHal busca servicios y construcciones de complementos de DRM registrados los complementos correspondientes que admiten un esquema criptográfico determinado por medio de CryptoFactory clase.

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

Determina si la fábrica de criptomonedas puede construir complementos de criptografía que admitan un un esquema criptográfico determinado, que se especifica mediante un 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);

Determina si la fábrica de complementos puede construir complementos criptográficos que admitan una un esquema criptográfico determinado, que se especifica mediante un UUID.

APIs del complemento DRM

Las APIs se definen en hardware/interfaces/drm/aidl/aidl_api/android.hardware.drm/ VERSION/android/hardware/drm/IDrmPlugin.aidl. El modelo de IDrmPlugin.h.