Framework CAS

Le framework des systèmes d'accès conditionnel Media (Media CAS) fournit des API permettant d'activer des services d'accès conditionnel sur une gamme de services de télévision numérique du matériel (câble numérique, satellite, système terrestre, IPTV, etc.) systèmes. Le framework fonctionne avec Framework d'entrée Android TV et le framework Android TV Tuner, en fournissant des API Java appelées à partir de l'application TIS (TV Input Service).

Les principaux objectifs de Media CAS sont les suivants.

  • Fournir une API Java publique et un framework de plug-ins natif pouvant être utilisés par des développeurs tiers et des OEM afin de prendre en charge les CAS pour la TV hertzienne sur Android.
  • Fournir un framework CAS dans Android qui permet aux OEM d'appareils Android TV d'interagir avec divers fournisseurs de CAS de manière cohérente.
  • Prenez en charge plusieurs fournisseurs de CAS tiers à l'aide de plug-ins natifs. Les plug-ins CAS peuvent utiliser des protocoles réseau spécifiques au fournisseur, des droits d'accès les formats de message de gestion (EMM) ou de message de contrôle des droits d'accès (ECM), et des désembrouilleurs.
  • assurer la sécurité matérielle, comme les échelles de clés ;
  • Compatibilité avec les environnements d'exécution sécurisés (TEE) tels que TrustZone.

Configurations compatibles

Configuration de Hardware Tuner

Si le matériel est responsable du démultiplexage du flux de transport MPEG et de décryptage, Tuner Framework fournit des informations spécifiques au programme (PSI) en accès conditionnel au Application TIS permettant l'interface avec des tuners TV matériels.

L'accès conditionnel aux données PSI inclut des descripteurs d'autorité de certification, des ECM et des EMM. Ces permettent au plug-in CAS d'obtenir les clés nécessaires pour déchiffrer flux de contenu.

Schéma de la configuration du tuner matériel.

Figure 1 : Configuration de Hardware Tuner

La configuration matérielle peut avoir une couche TEE, telle que TrustZone, comme illustré à la figure 1. En l'absence de couche TEE, un client CAS le plug-in peut communiquer avec les services d'échelle de clés matérielles fournis par le Google Cloud. En raison des variantes de ces interfaces propres aux fournisseurs, Media CAS ne les standardise pas.

Configuration logicielle

Avant Android 11, le framework CAS Media être utilisées pour traiter du contenu logiciel, tel que l'IPTV à partir d'adresses IP multicast/unicast. L'application TIS est chargée d'instancier et de de provisionner l'objet Java Media CAS.

L'application peut utiliser MediaExtractor ou d'autres analyseurs MPEG2-TS pour extraire Données PSI liées aux CA, telles que les descripteurs d'autorités de certification, les ECM et les EMM. Si l'application utilise au framework MediaExtractor, il peut déléguer la session CAS gestion de la sécurité, comme l'ouverture d'une session et le traitement des solutions EMM/ECM, au framework MediaExtractor. MediaExtractor configure ensuite la session CAS à l'aide de l'API native API.

