SPEKE API v2 - Contrat de chiffrement - Spécification d'API Secure Packager and Encoder Key Exchange

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

SPEKE API v2 - Contrat de chiffrement

Le contrat de chiffrement définit les clés de contenu qui protègent les pistes d'un ensemble de flux donné, en fonction des caractéristiques des pistes.

Bien qu'il s'agisse d'une bonne pratique recommandée par le secteur, l'utilisation de plusieurs clés de contenu pour les différentes pistes d'un stream n'est pas obligatoire, mais recommandée : au moins deux clés de contenu différentes, une pour les pistes audio et l'autre pour les pistes vidéo. Il est possible d'utiliser une clé de contenu unique pour chiffrer plusieurs pistes, mais cela doit être explicitement indiqué dans le document CPIX envoyé par le crypteur au fournisseur de clés. D'une manière générale, le crypteur décrit toujours précisément le nombre de clés de contenu requises et la manière dont elles sont utilisées pour chiffrer les différentes pistes multimédias.

Principes

Le contrat de chiffrement se trouve dans la <cpix:ContentKeyUsageRuleList> section du document CPIX. Dans cette section, chaque clé de contenu définie dans la <cpix:ContentKeyList> section correspond à un <cpix:ContentKeyUsageRule> élément spécifique, qui doit inclure :

  • un ContentKeyUsageRule@intendedTrackType attribut qui peut référencer un ou plusieurs sous-composants, séparés par le signe « + » si plusieurs sous-composants sont utilisés. La valeur de ContentKeyUsageRule@intendedTrackType doit être unique dans un contrat de chiffrement et ne peut pas être utilisée dans plusieurs ContentKeyUsageRule éléments.

  • un ou plusieurs éléments <cpix:AudioFilter> ou éléments <cpix:VideoFilter> enfants, selon la valeur de ContentKeyUsageRule@intendedTrackType l'attribut.

Les règles régissant cette relation sont les suivantes :

  • Lorsque toutes les pistes audio et vidéo du streamset doivent être protégées par une clé de contenu unique, la chaîne 'ALL' doit être utilisée comme valeur d'ContentKeyUsageRule@intendedTrackTypeattribut. L'exemple 1 illustre un tel cas d'utilisation. Dans ce cas, les éléments a <cpix:AudioFilter /> <cpix:VideoFilter /> et a sans attribut doivent être inclus. Toute autre combinaison <cpix:AudioFilter> et/ou <cpix:VideoFilter> élément n'est pas valide dans ce contexte particulier.

  • Pour tous les autres cas d'utilisation, la valeur de l'ContentKeyUsageRule@intendedTrackTypeattribut peut être définie librement, et le nombre d'éléments <cpix:AudioFilter /> et un élément <cpix:VideoFilter /> enfant doivent correspondre au nombre de sous-composants agrégés par le signe « + ». Les exemples 2/3/4/5/6/7/9/10 illustrent cette exigence lorsqu'un seul sous-composant est présent dans la valeur de l'attribut. ContentKeyUsageRule@intendedTrackType L'exemple 8 l'illustre lorsque plusieurs sous-composants sont utilisés : il ContentKeyUsageRule@intendedTrackType="SD+HD" est décrit par deux éléments <cpix:VideoFilter> enfants distincts avec des valeurs d'attributs différentes, et ContentKeyUsageRule@intendedTrackType="HDR+HFR+UHD" est décrit par trois éléments <cpix:VideoFilter> enfants distincts avec des valeurs d'attributs différentes.

Filtres

Le CPIX définit plusieurs éléments et attributs de filtrage, mais SPEKE n'en prend en charge qu'un sous-ensemble. Le tableau suivant résume ces différences :

Type de filtre CPIX Support global de SPEKE Attributs de filtre pris en charge par SPEKE Attributs de filtre non pris en charge par SPEKE

<pixels : >VideoFilter

Oui

MinPixels, MaxPixels, hdr, MinFPS, MaxFPS (attributs facultatifs)

wcg

<pixels : >AudioFilter

Oui

