O Google tem o compromisso de promover a igualdade racial para as comunidades negras. Saiba como.
Esta página foi traduzida pela API Cloud Translation.
Switch to English

DRM

Ícone Android DRM HAL

Este documento fornece uma visão geral da estrutura de gerenciamento de direitos digitais (DRM) do Android e apresenta as interfaces que um plug-in DRM deve implementar. Este documento não descreve regras de robustez ou regras de conformidade que podem ser definidas por um esquema DRM.

Estrutura

A plataforma Android fornece uma estrutura DRM extensível que permite aos aplicativos gerenciar conteúdo protegido por direitos de acordo com as restrições de licença associadas ao conteúdo. A estrutura DRM suporta muitos esquemas DRM; quais esquemas DRM um dispositivo suporta depende do fabricante do dispositivo. A estrutura DRM fornece uma interface unificada para desenvolvedores de aplicativos e oculta a complexidade das operações de DRM. A estrutura DRM fornece um modo de operação consistente para conteúdo protegido e não protegido. Os esquemas de DRM podem definir modelos de uso complexos por metadados de licença. A estrutura DRM fornece a associação entre o conteúdo DRM e a licença e trata do gerenciamento de direitos. Isso permite que o reprodutor de mídia seja abstraído de conteúdo protegido ou não protegido por DRM. Consulte MediaDrm para a classe para obter chaves para descriptografar fluxos de mídia protegidos.

Android DRM HAL
Figura 1a. Camada de abstração de hardware DRM antes do Android 11
Android DRM HAL pós R
Figura 1b. Camada de abstração de hardware DRM começando no Android 11

A disponibilidade de conteúdo digital avançado é importante para usuários em dispositivos móveis. Para tornar seu conteúdo amplamente disponível, os desenvolvedores Android e editores de conteúdo digital precisam de uma implementação consistente de DRM com suporte em todo o ecossistema Android. Para disponibilizar esse conteúdo digital em dispositivos Android e garantir que haja pelo menos um DRM consistente disponível em todos os dispositivos, o Google fornece DRM sem taxas de licença em dispositivos Android compatíveis. O plug-in DRM é integrado à estrutura Android DRM e pode usar proteção com suporte de hardware para proteger o conteúdo premium e as credenciais do usuário.

A proteção de conteúdo fornecida pelo plugin DRM depende dos recursos de segurança e proteção de conteúdo da plataforma de hardware subjacente. Os recursos de hardware do dispositivo devem incluir inicialização segura de hardware para estabelecer uma cadeia de confiança de segurança e proteção de chaves criptográficas. Os recursos de proteção de conteúdo do dispositivo devem incluir proteção de quadros descriptografados no dispositivo e proteção de conteúdo por meio de um mecanismo de proteção de saída confiável. Nem todas as plataformas de hardware suportam todos os recursos de segurança e proteção de conteúdo acima. A segurança nunca é implementada em um único lugar na pilha, mas, em vez disso, depende da integração de hardware, software e serviços. A combinação de funções de segurança de hardware, um mecanismo de inicialização confiável e um sistema operacional seguro isolado para lidar com funções de segurança é crítica para fornecer um dispositivo seguro.

Arquitetura

A estrutura DRM é projetada para ser agnóstica de implementação e abstrai os detalhes da implementação do esquema DRM específico em um plugin DRM específico do esquema. A estrutura DRM inclui APIs simples para lidar com operações DRM complexas, adquirir licenças, provisionar o dispositivo, associar o conteúdo DRM e sua licença e, finalmente, descriptografar o conteúdo DRM.

A estrutura Android DRM é implementada em duas camadas arquitetônicas:

  • Uma API de estrutura DRM, que é exposta a aplicativos por meio da estrutura de aplicativo Android.
  • Uma estrutura de DRM de código nativo, que expõe uma interface para plug-ins DRM (agentes) para lidar com o gerenciamento e descriptografia de direitos para vários esquemas de DRM.
Estrutura Android DRM
Figura 2a. Estrutura DRM antes do Android 11
Estrutura Android DRM
Figura 2b. Framework DRM começando no Android 11

Consulte Android Media DRM e Android Media Crypto para obter mais detalhes.

Plugins DRM

Na inicialização do sistema, a estrutura DRM verifica as instâncias / serviços HAL (descritos em arquivos .rc ) e os plug-ins são descobertos por meio do registro HIDL. Media DRM Server ( mediadrmserver ) cria duas CryptoHal e DrmHal objetos. CryptoHal seguida, CryptoHal e DrmHal chamam os plug-ins com implementações específicas do fornecedor.

