DRM

Icona Android DRM HAL

Questo documento fornisce una panoramica del framework Android Digital Rights Management (DRM) e Introduce le interfacce che un plug-in DRM deve implementare. Questo documento non contiene descrivere le regole di affidabilità o le regole di conformità che possono essere definite da un DRM .

Framework

La piattaforma Android fornisce un framework DRM estensibile che consente le app gestiscono contenuti protetti da diritti ai sensi della licenza i vincoli associati ai contenuti. Il framework DRM supporta molti schemi; Gli schemi DRM supportati da un dispositivo spettano al produttore del dispositivo. Il framework DRM offre un'interfaccia unificata per gli sviluppatori di applicazioni e nasconde la complessità delle operazioni DRM. Il framework DRM fornisce una piattaforma operativa per contenuti protetti e non protetti. Gli schemi DRM possono definire complessi modelli di utilizzo in base ai metadati delle licenze. Il framework DRM fornisce associazione tra contenuti DRM e licenza e gestisce la gestione dei diritti. In questo modo il media player può essere astratto dai contenuti protetti da DRM contenuti non protetti. Vedi MediaDrm affinché la classe ottenga le chiavi per decrittografare i flussi multimediali protetti.

HAL DRM Android
Figura 1a. Astrazione hardware DRM Usa il livello prima di Android 11
Post-R su Android DRM HAL
Figura 1b. Astrazione hardware DRM Livello a partire da Android 11

La disponibilità di contenuti digitali avanzati è importante per gli utenti di dispositivi mobili. A rendere i propri contenuti ampiamente disponibili, sviluppatori Android e contenuti digitali gli editori hanno bisogno di un'implementazione DRM coerente supportata su Android all'interno dell'ecosistema Google Cloud. Per rendere disponibili i contenuti digitali sui dispositivi Android e garantire che sia disponibile almeno un DRM coerente su tutti i dispositivi, Google fornisce DRM senza tariffe per la licenza sui dispositivi Android compatibili. Il plug-in DRM integrati con il framework DRM di Android e possono usare la protezione basata sull'hardware per proteggere le credenziali utente e i contenuti premium.

La protezione dei contenuti fornita dal plug-in DRM dipende dalla sicurezza e delle funzionalità di protezione dei contenuti della piattaforma hardware sottostante. La funzionalità hardware del dispositivo devono includere l'avvio protetto dell'hardware stabilire una catena di attendibilità per la sicurezza e la protezione delle chiavi di crittografia. Le funzionalità di protezione dei contenuti del dispositivo devono includere la protezione di frame decriptati nel dispositivo e protezione dei contenuti tramite un output attendibile meccanismo di protezione. Non tutte le piattaforme hardware supportano tutti i precedenti funzionalità di sicurezza e protezione dei contenuti. La sicurezza non viene mai implementata in da un'unica posizione nello stack, ma che si basa invece sull'integrazione di hardware, software e servizi. La combinazione di funzioni di sicurezza hardware, meccanismo di avvio affidabile e un sistema operativo isolato sicuro per la gestione della sicurezza è fondamentale per fornire un dispositivo sicuro.

Architettura

Il framework DRM è progettato per essere indipendente dall'implementazione astrae i dettagli dell'implementazione dello schema DRM specifico in un plug-in DRM specifico per lo schema. Il framework DRM include API semplici da gestire operazioni DRM complesse, acquisire licenze, eseguire il provisioning del dispositivo associare i contenuti DRM e la relativa licenza, per poi decriptare i contenuti DRM.

Il framework DRM di Android è implementato in due livelli architetturali:

  • Un'API del framework DRM, esposta alle app tramite Android completamente gestito di Google Cloud.
  • Un framework DRM di codice nativo, che espone un'interfaccia per i plug-in DRM (agenti) per gestire la gestione dei diritti e la decrittografia per vari schemi DRM.
di Gemini Advanced. Framework DRM Android
Figura 2a. Framework DRM prima di Android 11
Framework DRM Android
Figura 2b. Framework DRM a partire da Android 11

Vedi Android Media DRM e . Android Media Crypto per maggiori dettagli.

Plug-in DRM