MinChannels, MaxChannels (attributs facultatifs)

<pixels : >KeyPeriodFilter

Oui

PerioDid (attribut obligatoire)

<pixels : >BitrateFilter

Non

N/A

N/A

<pixels : >LabelFilter

Non

N/A

N/A

Conformément à la spécification CPIX pour VideoFilter, [MinPixels, MaxPixels] est une plage complète dans les deux dimensions, tandis que (MinFps, MaxFPS] n'inclut que la dimension MaxFPS. Car AudioFilter [MinChannels, MaxChannels] est une plage inclusive dans les deux dimensions.

Situations problématiques

Dans certains cas, les informations fournies dans le contrat de chiffrement peuvent être partielles, ambiguës ou erronées. Dans ces cas, il est important que le crypteur et le fournisseur de clés se comportent de manière appropriée et garantissent une protection adéquate du contenu. Le tableau suivant présente le comportement recommandé dans ces situations :

Dans cette situation Le crypteur devrait/doit... Le principal fournisseur devrait/doit...

Aucune règle ne s'applique à une ou plusieurs pistes du streamset (voir exemple 3 ci-dessous)

Le crypteur doit examiner sa configuration (externe à la charge utile CPIX) et vérifier que les pistes concernées ne nécessitent pas de cryptage. Si ce n'est pas le cas, le crypteur devrait générer une erreur et arrêter le traitement.

Non pertinent : le fournisseur principal ne connaît pas la structure du stream set.

Plusieurs règles se chevauchent et suggèrent plusieurs clés de contenu pour chiffrer une piste spécifique

Le crypteur doit appliquer la dernière valeur évaluée ContentKeyUsageRule avec succès dans l'ordre du document.

Non pertinent : le fournisseur principal ne connaît pas la structure du stream set.

Le contrat de chiffrement change en un seul cycle de demande/réponse SPEKE

Le crypteur doit déclencher une exception et arrêter le traitement, car le fournisseur de clés n'est pas responsable de la définition du contrat de chiffrement.

Pour éviter que cette situation ne se produise en premier lieu, le fournisseur de clés ne doit pas modifier un contrat de chiffrement reçu dans la charge utile CPIX de la demande SPEKE.

Contrat de chiffrement mal formé : exception à la contrainte de cardinalité intendedTrackType /Filters, filtres ou attributs non pris en charge

Le crypteur doit déclencher une exception, arrêter le traitement et ne pas envoyer la demande SPEKE au fournisseur de clés, car cela entraînerait très probablement une protection du contenu erronée ou laisserait certaines traces non protégées.

Le fournisseur de clés doit déclencher une exception et renvoyer une erreur « Contrat de chiffrement mal formé ».

Contrat de chiffrement bien conçu, mais en violation des contraintes liées aux niveaux de sécurité DRM : par exemple, une clé de contenu unique est demandée pour protéger à la fois les pistes audio et les pistes vidéo UHD

Si le crypteur a connaissance des contraintes liées aux niveaux de sécurité DRM, il doit déclencher une exception, arrêter le traitement et ne pas envoyer la demande SPEKE au fournisseur de clés, car cela entraînerait très probablement une protection du contenu erronée.

Le fournisseur de clés doit déclencher une exception et renvoyer une erreur « Contrat de chiffrement CPIX demandé non pris en charge ».

Contrat de chiffrement manquant

Le crypteur ne doit pas envoyer de documents CPIX qui ne contiennent aucun VideoFilter élément ou élément. AudioFilter

Le fournisseur de clés doit déclencher une exception et renvoyer une erreur « Contrat de chiffrement CPIX manquant ».

Exemples de contrats de chiffrement

Exemple 1 : une clé de contenu pour toutes les pistes audio et vidéo

<cpix:ContentKeyUsageRuleList> <cpix:ContentKeyUsageRule kid="98ee5596-cd3e-a20d-163a-e382420c6eff" intendedTrackType="ALL"> <cpix:KeyPeriodFilter periodId="keyPeriod_0909829f-40ff-4625-90fa-75da3e53278f"/> <cpix:AudioFilter /> <cpix:VideoFilter /> </cpix:ContentKeyUsageRule> </cpix:ContentKeyUsageRuleList>