Os plug-ins devem implementar HALs vinculados. HALs vinculados usam a linguagem de definição de interface HAL (HIDL) , que permite que a estrutura seja substituída sem ter que reconstruir HALs.

Os plug-ins são criados por fornecedores ou fabricantes de SOC e colocados em uma partição /vendor no dispositivo. Todos os dispositivos lançados com Android 8.0 ou superior devem ser compatíveis com HALs vinculados escritos na linguagem HIDL.

Implementação

Para implementar novas APIs de frameworks DRM por meio de um plug-in:

  1. Adicione o serviço de plug-in aos arquivos de construção do dispositivo.
  2. Atualize o manifesto do dispositivo.
  3. Adicione permissões SELinux.
  4. Crie um arquivo .rc em /vendor .
  5. Implemente o plugin.

Os APIs são definidos em cada versão de IDrmPlugin.hal , ICryptoPlugin.hal , IDrmFactory.hal e ICryptoFactory.hal

PLATFORM_ROOT/hardware/interfaces/drm/VERSION/

Adicionar serviço de plug-in a arquivos de construção de dispositivo

Por exemplo, para adicionar suporte à interface 1.3, o arquivo VENDOR DEVICE /device.mk deve incluir os pacotes android.hardware.drm@1.3-service.* :

As versões 1.0 a 1.2 estão obsoletas no R / Android 11. Dispositivos atualizados para R ainda podem executar as versões 1.0 a 1.2. No entanto, novos dispositivos iniciados com R devem executar apenas a versão 1.3.


  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

Atualizando o manifesto do dispositivo

O arquivo vendor manifest.xml para o dispositivo deve incluir as seguintes entradas:


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

Como alternativa, recomendamos o uso de vintf_fragments.

Adicionando permissões SELinux

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

    Recomendamos o uso de expressões regulares para especificar os números de versão para evitar fazer atualizações para novos lançamentos, por exemplo:

    /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

    Como alternativa, atualize os números da versão conforme mostrado abaixo.

    /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. Adicione a 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;
        

Criação de um arquivo .rc em / vendor

O arquivo .rc especifica as ações a serem executadas quando um serviço é iniciado.

Consulte a linguagem de inicialização do Android para obter detalhes.

Implementando o plugin

  1. Implemente o ponto de entrada main() em service.cpp do service.cpp de plug-in.
  2. Implemente ICryptoPlugin , IDrmPlugin , ICryptoFactory e IDrmFactory .
  3. Implemente as novas APIs no plugin.

Detalhes do plugin DRM

Os fornecedores de plug-in DRM implementam o plug-in DrmFactory , CryptoFactory e DRM.

DrmFactory

A classe DrmHal procura serviços de plug-ins DRM registrados e constrói plug-ins correspondentes que suportam um determinado esquema de criptografia por meio da classe DrmFactory .

IDrmFactory é o principal ponto de entrada para interagir com o HAL drm de um fornecedor por meio da API createPlugin. A API createPlugin é usada para criar instâncias IDrmPlugin. O 1.3 IDrmFactory deve sempre criar interfaces 1.2 IDrmPlugin, que são retornadas por meio do método 1.0 createPlugin.

Return<void> getSupportedCryptoSchemes(getSupportedCryptoSchemes_cb _hidl_cb);

Novo no 1.3 IDrmFactory, getSupportedCryptoSchemes retorna uma lista de esquemas de criptografia com suporte para a instância HIDL drm HAL.

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

Determina se a fábrica de plug-ins é capaz de construir plug-ins DRM que suportam um determinado esquema de criptografia, que é especificado por um UUID.

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

Determina se a fábrica de plug-ins é capaz de construir plug-ins DRM que suportam um determinado formato de contêiner de mídia especificado por mimeType .

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

Constrói um plugin DRM para o esquema de criptografia especificado por UUID.

CryptoFactory

A classe CryptoHal procura serviços de plug-ins DRM registrados e constrói plug-ins correspondentes que suportam um determinado esquema de criptografia por meio da classe CryptoFactory .

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

Determina se a fábrica de criptografia é capaz de construir plug-ins de criptografia que suportam um determinado esquema de criptografia, que é especificado por um UUID.

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

Determina se a fábrica de plug-ins é capaz de construir plug-ins de criptografia que suportam um determinado esquema de criptografia, que é especificado por um UUID.

Plugin DRM

As APIs são definidas em hardware/interfaces/drm/ VERSION /IDrmPlugin.hal . O arquivo IDrmPlugin.h correspondente pode ser encontrado em out / Soong após a construção.