View a markdown version of this page

SPEKE API v2.0 - Contrat de cryptage - 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.0 - Contrat de cryptage

Le contrat de cryptage définit quelles clés de contenu protègent quelles pistes au sein d'un ensemble de flux donné, en fonction des caractéristiques des pistes.

L'utilisation de plusieurs touches de contenu pour les différentes pistes d'un stream, bien qu'il s'agisse d'une bonne pratique recommandée par le secteur, n'est pas obligatoire, mais recommandée : au moins deux touches de contenu différentes, une pour les pistes audio et l'autre pour les pistes vidéo. L'utilisation d'une clé de contenu unique pour chiffrer plusieurs pistes est possible, mais elle doit être explicitement signalée dans le document CPIX envoyé par le chiffreur au fournisseur de clés. D'une manière générale, le chiffreur décrit toujours avec précision le nombre de clés de contenu requises et la manière dont elles sont utilisées pour crypter les différentes pistes multimédia.

Principes

Le contrat de cryptage 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 faire référence à 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 cryptage 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, en fonction de la valeur de ContentKeyUsageRule@intendedTrackType l'attribut.

Les règles qui régissent cette relation sont les suivantes :

  • Lorsque toutes les pistes audio et vidéo du stream 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 montre un tel cas d'utilisation. Dans ce cas, les éléments a <cpix:AudioFilter /> et a <cpix:VideoFilter /> enfants sans aucun attribut doivent être inclus. Toute autre combinaison d'<cpix:AudioFilter> and/or <cpix:VideoFilter>éléments 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 via le signe « + ». Des 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'ContentKeyUsageRule@intendedTrackTypeattribut. 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

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 Assistance globale de SPEKE Attributs de filtre pris en charge par SPEKE Attributs de filtre non pris en charge par SPEKE

<cpix : >VideoFilter

Oui

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

wcg

<cpix : >AudioFilter

Oui

MinChannels, MaxChannels (attributs facultatifs)

<cpix : >KeyPeriodFilter

Oui

PeriodID (attribut obligatoire)

<cpix : >BitrateFilter

Non

N/A

N/A

<cpix : >LabelFilter

Non

N/A

N/A

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

Situations problématiques

Dans certaines situations, les informations fournies dans le contrat de cryptage 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... should/shall Le principal fournisseur should/shall ...

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

Le chiffreur 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 chiffreur doit générer une erreur et arrêter le traitement.

Non pertinent : le fournisseur clé ne connaît pas la structure du stream.

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

Le chiffreur doit appliquer la dernière évaluation ContentKeyUsageRule réussie dans l'ordre du document.

Non pertinent : le fournisseur clé ne connaît pas la structure du stream.

Le contrat de cryptage change en un seul cycle SPEKE request/response

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

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

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

Le chiffreur 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 cryptage mal formé ».

Contrat de cryptage bien établi, mais en violation des contraintes des 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 chiffreur a pris connaissance des contraintes relatives aux niveaux de sécurité des 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 « Le contrat de cryptage CPIX demandé n'est pas pris en charge ».

Contrat de chiffrement manquant

Le chiffreur ne doit pas envoyer de documents CPIX qui ne contiennent aucun VideoFilter élément OR. 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 seule 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, les 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 touches de contenu pour différentes pistes vidéo (SD/HD), une touche 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 touches de contenu pour différentes pistes vidéo (SD/HD/UHD), une touche 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 touches de contenu pour différentes pistes vidéo (SD/HD/UHD1/UHD2), une touche 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 touches de contenu pour différentes pistes vidéo (SD/HD1/HD2/UHD1/UHD2), une touche 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 chaîne 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>