Exemple 2 : une clé de contenu pour toutes les pistes vidéo, une clé de contenu pour toutes les pistes audio

<cpix:ContentKeyUsageRuleList> <cpix:ContentKeyUsageRule kid="98ee5596-cd3e-a20d-163a-e382420c6eff" intendedTrackType="VIDEO"> <cpix:KeyPeriodFilter periodId="keyPeriod_0909829f-40ff-4625-90fa-75da3e53278f"/> <cpix:VideoFilter /> </cpix:ContentKeyUsageRule> <cpix:ContentKeyUsageRule kid="53abdba2-f210-43cb-bc90-f18f9a890a02" intendedTrackType="AUDIO"> <cpix:KeyPeriodFilter periodId="keyPeriod_0909829f-40ff-4625-90fa-75da3e53278f"/> <cpix:AudioFilter /> </cpix:ContentKeyUsageRule> </cpix:ContentKeyUsageRuleList>

Exemple 3 : une clé de contenu pour toutes les pistes vidéo, pistes audio non cryptées

<cpix:ContentKeyUsageRuleList> <cpix:ContentKeyUsageRule kid="98ee5596-cd3e-a20d-163a-e382420c6eff" intendedTrackType="VIDEO"> <cpix:KeyPeriodFilter periodId="keyPeriod_0909829f-40ff-4625-90fa-75da3e53278f"/> <cpix:VideoFilter /> </cpix:ContentKeyUsageRule> </cpix:ContentKeyUsageRuleList>

Exemple 4 : plusieurs clés de contenu pour différentes pistes vidéo (SD/HD), une clé de contenu pour toutes les pistes audio

<cpix:ContentKeyUsageRuleList> <!-- Rule for SD video tracks (up to 1024x576) --> <cpix:ContentKeyUsageRule kid="98ee5596-cd3e-a20d-163a-e382420c6eff" intendedTrackType="SD"> <cpix:KeyPeriodFilter periodId="keyPeriod_0909829f-40ff-4625-90fa-75da3e53278f"/> <cpix:VideoFilter maxPixels="589824" /> </cpix:ContentKeyUsageRule> <!-- Rule for HD video tracks (more than 1024x576) --> <cpix:ContentKeyUsageRule kid="37e3de05-9a3b-4c69-8970-63c17a95e0b7" intendedTrackType="HD"> <cpix:KeyPeriodFilter periodId="keyPeriod_0909829f-40ff-4625-90fa-75da3e53278f"/> <cpix:VideoFilter minPixels="589825" /> </cpix:ContentKeyUsageRule> <!-- Rule for all audio tracks --> <cpix:ContentKeyUsageRule kid="53abdba2-f210-43cb-bc90-f18f9a890a02" intendedTrackType="AUDIO"> <cpix:KeyPeriodFilter periodId="keyPeriod_0909829f-40ff-4625-90fa-75da3e53278f"/> <cpix:AudioFilter /> </cpix:ContentKeyUsageRule> </cpix:ContentKeyUsageRuleList>

Exemple 5 : plusieurs clés de contenu pour différentes pistes vidéo (SD/HD/UHD), une clé de contenu pour toutes les pistes audio