Sinon, l'application est chargée d'extraire les données PSI liées à l'autorité de certification et Configuration de la session CAS à l'aide des API Java Media CAS (par exemple, lorsque l'application utilise son propre analyseur MPEG2-TS).

Schéma de la configuration du tuner.

Figure 2. l'entrée IPTV, l'autorité de certification et la configuration du désembrouilleur à l'aide de la Framework MediaExtractor

Dans le scénario de l'extracteur logiciel, l'extracteur nécessite un logiciel ou un objet de décoffrage matériel pour chaque piste brouillée, que la piste nécessite ou non des décodeurs sécurisés. Cela est dû à comme suit.

  • Si la piste ne nécessite pas de décodage sécurisé, l'extracteur désembrouille l'unité d'accès pour effacer les tampons et extraire les échantillons comme s'il s'agissait effacez le flux. Ainsi, MediaCodec n'a pas besoin d'être impliqué dans le à désembrouiller.
  • Si la piste nécessite un décodage sécurisé, l'extracteur peut toujours ont besoin d'un désembrouilleur. Cela se produit lorsque le flux de transport est cryptées au niveau du paquet de transport, où l'élément (ou PES) est brouillé. L'extracteur doit accéder au PES en-tête pour certaines informations en aval (par exemple, la présentation (code temporel).

    L'extracteur n'est pas utilisé par l'extracteur si le flux de transport est brouillés au niveau du paquet PES, où l'en-tête PES est laissé vide. Toutefois, il n'est pas possible de confirmer à quel moment l'embrouillage a lieu avant que un paquet brouillé réel arrive. Par souci de simplicité, supposons qu'un désembrouilleur est utilisé si la piste est brouillée d'après le mappage du programme ; (PMT).

Limites de la configuration logicielle

Lorsque la piste nécessite un décodage sécurisé, le décodage doit être prudent lorsque vous laissez une opération de désembrouillage en tampons. Comme un décodage audio non sécurisé est requis, si le décodage vidéo nécessite des décodeurs sécurisés, il doit être brouillé sur une session différente de l'audio. L'ECM de la session doit signaler au plug-in qu'un décodeur sécurisé est obligatoire.

Le plug-in doit également pouvoir lier de manière fiable clé à sa stratégie de sécurité. Sinon, l'application peut facilement accéder aux vidéos à l'aide du désembrouilleur audio.

Même lorsque la session nécessite un décodeur sécurisé, il peut être demande d'extraire une petite quantité de données pour effacer les tampons par l'extracteur pour traiter l'en-tête PES. Pour empêcher une application malveillante de créer le plug-in renvoie l'unité d'accès entière, le plug-in doit analyser la charge utile de transport pour s'assurer que la charge utile commence par un en-tête PES du flux approprié de mots clés. Sinon, le plug-in devrait refuser la requête.

Séquence de réglage de l'autorité de certification

Lors du réglage d'une nouvelle chaîne, le module TIS s'enregistre pour recevoir l'autorité de certification des descripteurs, des ECM et des EMM du framework PSI Tuner. Un descripteur d'autorité de certification contient l’ID système de l’autorité de certification, qui identifie de manière unique une autorité de certification spécifique et d'autres données spécifiques aux fournisseurs. TIS interroge le Media CAS pour déterminer s'il existe un plug-in CAS capable de gérer le descripteur de l'autorité de certification.

Schéma du réglage du contenu CAS.

Figure 3. Réglage du contenu CAS

Si l'ID système de l'autorité de certification est pris en charge, une instance du CAS de support est créée. et les données privées du fournisseur issues du descripteur de l'autorité de certification sont fournies au plug-in. Ensuite, de nouvelles sessions sont ouvertes dans Media CAS pour gérer l'audio et la vidéo flux. Les sessions nouvellement ouvertes reçoivent des ECM et des EMM pour le plug-in.

Exemple de flux du plug-in CAS

TIS fournit des ECM au plug-in CAS à l'aide des API Media CAS. Un ECM contient le mot de contrôle chiffré, qui doit être déchiffré à l'aide des informations d'une solution EMM. Le plug-in CAS détermine comment acquérir un EMM pour l'élément en fonction des informations spécifiques au fournisseur Descripteur de l'autorité de certification fourni par la méthode setPrivateData().

Les EMM peuvent être diffusés en groupe dans le flux de contenu ou hors bande à l'aide d'un requête réseau initiée par le plug-in d'autorité de certification. TIS utilise la méthode processEMM() pour fournir des EMM en bande au plug-in CA.

Si une requête réseau est nécessaire pour obtenir un EMM, le plug-in CA est responsable de l'exécution de la transaction réseau avec un serveur de licences.

Schéma d'un exemple de CAS.

Figure 4. Exemple de plug-in CAS pour le traitement EMM et ECM

Une fois l'EMM reçu, le plug-in de l'autorité de certification l'analyse pour obtenir la clé chiffrée pour déchiffrer le mot de contrôle. L'EMM chiffré et le mot de contrôle chiffré peuvent être chargés dans une échelle de clés pour effectuer le déchiffrement du mot de contrôle et l'exécution du flux de contenu.

API Java Media CAS

L'API Java Media CAS contient les méthodes suivantes.

  • Répertoriez tous les plug-ins d'autorité de certification disponibles sur l'appareil.

    class MediaCas.PluginDescriptor {
      public String getName();
      public int getSystemId();
    }
    static PluginDescriptor[] enumeratePlugins();
    
  • Créez une instance Media CAS pour le système d'autorité de certification spécifié. Cela signifie que le framework Media CAS peut gérer plusieurs systèmes CAS simultanément.

    MediaCas(int CA_system_id);
    MediaCas(@NonNull Context context, int casSystemId,
             @Nullable String tvInputServiceSessionId,
             @PriorityHintUseCaseType int priorityHint);
    
  • Enregistrer un écouteur d'événements et autoriser l'application à spécifier un gestionnaire dont Looper est utilisé.

    interface MediaCas.EventListener {
      void onEvent(MediaCas, int event, int arg, byte[] data);
      void onSessionEvent(@NonNull MediaCas mediaCas, @NonNull Session session, int event, int arg, @Nullable byte[] data);
      void onPluginStatusUpdate(@NonNull MediaCas mediaCas, @PluginStatus int status, int arg);
      void onResourceLost(@NonNull MediaCas mediaCas);
    }
    void setEventListener(MediaCas.EventListener listener, Handler handler);
    
  • Envoyez les données privées au système d'autorité de certification. Les données privées peuvent être depuis le descripteur de l'autorité de certification, la table d'accès conditionnel ou sources hors bande. Cet élément n'est associé à aucune session spécifique.

    void setPrivateData(@NonNull byte[] data);
    
  • Traiter un paquet EMM

    void processEmm(@NonNull byte[] data, int offset, int length);
    
  • Envoyez un événement à un système d'autorité de certification. Le format de l'événement est spécifique au schéma et opaque pour le cadre.

    void sendEvent(int event, int arg, @Nullable byte[] data);
    
  • Lancer une opération de provisionnement du type spécifié pour une autorité de certification du système d'exploitation. Lorsqu'un appareil s'inscrit à un service de télévision payant pour la première fois, il doit être provisionné sur le serveur CAS en premier. Fournissez un ensemble de paramètres associés à l'appareil pour le provisionnement.

    void provision(String provisionString);
    
  • Déclencher une actualisation des droits d'accès Lorsqu'un utilisateur s'abonne à un une nouvelle chaîne (par exemple, en répondant à une publicité) ou en ajoutant une chaîne dans le guide électronique des programmes (EPG), l'application doit pouvoir dire aux clients de l'autorité de certification d'actualiser les clés des droits d'accès.

    void refreshEntitlements(int refreshType);
    
  • Fermez l'objet Media CAS.

    void close();
    
  • Ouvrez une session.

    Session openSession();
    Session openSession(@SessionUsage int sessionUsage, @ScramblingMode int scramblingMode);
    
  • Fermez une session ouverte précédemment.

    void Session#close();
    
  • Fournissez les données privées de l'autorité de certification à partir d'un descripteur d'autorité de certification dans la table PMT, qui peut être depuis la section "Informations sur le programme" ou la section "Informations sur l'Espagne" vers une session CAS.

    void Session#setPrivateData(@NonNull byte[] sessionId, @NonNull byte[] data);
    
  • Traiter un paquet ECM pour une session

    void Session#processEcm(@NonNull byte[] data, int offset, int length);
    
  • Permet d'obtenir l'ID de session.

    byte[] Session#getSessionId();
    
  • Envoyez un événement de session à un système d'autorité de certification. Le format de l'événement est spécifique au schéma et n'est pas adapté au cadre.

    void Session#sendSessionEvent(int event, int arg, @Nullable byte[] data);