All'avvio del sistema, il framework DRM analizza la presenza di istanze/servizi HAL (descritti nei file .rc ) e i plug-in. Creazione del server DRM multimediale (mediadrmserver) sia CryptoHal che DrmHal. CryptoHal e DrmHal, quindi chiama i plug-in con il fornitore implementazioni specifiche.

I plug-in devono implementare gli HAL binderizzati. Gli HAL Binderizzati utilizzano AIDL (Android Interface Definition Language), che consente di sostituire il framework senza dover ricreare gli HAL.

I plug-in vengono creati da fornitori o produttori SOC e inseriti in una partizione /vendor del dispositivo. Tutti i dispositivi che vengono lanciati con Android 13 o versioni successive devono supportare gli HAL binderizzati scritti nel linguaggio AIDL.

Implementazione

I dispositivi GMS e AOSP per Android 13 devono utilizzare l'interfaccia AIDL.

Per implementare nuove API di framework DRM tramite un plug-in:

  1. Aggiungi un servizio plug-in ai file di build del dispositivo.
  2. Aggiorna il manifest del dispositivo.
  3. Aggiungi autorizzazioni SELinux.
  4. Crea un file .rc in /vendor.
  5. Implementa il plug-in.

Le API sono definite in ogni versione di IDrmPlugin.aidl, ICryptoPlugin.aidl, IDrmFactory.aidl e ICryptoFactory.aidl

aidl/PLATFORM_ROOT/hardware/interfaces/drm/

Aggiunta di un servizio plug-in ai file di build del dispositivo

Ad esempio, per aggiungere il supporto dell'interfaccia AIDL, il file VENDOR DEVICE/device.mk deve includere android.hardware.drm-service.* pacchetto:


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

Aggiorna il manifest del dispositivo

Il file vendor manifest.xml del dispositivo deve includere le seguenti voci:

  <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 versione STABLE AIDL è il numero di versione di ogni release dell'API AIDL (ad es. 1, 2). In alternativa, ti consigliamo di utilizzare vintf_fragments.

Aggiungi autorizzazioni SELinux

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

Il file .rc specifica le azioni da eseguire all'avvio di un servizio.

Consulta Lingua Android Init per dettagli.

Implementa il plug-in

  1. Implementa il punto di ingresso main() in service.cpp del plug-in completamente gestito di Google Cloud.
  2. Implementa ICryptoPlugin, IDrmPlugin, ICryptoFactory e IDrmFactory.
  3. Implementa le nuove API nel plug-in.

Dettagli del plug-in DRM

I fornitori di plug-in DRM implementano DrmFactory, CryptoFactory e Plug-in DRM.

Fabbrica

La classe DrmHal cerca i servizi e i costrutti dei plug-in DRM registrati plug-in corrispondenti che supportano un determinato schema di crittografia tramite DrmFactory .

IDrmfabbrica è il punto di ingresso principale per interagire con l'HAL drm drm di un fornitore tramite l'API createplugin. L'API createplugin viene utilizzata per creare istanze IDrmplug.

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

getsupportedCryptoSchemes restituisce un elenco di schemi di crittografia supportati per l'istanza AIDL drm HAL.

::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 se la fabbrica di plug-in è in grado di creare plug-in DRM che supportano di un dato schema di crittografia, specificato da un UUID.

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

Determina se il fabbrica plug-in è in grado di costruire plug-in DRM che supportano un specificato da 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 plug-in DRM per lo schema di crittografia specificato dall'UUID.

CryptoFabbrica

La classe CryptoHal cerca i servizi e i costrutti dei plug-in DRM registrati plug-in corrispondenti che supportano un determinato schema di crittografia tramite CryptoFactory .

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

Determina se il cryptofin è in grado di costruire plug-in di criptovalute che supportano un dato schema di crittografia, specificato da 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 se il fabbrica di plug-in è in grado di creare plug-in di crittografia che supportano un un dato schema di crittografia, specificato da un UUID.

API per plug-in DRM

Le API sono definite in hardware/interfaces/drm/aidl/aidl_api/android.hardware.drm/ VERSION/android/hardware/drm/IDrmPlugin.aidl. Il corrispondente Il file IDrmPlugin.h può essere trovato nel log dopo la creazione.