<cpix:ContentKeyUsageRuleList> <!-- Rule for SD video tracks (up to 1024x576) --> <cpix:ContentKeyUsageRule kid="98ee5596-cd3e-a20d-163a-e382420c6eff" intendedTrackType="SD"> <cpix:KeyPeriodFilter periodId="keyPeriod_0909829f-40ff-4625-90fa-75da3e53278f"/> <cpix:VideoFilter maxPixels="589824" /> </cpix:ContentKeyUsageRule> <!-- Rule for HD video tracks (more than 1024x576, up to 1920x1080) --> <cpix:ContentKeyUsageRule kid="37e3de05-9a3b-4c69-8970-63c17a95e0b7" intendedTrackType="HD"> <cpix:KeyPeriodFilter periodId="keyPeriod_0909829f-40ff-4625-90fa-75da3e53278f"/> <cpix:VideoFilter minPixels="589825" maxPixels="2073600" /> </cpix:ContentKeyUsageRule> <!-- Rule for UHD video tracks (more than 1920x1080) --> <cpix:ContentKeyUsageRule kid="75c6fa78-8b5d-6d75-9653-26f41b78d1a3" intendedTrackType="UHD"> <cpix:KeyPeriodFilter periodId="keyPeriod_0909829f-40ff-4625-90fa-75da3e53278f"/> <cpix:VideoFilter minPixels="2073601" /> </cpix:ContentKeyUsageRule> <!-- Rule for all audio tracks --> <cpix:ContentKeyUsageRule kid="53abdba2-f210-43cb-bc90-f18f9a890a02" intendedTrackType="AUDIO"> <cpix:KeyPeriodFilter periodId="keyPeriod_0909829f-40ff-4625-90fa-75da3e53278f"/> <cpix:AudioFilter /> </cpix:ContentKeyUsageRule> </cpix:ContentKeyUsageRuleList>

Exemple 6 : plusieurs clés de contenu pour différentes pistes vidéo (SD/HD/UHD1/UHD2), une clé de contenu pour toutes les pistes audio

<cpix:ContentKeyUsageRuleList> <!-- Rule for SD video tracks (up to 1024x576) --> <cpix:ContentKeyUsageRule kid="98ee5596-cd3e-a20d-163a-e382420c6eff" intendedTrackType="SD"> <cpix:KeyPeriodFilter periodId="keyPeriod_0909829f-40ff-4625-90fa-75da3e53278f"/> <cpix:VideoFilter maxPixels="589824" /> </cpix:ContentKeyUsageRule> <!-- Rule for HD video tracks (more than 1024x576, up to 1920x1080) --> <cpix:ContentKeyUsageRule kid="37e3de05-9a3b-4c69-8970-63c17a95e0b7" intendedTrackType="HD"> <cpix:KeyPeriodFilter periodId="keyPeriod_0909829f-40ff-4625-90fa-75da3e53278f"/> <cpix:VideoFilter minPixels="589825" maxPixels="2073600" /> </cpix:ContentKeyUsageRule> <!-- Rule for UHD1 video tracks (more than 1920x1080, up to 4096x2160) --> <cpix:ContentKeyUsageRule kid="75c6fa78-8b5d-6d75-9653-26f41b78d1a3" intendedTrackType="UHD1"> <cpix:KeyPeriodFilter periodId="keyPeriod_0909829f-40ff-4625-90fa-75da3e53278f"/> <cpix:VideoFilter minPixels="2073601" maxPixels="8847360" /> </cpix:ContentKeyUsageRule> <!-- Rule for UHD2 video tracks (more than 4096x2160) --> <cpix:ContentKeyUsageRule kid="63d2ec36-6b7c-9f34-4546-97d01f36f7c5" intendedTrackType="UHD2"> <cpix:KeyPeriodFilter periodId="keyPeriod_0909829f-40ff-4625-90fa-75da3e53278f"/> <cpix:VideoFilter minPixels="8847361" /> </cpix:ContentKeyUsageRule> <!-- Rule for all audio tracks --> <cpix:ContentKeyUsageRule kid="53abdba2-f210-43cb-bc90-f18f9a890a02" intendedTrackType="AUDIO"> <cpix:KeyPeriodFilter periodId="keyPeriod_0909829f-40ff-4625-90fa-75da3e53278f"/> <cpix:AudioFilter /> </cpix:ContentKeyUsageRule> </cpix:ContentKeyUsageRuleList>

Exemple 7 : plusieurs clés de contenu pour différentes pistes vidéo (SD/HD1/HD2/UHD1/UHD2), une clé de contenu pour toutes les pistes audio

<cpix:ContentKeyUsageRuleList> <!-- Rule for SD video tracks (up to 1024x576) --> <cpix:ContentKeyUsageRule kid="98ee5596-cd3e-a20d-163a-e382420c6eff" intendedTrackType="SD"> <cpix:KeyPeriodFilter periodId="keyPeriod_0909829f-40ff-4625-90fa-75da3e53278f"/> <cpix:VideoFilter maxPixels="589824" /> </cpix:ContentKeyUsageRule> <!-- Rule for HD1 video tracks (more than 1024x576, up to 1280x720) --> <cpix:ContentKeyUsageRule kid="37e3de05-9a3b-4c69-8970-63c17a95e0b7" intendedTrackType="HD1"> <cpix:KeyPeriodFilter periodId="keyPeriod_0909829f-40ff-4625-90fa-75da3e53278f"/> <cpix:VideoFilter minPixels="589825" maxPixels="921600" /> </cpix:ContentKeyUsageRule> <!-- Rule for HD2 video tracks (more than 1280x720, up to 1920x1080) --> <cpix:ContentKeyUsageRule kid="cda406d8-9d87-4f76-92da-31110e756176" intendedTrackType="HD2"> <cpix:KeyPeriodFilter periodId="keyPeriod_0909829f-40ff-4625-90fa-75da3e53278f"/> <cpix:VideoFilter minPixels="921601" maxPixels="2073600" /> </cpix:ContentKeyUsageRule> <!-- Rule for UHD1 video tracks (more than 1920x1080, up to 4096x2160) --> <cpix:ContentKeyUsageRule kid="75c6fa78-8b5d-6d75-9653-26f41b78d1a3" intendedTrackType="UHD1"> <cpix:KeyPeriodFilter periodId="keyPeriod_0909829f-40ff-4625-90fa-75da3e53278f"/> <cpix:VideoFilter minPixels="2073601" maxPixels="8847360" /> </cpix:ContentKeyUsageRule> <!-- Rule for UHD2 video tracks (more than 4096x2160) --> <cpix:ContentKeyUsageRule kid="63d2ec36-6b7c-9f34-4546-97d01f36f7c5" intendedTrackType="UHD2"> <cpix:KeyPeriodFilter periodId="keyPeriod_0909829f-40ff-4625-90fa-75da3e53278f"/> <cpix:VideoFilter minPixels="8847361" /> </cpix:ContentKeyUsageRule> <!-- Rule for all audio tracks --> <cpix:ContentKeyUsageRule kid="53abdba2-f210-43cb-bc90-f18f9a890a02" intendedTrackType="AUDIO"> <cpix:KeyPeriodFilter periodId="keyPeriod_0909829f-40ff-4625-90fa-75da3e53278f"/> <cpix:AudioFilter /> </cpix:ContentKeyUsageRule> </cpix:ContentKeyUsageRuleList>

Exemple 8 : plusieurs clés de contenu pour différentes pistes vidéo (basées sur plusieurs types d'attributs), une clé de contenu pour toutes les pistes audio

<cpix:ContentKeyUsageRuleList> <!-- Rule for SD and HD video tracks--> <cpix:ContentKeyUsageRule kid="98ee5596-cd3e-a20d-163a-e382420c6eff" intendedTrackType="SD+HD"> <cpix:KeyPeriodFilter periodId="keyPeriod_0909829f-40ff-4625-90fa-75da3e53278f"/> <cpix:VideoFilter maxPixels="442368" maxFps="30" hdr="false"/> <cpix:VideoFilter minPixels="442369" maxPixels="2073600" maxFps="30" hdr="false"/> </cpix:ContentKeyUsageRule> <!-- Rule for HDR, HFR and UHD video tracks--> <cpix:ContentKeyUsageRule kid="37e3de05-9a3b-4c69-8970-63c17a95e0b7" intendedTrackType="HDR+HFR+UHD"> <cpix:KeyPeriodFilter periodId="keyPeriod_0909829f-40ff-4625-90fa-75da3e53278f"/> <cpix:VideoFilter hdr="true" /> <cpix:VideoFilter minFps="30" /> <cpix:VideoFilter minPixels="20736001" /> </cpix:ContentKeyUsageRule> <!-- Rule for all audio tracks--> <cpix:ContentKeyUsageRule kid="53abdba2-f210-43cb-bc90-f18f9a890a02" intendedTrackType="AUDIO"> <cpix:KeyPeriodFilter periodId="keyPeriod_0909829f-40ff-4625-90fa-75da3e53278f"/> <cpix:AudioFilter /> </cpix:ContentKeyUsageRule> </cpix:ContentKeyUsageRuleList>

Exemple 9 : une touche de contenu pour toutes les pistes vidéo, plusieurs touches de contenu pour les pistes audio stéréo et multicanaux

<cpix:ContentKeyUsageRuleList> <!-- Rule for video tracks--> <cpix:ContentKeyUsageRule kid="98ee5596-cd3e-a20d-163a-e382420c6eff" intendedTrackType="VIDEO"> <cpix:KeyPeriodFilter periodId="keyPeriod_0909829f-40ff-4625-90fa-75da3e53278f"/> <cpix:VideoFilter /> </cpix:ContentKeyUsageRule> <!-- Rule for stereo audio tracks--> <cpix:ContentKeyUsageRule kid="53abdba2-f210-43cb-bc90-f18f9a890a02" intendedTrackType="STEREO_AUDIO"> <cpix:KeyPeriodFilter periodId="keyPeriod_0909829f-40ff-4625-90fa-75da3e53278f"/> <cpix:AudioFilter maxChannels="2"/> </cpix:ContentKeyUsageRule> <!-- Rule for multichannel audio tracks--> <cpix:ContentKeyUsageRule kid="7ae8e96f-309e-42c3-a510-24023d923373" intendedTrackType="MULTICHANNEL_AUDIO"> <cpix:KeyPeriodFilter periodId="keyPeriod_0909829f-40ff-4625-90fa-75da3e53278f"/> <AudioFilter minChannels="3"/> </cpix:ContentKeyUsageRule> </cpix:ContentKeyUsageRuleList>

Exemple 10 : une touche de contenu pour toutes les pistes vidéo, plusieurs touches de contenu pour la stéréo et deux types de pistes audio multicanaux

<cpix:ContentKeyUsageRuleList> <!-- Rule for video tracks--> <cpix:ContentKeyUsageRule kid="98ee5596-cd3e-a20d-163a-e382420c6eff" intendedTrackType="VIDEO"> <cpix:KeyPeriodFilter periodId="keyPeriod_0909829f-40ff-4625-90fa-75da3e53278f"/> <cpix:VideoFilter /> </cpix:ContentKeyUsageRule> <!-- Rule for stereo audio tracks--> <cpix:ContentKeyUsageRule kid="53abdba2-f210-43cb-bc90-f18f9a890a02" intendedTrackType="STEREO_AUDIO"> <cpix:KeyPeriodFilter periodId="keyPeriod_0909829f-40ff-4625-90fa-75da3e53278f"/> <cpix:AudioFilter maxChannels="2"/> </cpix:ContentKeyUsageRule> <!-- Rule for multichannel audio tracks (3 to 6 channels)--> <cpix:ContentKeyUsageRule kid="7ae8e96f-309e-42c3-a510-24023d923373" intendedTrackType="MULTICHANNEL_AUDIO_3_6"> <cpix:KeyPeriodFilter periodId="keyPeriod_0909829f-40ff-4625-90fa-75da3e53278f"/> <cpix:AudioFilter minChannels="3" maxChannels="6"/> </cpix:ContentKeyUsageRule> <!-- Rule for multichannel audio tracks (7 channels and more)--> <cpix:ContentKeyUsageRule kid="81eb3761-55ff-4d22-a31d-94f01bbfd8ba" intendedTrackType="MULTICHANNEL_AUDIO_7"> <cpix:KeyPeriodFilter periodId="keyPeriod_0909829f-40ff-4625-90fa-75da3e53278f"/> <cpix:AudioFilter minChannels="7"/> </cpix:ContentKeyUsageRule> </cpix:ContentKeyUsageRuleList>