Spécification de l’en-tête PlayReady

1. Introduction

Cette spécification s’applique à n’importe quel produit final créé avec le kit de développement logiciel (SDK) PlayReady Server, le Kit de portage d’appareils PlayReady, Windows, Xbox, Windows Phone et Silverlight.

1.1. Historique des modifications

Version Modifier
8 septembre 2021 Ajoutez l’attribut LICENSEREQUESTED facultatif au nœud PROTECTINFO.
1er novembre 2017 Ajoutez la section Exigences de syntaxe. Correction de plusieurs exemples avec un ordre d’attribut incorrect (les attributs doivent être dans l’ordre alphabétique)
12 juillet 2017 Ajoutez la section PlayReady Header 4.3.0.0, prise en charge à partir de PlayReady version 4.
Ajouter une exigence de syntaxe indiquant que tous les nœuds XML doivent être explicitement fermés par une balise fermante
10 avril 2015 Ajouter la section PlayReady Header 4.2.0.0, prise en charge à partir de PlayReady version 3
Septembre 2011 Ajouter la section PlayReady Header 4.1.0.0, prise en charge à partir de PlayReady version 2
Août 2008 Version initiale documentant l’en-tête PlayReady 4.0.0.0 pris en charge dans PlayReady version 1

2. Objet PlayReady (PRO)

L’objet PlayReady (PRO) contient les champs suivants.

Nom du champ Type de champ Taille (bits) Description
Longueur DWORD 32 Longueur de l’objet PlayReady en octets. Cette valeur ne doit pas dépasser 15 kilo-octets (Ko).
PlayReady Object Record Count WORD 16 Spécifie le nombre d’enregistrements d’objet PlayReady dans l’objet PlayReady.
Enregistrements d’objets PlayReady Tableau BYTE Variable Contient un nombre variable d’enregistrements qui contiennent des informations relatives aux licences et à l’acquisition de licences.

2.1 Enregistrements d’objets PlayReady

L’objet PlayReady se compose de sous-objets supplémentaires appelés Enregistrements d’objets PlayReady. Les enregistrements d’objet PlayReady contiennent les champs suivants.

Nom du champ Type de champ Taille (bits) Description
Type d’enregistrement WORD 16 Spécifie le type de données stockées dans la valeur d’enregistrement.
Longueur de l’enregistrement WORD 16 Spécifie la taille en octets de la valeur d’enregistrement.
Valeur de l’enregistrement Tableau BYTE Variable Le contenu de l’objet dépend de la valeur du type d’enregistrement.

Le champ Type d’enregistrement a l’une des valeurs suivantes.

Type de valeur Description
0x0001 Indique que l’enregistrement contient un en-tête PlayReady (PRH).
0x0002 Réservé.
0x0003 Indique un magasin de licences incorporé (ELS).

2.2. Exemples d’objets PlayReady

La figure suivante montre un fichier MP4 segmenté avec un objet PlayReady qui contient un en-tête PlayReady :

PlayReady Object in MP4

La figure suivante montre la vue HEX de ce fichier MP4 :

PlayReady Object Hex Dump

3. En-tête PlayReady (PRH)

L’en-tête PlayReady (PRH) est utilisé par un client pour localiser ou acquérir une licence pour le contenu dans lequel il est stocké. Il est encodé à l’aide d’UTF-16.

Matrice de prise en charge des versions 3.1

  En-tête PlayReady v4.3.0.0 En-tête PlayReady v4.2.0.0 En-tête PlayReady v4.1.0.0 En-tête PlayReady v4.0.0.0
Clients
basés sur le Kit de développement logiciel (SDK) PlayReady 4.0 (voir la remarque 1)
Clients
basés sur le Kit de développement logiciel (SDK) PlayReady 3.0 (voir la note 2)
 
Clients
basés sur le Kit de développement logiciel (SDK) PlayReady 2.x (voir la note 3)
   
Clients
basés sur le Kit de développement logiciel (SDK) PlayReady 1.x (voir la note 4)
     

Remarques :

  1. Xbox One version 1709 ou ultérieure sont des clients PlayReady 4.X.
  2. Windows 10 (toutes les versions) et Xbox One version 1703 ou antérieure sont des clients PlayReady 3.X. Les appareils non Windows les plus récents (par exemple, les téléviseurs intelligents) publiés après 2017 sont des clients PlayReady 3.X.
  3. Silverlight et Windows 8, 8.1 sont des clients PlayReady 2.X. La plupart des appareils non Windows (par exemple, les téléviseurs intelligents) publiés entre 2011 et 2017 sont des clients PlayReady 2.X.
  4. La plupart des appareils non Windows (par exemple, les téléviseurs intelligents) publiés entre 2008 et 2011 sont des clients PlayReady 1.X.

3.2. Exigences en matière de syntaxe

3.2.1. Canonicalisé

Le code XML doit être canonique.

3.2.2. Tous les noms de nœud et d’attributs respectent la casse

Pris en charge

<KID VALUE="PV1LM/VEVk+kEOB8qqcWDg=="> </KID>

Non prise en charge

<KID value="PV1LM/VEVk+kEOB8qqcWDg=="> </KID>
<kid VALUE="PV1LM/VEVk+kEOB8qqcWDg=="> </kid>

3.2.3. Les balises de fermeture doivent être explicites

Tous les nœuds XML doivent être explicitement fermés par une balise de fermeture, y compris celles dans les nœuds à l’intérieur du nœud CUSTOMATTRIBUTES.

Pris en charge

<KID VALUE="PV1LM/VEVk+kEOB8qqcWDg=="> </KID>
<CUSTOMATTRIBUTES> <MyNode FooAttribute="Foo"> </MyNode> </CUSTOMATTRIBUTES>

Non prise en charge

<KID VALUE="PV1LM/VEVk+kEOB8qqcWDg=="> <CUSTOMATTRIBUTES> <MyNode FooAttribute="Foo"> </CUSTOMATTRIBUTES>

3.2.4. Attributs d’espace de noms

Tous les attributs d’espace de noms doivent apparaître avant les attributs autres que les espaces de noms.

Prise en charge

<WRMHEADER xmlns="http://schemas.microsoft.com/DRM/2007/03/PlayReadyHeader" version="4.3.0.0">

Non pris en charge

<WRMHEADER version="4.3.0.0" xmlns="http://schemas.microsoft.com/DRM/2007/03/PlayReadyHeader>

3.2.5. Ordre alphabétique

Tous les attributs doivent être dans l’ordre alphabétique, y compris ceux des nœuds à l’intérieur du nœud CUSTOMATTRIBUTES.

Pris en charge

<KID ALGID="AESCBC" VALUE="PV1LM/VEVk+kEOB8qqcWDg=="> </KID>
<CUSTOMATTRIBUTES> <MyNode BarAttribute="Bar" FooAttribute="Foo"> </MyNode> </CUSTOMATTRIBUTES>

Non prise en charge

<KID VALUE="PV1LM/VEVk+kEOB8qqcWDg==" ALGID="AESCBC"> </KID>
<CUSTOMATTRIBUTES> <MyNode FooAttribute="Foo" BarAttribute="Bar"> </MyNode> </CUSTOMATTRIBUTES>

3.3. v4.3.0.0

PlayReady Header v4.3.0.0 a été introduit avec PlayReady version 4.0 en septembre 2017 pour prendre en charge les clés AESCBC dans un en-tête. Cette prise en charge permet le chiffrement du contenu en mode CBC, en particulier pour les modes de chiffrement commun « cbcs ». Il augmente également l’interopérabilité des clients PlayReady avec d’autres systèmes DRM, ainsi que du contenu existant.

3.3.1. Différences avec d’autres versions

À compter de la version 4.0, les Kits de développement logiciel (SDK) playReady et les clients peuvent traiter les versions 4.0, 4.1, 4.2 et 4.3. Les kits SDK PlayReady antérieurs à la version 4.0 retournent une erreur « version non prise en charge » lorsqu’ils sont fournis avec des en-têtes v4.3.

Le format d’en-tête PlayReady v.4.3.0.0 présente les modifications suivantes par rapport à la version 4.2.0.0 :

  • L’attribut de version de l’élément WRMHEADER est défini sur la chaîne « 4.3.0.0 ».
  • L’attribut ALGID situé à l’intérieur de l’élément KID peut être manquant dans une demande d’acquisition de licence. Microsoft recommande que l’attribut ALGID ait une valeur valide dans l’en-tête inclus dans le contenu.
  • Lorsque l’attribut ALGID est présent dans n’importe quel élément KID et qu’il existe plusieurs éléments KID dans l’élément KIDS , tous les éléments KID doivent inclure l’attribut ALGID et les valeurs d’attribut doivent être identiques.
  • L’attribut ALGID situé à l’intérieur de l’élément KID peut désormais avoir la valeur « AESCBC », en plus de « AESCTR », à condition que :
    • Lorsque l’attribut ALGID est défini sur « AESCBC », l’attribut CHECKSUM ne doit pas être inclus.

3.3.2. Exemples

Voici un exemple d’en-tête PlayReady 4.3.0.0 avec des clés AESCBC :

<WRMHEADER xmlns="http://schemas.microsoft.com/DRM/2007/03/PlayReadyHeader" version="4.3.0.0">
  <DATA>
    <PROTECTINFO>
      <KIDS>
        <KID ALGID="AESCBC" VALUE="PV1LM/VEVk+kEOB8qqcWDg=="></KID>
        <KID ALGID="AESCBC" VALUE="tuhDoKUN7EyxDPtMRNmhyA=="></KID>
      </KIDS>
    </PROTECTINFO>
    <LA_URL>http://rm.contoso.com/rightsmanager.asmx</LA_URL>
    <DS_ID>AH+03juKbUGbHl1V/QIwRA==</DS_ID>
  </DATA>
</WRMHEADER>

Voici un exemple d’en-tête PlayReady 4.3.0.0 avec un ALGID manquant :

<WRMHEADER xmlns="http://schemas.microsoft.com/DRM/2007/03/PlayReadyHeader" version="4.3.0.0">
  <DATA>
    <PROTECTINFO>
      <KIDS>
        <KID VALUE="PV1LM/VEVk+kEOB8qqcWDg=="></KID>
      </KIDS>
    </PROTECTINFO>
    <LA_URL>http://rm.contoso.com/rightsmanager.asmx</LA_URL>
    <DS_ID>AH+03juKbUGbHl1V/QIwRA==</DS_ID>
    <DECRYPTORSETUP>ONDEMAND</DECRYPTORSETUP>
  </DATA>
</WRMHEADER>

3.3.3. Format

L’en-tête PlayReady v4.3.0.0 a la syntaxe suivante :

<WRMHEADER xmlns="http://schemas.microsoft.com/DRM/2007/03/PlayReadyHeader" version="4.3.0.0">
  <DATA>
      <PROTECTINFO LICENSEREQUESTED="true">
        <KIDS>
          <KID ALGID="value" CHECKSUM="base64-encoded value" VALUE="base64-encoded guid"></KID>
          <KID ALGID="value" CHECKSUM="base64-encoded value" VALUE="base64-encoded guid"></KID>
          <KID ALGID="value" CHECKSUM="base64-encoded value" VALUE="base64-encoded guid"></KID>
        </KIDS>
      </PROTECTINFO>
      <LA_URL> URL for license acquisition </LA_URL>
      <LUI_URL>
        URL for Non-silent license acquisition web page
      </LUI_URL>
    <DS_ID> base64-encoded guid </DS_ID>
    <CUSTOMATTRIBUTES xmlns="">
      <mm:Publisher xmlns:mm="urn:schema-musicmogul-com">
           <mm:Author>
                Elvis Presley
           </mm:Author>
           <mm:CreationDate>
                2007/08/21:12:00:00
           </mm:CreationDate>
        </mm:Publisher>
    </CUSTOMATTRIBUTES>
    <DECRYPTORSETUP>ONDEMAND</DECRYPTORSETUP>
  </DATA>
</WRMHEADER>

Les balises sont décrites ci-dessous.

Nom de la balise Obligatoire Description
WRMHEADER Oui Élément le plus externe de l’objet d’en-tête. Il peut contenir un élément DATA et doit contenir un attribut de version. La version de l’en-tête est « 4.3.0.0 ». Chaque fois que Microsoft définit de nouvelles balises ou attributs obligatoires, un nouveau numéro de version est associé à ces balises ou attributs. Si la version est supérieure à celle pour laquelle le code client a été écrit, le code client doit échouer, car il implique que l’en-tête contient des balises obligatoires que le client ne comprend pas. Si la version est inférieure ou égale à celle pour laquelle le code client a été écrit, le code client peut ignorer en toute sécurité les balises ou attributs qu’il ne comprend pas.
DATA Non Élément conteneur pour les données d’en-tête, y compris les balises tierces. Aucun élément DATA ne peut être inclus dans l’élément WRMHEADER .
PROTECTINFO Non Spécifie zéro ou un élément KIDS . Aucun élément PROTECTINFO ne peut être inclus dans l’élément DATA . Inclut éventuellement l’attribut LICENSEREQUESTED.
LICENSEREQUESTED Non Spécifie si l’acquisition de licence demande au moins une licence ou non. Doit être défini sur « true » ou « false » s’il est présent et est supposé avoir la valeur « true » s’il n’est pas présent. Cet attribut est ignoré par les versions PlayReady antérieures à la version 4.5. L’application du Kit de développement logiciel (SDK) PlayReady Server est libre d’ignorer cet attribut ; il s’agit uniquement d’information.
ENFANTS Non Spécifie un ou plusieurs éléments KID qui peuvent être utilisés pour créer des objets de déchiffrement pour le contenu associé. Un ou zéro élément KIDS peut exister sous le nœud PROTECTINFO .
ENFANT Non Contient toutes les données clés d’une licence donnée. Si le nœud KIDS est présent, un ou plusieurs éléments KID doivent exister sous le nœud KIDS . L’élément KID contient les attributs suivants.

ALGID : Facultatif. Spécifie l'algorithme de chiffrement. Peut être défini sur : « AESCTR », « AESCBC » ou « COCKTAIL ».

CHECKSUM : facultatif. Uniquement pour les clés AESCTR. Contient une somme de contrôle calculée à l’aide de l’attribut KID VALUE et de la clé de contenu. Pour plus d’informations, reportez-vous à la section Algorithme de somme de contrôle de clé de ce document.

Si ce nœud existe dans le fichier XML WRMHeader, sa valeur de données doit être vide.

VALEUR : obligatoire. Contient une valeur GUID d’ID de clé encodée en base64. Notez que cette valeur GUID (DWORD, WORD, WORD, TABLEAU DE 8 OCTETs) doit être un ordre d’octets peu endian.
LA_URL Non Contient l’URL du service Web d’acquisition de licence. Seules les URL absolues sont autorisées. Aucun élément LA_URL ne peut être inclus dans l’élément DATA.

Si ce nœud existe dans le fichier XML WRMHeader, sa valeur de données ne doit pas être vide.
LUI_URL Non Contient l’URL d’une page Web d’acquisition de licence non silencieuse. Seules les URL absolues sont autorisées. Aucun élément LUI_URL ne peut être inclus dans l’élément DATA .

Si ce nœud existe dans le XML WRMHeader, sa valeur de données ne doit pas être vide.
DS_ID Non ID de service pour le service de domaine. Un seul élément DS_ID peut être inclus dans l’élément DATA .

Si ce nœud existe dans le XML WRMHeader, sa valeur de données ne doit pas être vide.
CUSTOMATTRIBUTES Non L’auteur de contenu peut ajouter du code XML personnalisé à l’intérieur de cet élément. Le code Microsoft n’agit pas sur les données contenues dans cet élément. Aucun élément CUSTOMATTRIBUTES ne peut être inclus dans l’élément DATA .

Si ce nœud existe dans le XML WRMHeader, sa valeur de données ne doit pas être vide.
DÉCRYPTORSETUP Non Cette balise peut contenir uniquement la valeur « ONDEMAND ». Lorsque cette balise est présente dans le nœud DATA et que sa valeur est définie sur « ONDEMAND », elle indique à une application qu’elle ne doit pas s’attendre à ce que la chaîne de licence complète pour que le contenu soit disponible pour l’acquisition, ou déjà présent sur l’ordinateur client, avant de configurer le graphique multimédia. Si cette balise n’est pas définie, elle indique qu’une application peut appliquer la licence à acquérir ou déjà présente sur l’ordinateur client avant de configurer le graphique multimédia. Aucun élément DECRYPTORSETUP ne peut être inclus dans l’élément DATA .

3.4. v4.2.0.0

PlayReady Header v4.2.0.0 a été introduit avec PlayReady version 3.0 en avril 2015 pour autoriser plusieurs KID dans un seul en-tête. Cela signifie que plusieurs clés peuvent être utilisées pour chiffrer une seule ressource, par exemple lorsque les pistes audio doivent être chiffrées avec une clé différente de celle des pistes vidéo.

3.4.1. Différences avec d’autres versions

Les kits SDK PlayReady 3.0 et versions ultérieures sont en mesure de traiter les versions v4.0, v4.1 et v4.2 PlayReady Header. Les kits SDK PlayReady précédents retournent une erreur « version non prise en charge » lorsqu’elles sont fournies avec des en-têtes v4.2. Lors de l’utilisation de l’en-tête v4.2, le client doit connaître la version du serveur qu’il utilise via un mécanisme personnalisé spécifique à l’application. Les kits SDK PlayReady ne fournissent aucun moyen natif d’obtenir ces informations de version.

Le format d’en-tête PlayReady v.4.2.0.0 présente les modifications suivantes par rapport à la version 4.1.0.0 :

  • L’attribut de version de l’élément WRMHEADER est défini sur la chaîne « 4.2.0.0 ».
  • L’élément KID situé à l’intérieur de l’élément PROTECTINFO a été renommé en KIDS et est toujours facultatif.
  • Plusieurs éléments KID se trouvent à l’intérieur de l’élément KIDS .

3.4.2. Exemple

PlayReady Header 4.2.0.0 avec deux clés AESCTR :

<WRMHEADER xmlns="http://schemas.microsoft.com/DRM/2007/03/PlayReadyHeader" version="4.2.0.0">
  <DATA>
    <PROTECTINFO>
      <KIDS>
        <KID ALGID="AESCTR" CHECKSUM="xNvWVxoWk04=" VALUE="0IbHou/5s0yzM80yOkKEpQ=="></KID>
        <KID ALGID="AESCTR" CHECKSUM="GnKaQIRacPU=" VALUE="/qgG2xbs4k2SKCxx6bhWqw=="></KID>
      </KIDS>
    </PROTECTINFO>
    <LA_URL>http://rm.contoso.com/rightsmanager.asmx</LA_URL>
    <DS_ID>AH+03juKbUGbHl1V/QIwRA==</DS_ID>
  </DATA>
</WRMHEADER>

3.4.3. Format

L’en-tête PlayReady v4.2.0.0 a la syntaxe suivante :

<WRMHEADER xmlns="http://schemas.microsoft.com/DRM/2007/03/PlayReadyHeader" version="4.2.0.0">
  <DATA>
      <PROTECTINFO>
        <KIDS>
          <KID ALGID="AESCTR" CHECKSUM="base64-encoded value" VALUE="base64-encoded guid"></KID>
          <KID ALGID="AESCTR" CHECKSUM="base64-encoded value" VALUE="base64-encoded guid"></KID>
          <KID ALGID="AESCTR" CHECKSUM="base64-encoded value" VALUE="base64-encoded guid"></KID>
        </KIDS>
      </PROTECTINFO>
      <LA_URL> URL for license acquisition </LA_URL>
      <LUI_URL>
        URL for Non-silent license acquisition web page
      </LUI_URL>
    <DS_ID> base64-encoded guid </DS_ID>
    <CUSTOMATTRIBUTES xmlns="">
      <mm:Publisher xmlns:mm="urn:schema-musicmogul-com">
           <mm:Author>
                Elvis Presley
           </mm:Author>
           <mm:CreationDate>
                2007/08/21:12:00:00
           </mm:CreationDate>
        </mm:Publisher>
    </CUSTOMATTRIBUTES>
    <DECRYPTORSETUP>ONDEMAND</DECRYPTORSETUP>
  </DATA>
</WRMHEADER>

Les balises sont décrites ci-dessous.

Nom de la balise Obligatoire Description
WRMHEADER Oui Élément le plus externe de l’objet d’en-tête. Il peut contenir un élément DATA et doit contenir un attribut de version. La version de l’en-tête est « 4.2.0.0 ». Chaque fois que Microsoft définit de nouvelles balises ou attributs obligatoires, un nouveau numéro de version est associé à ces balises ou attributs. Si la version est supérieure à celle pour laquelle le code client a été écrit, le code client doit échouer, car il implique que l’en-tête contient des balises obligatoires que le client ne comprend pas. Si la version est inférieure ou égale à celle pour laquelle le code client a été écrit, le code client peut ignorer en toute sécurité les balises ou attributs qu’il ne comprend pas.
DATA Non Élément conteneur pour les données d’en-tête, y compris les balises tierces. Seuls un seul élément DATA peut être inclus dans l’élément WRMHEADER .
PROTECTINFO Non Spécifie zéro ou un élément KIDS . Aucun élément PROTECTINFO ne peut être inclus dans l’élément DATA .
ENFANTS Non Spécifie un ou plusieurs éléments KID qui peuvent être utilisés pour créer des objets de déchiffreur pour le contenu associé. Un ou zéro élément KIDS peut exister sous le nœud PROTECTINFO .
ENFANT Non Contient toutes les données clés d’une licence donnée. Si le nœud KIDS est présent, un ou plusieurs éléments KID doivent exister sous le nœud KIDS . L’élément KID contient les attributs suivants.

ALGID : Obligatoire. Spécifie l'algorithme de chiffrement. Doit être défini sur : AESCTR ou COCKTAIL

CHECKSUM : Facultatif. Contient une somme de contrôle calculée à l’aide de la valeur KID et de la clé de contenu. Pour plus d’informations, reportez-vous à la section Algorithme de somme de contrôle de clé de ce document.

Si ce nœud existe dans le XML WRMHeader, sa valeur de données doit être vide.

VALEUR : Obligatoire. Contient une valeur GUID d’ID de clé codée en base64. Notez que cette valeur GUID (DWORD, WORD, WORD, tableau 8 OCTETs) doit être un ordre d’octets endian peu.
LA_URL Non Contient l’URL du service Web d’acquisition de licence. Seules les URL absolues sont autorisées. Aucun élément LA_URL ne peut être inclus dans l’élément DATA .

Si ce nœud existe dans le XML WRMHeader, sa valeur de données ne doit pas être vide.
LUI_URL Non Contient l’URL d’une page Web d’acquisition de licence non silencieuse. Seules les URL absolues sont autorisées. Aucun élément LUI_URL ne peut être inclus dans l’élément DATA .

Si ce nœud existe dans le XML WRMHeader, sa valeur de données ne doit pas être vide.
DS_ID Non ID de service pour le service de domaine. Aucun élément DS_ID ne peut être inclus dans l’élément DATA .

Si ce nœud existe dans le XML WRMHeader, sa valeur de données ne doit pas être vide.
CUSTOMATTRIBUTES Non L’auteur de contenu peut ajouter du code XML arbitraire à l’intérieur de cet élément. Le code Microsoft n’agit pas sur les données contenues dans cet élément. Aucun élément CUSTOMATTRIBUTES ne peut être inclus dans l’élément DATA .

Si ce nœud existe dans le XML WRMHeader, sa valeur de données ne doit pas être vide.
DÉCRYPTORSETUP Non Cette balise peut contenir uniquement la valeur « ONDEMAND ». Lorsque cette balise est présente dans le nœud DATA et que sa valeur est définie sur « ONDEMAND », elle indique à une application qu’elle ne doit pas s’attendre à ce que la chaîne de licence complète pour que le contenu soit disponible pour l’acquisition, ou déjà présent sur l’ordinateur client, avant de configurer le graphique multimédia. Si cette balise n’est pas définie, elle indique qu’une application peut appliquer la licence à acquérir ou déjà présente sur l’ordinateur client avant de configurer le graphique multimédia. Aucun élément DECRYPTORSETUP ne peut être inclus dans l’élément DATA .

3.5. v4.1.0.0

PlayReady Header v4.1.0.0 a été introduit avec PlayReady version 2.0 en septembre 2011 pour prendre en charge les flux linéaires en direct avec des licences feuilles évolutives incorporées dans le flux. Ce type de flux oblige les clients à lier une licence racine évolutive sans connaître la clé de chiffrement de contenu qui sera utilisée dans le déchiffreur.

3.5.1. Différences avec d’autres versions

Les kits SDK PlayReady 2.0 et versions ultérieures sont en mesure de traiter les versions v4.0 et v4.1 d’en-tête PlayReady. Les kits SDK PlayReady précédents retournent une erreur « version non prise en charge » lorsqu’elles sont fournies avec des en-têtes v4.1.

Le format d’en-tête PlayReady v.4.1.0.0 présente les modifications suivantes par rapport à la version 4.0.0.0 :

  • L’attribut de version de l’élément WRMHEADER est défini sur la chaîne « 4.1.0.0 ».
  • L’élément DATA contient un élément DECRYPTORSETUP facultatif.
  • L’élément KID se trouve à l’intérieur de l’élément PROTECTINFO et est facultatif plutôt que requis.
  • L’élément KID contient les attributs ALGID (obligatoire), CHECKSUM (facultatif) et VALUE (obligatoire).
  • L’élément KEYLEN a été supprimé. L’attribut KEYLEN a précédemment été utilisé pour désambiguer les licences de cocktail avec différentes clés de longueur. L’en-tête v4.1 interrompt la possibilité de prendre en charge les clés de cocktail de 8 octets. Si vous utilisez des clés de cocktail qui ne sont pas 8 octets, vous devez utiliser des en-têtes v4.0.
  • Les éléments ALGID et CHECKSUM ont été supprimés, car leurs données sont contenues dans les attributs de l’élément KID .

3.5.2. Format

L’en-tête PlayReady v4.1.0.0 a la syntaxe suivante :

<WRMHEADER xmlns="http://schemas.microsoft.com/DRM/2007/03/PlayReadyHeader" version="4.1.0.0">
  <DATA>
      <PROTECTINFO>
        <KID ALGID="AESCTR" CHECKSUM="base64-encoded value" VALUE="base64-encoded guid"></KID>
      </PROTECTINFO>
      <LA_URL> URL for license acquisition </LA_URL>
      <LUI_URL>
        URL for Non-silent license acquisition web page
      </LUI_URL>
    <DS_ID> base64-encoded guid </DS_ID>
    <CUSTOMATTRIBUTES xmlns="">
      <mm:Publisher xmlns:mm="urn:schema-musicmogul-com">
           <mm:Author>
                Elvis Presley
           </mm:Author>
           <mm:CreationDate>
                2007/08/21:12:00:00
           </mm:CreationDate>
        </mm:Publisher>
    </CUSTOMATTRIBUTES>
    <DECRYPTORSETUP>ONDEMAND</DECRYPTORSETUP>
  </DATA>
</WRMHEADER>

Les balises sont décrites ci-dessous.

Nom de la balise Obligatoire Description
WRMHEADER Oui Élément le plus externe de l’objet d’en-tête. Il peut contenir un élément DATA et doit contenir un attribut de version. La version de l’en-tête est « 4.1.0.0 ». Chaque fois que Microsoft définit de nouvelles balises ou attributs obligatoires, un nouveau numéro de version est associé à ces balises ou attributs. Si la version est supérieure à celle pour laquelle le code client a été écrit, le code client doit échouer, car il implique que l’en-tête contient des balises obligatoires que le client ne comprend pas. Si la version est inférieure ou égale à celle pour laquelle le code client a été écrit, le code client peut ignorer en toute sécurité les balises ou attributs qu’il ne comprend pas.
DATA Non Élément conteneur pour les données d’en-tête, y compris les balises tierces. Aucun élément DATA ne peut être inclus dans l’élément WRMHEADER .
PROTECTINFO Non Spécifie zéro ou un élément KID qui peut être utilisé pour créer des objets de déchiffreur pour le contenu associé. Aucun élément PROTECTINFO ne peut être inclus dans l’élément DATA .
ENFANT Non Contient toutes les données clés d’une licence donnée. Un ou zéro élément KID peut exister sous le nœud PROTECTINFO . L’élément KID contient les attributs suivants.

VALEUR : Obligatoire. Contient une valeur GUID d’ID de clé codée en base64. Notez que cette valeur GUID (DWORD, WORD, WORD, tableau 8 OCTETs) doit être un ordre d’octets endian peu.

ALGID : Obligatoire. Spécifie l'algorithme de chiffrement. Doit être défini sur : « AESCTR » ou « COCKTAIL »

CHECKSUM : Facultatif. Contient une somme de contrôle calculée à l’aide de la valeur KID et de la clé de contenu. Pour plus d’informations, reportez-vous à la section Algorithme de somme de contrôle de clé de ce document.

Si ce nœud existe dans le XML WRMHeader, sa valeur de données doit être vide.
LA_URL Non Contient l’URL du service Web d’acquisition de licence. Seules les URL absolues sont autorisées. Aucun élément LA_URL ne peut être inclus dans l’élément DATA .

Si ce nœud existe dans le XML WRMHeader, sa valeur de données ne doit pas être vide.
LUI_URL Non Contient l’URL d’une page Web d’acquisition de licence non silencieuse. Seules les URL absolues sont autorisées. Aucun élément LUI_URL ne peut être inclus dans l’élément DATA .

Si ce nœud existe dans le XML WRMHeader, sa valeur de données ne doit pas être vide.
DS_ID Non ID de service pour le service de domaine. Aucun élément DS_ID ne peut être inclus dans l’élément DATA .

Si ce nœud existe dans le XML WRMHeader, sa valeur de données ne doit pas être vide.
CUSTOMATTRIBUTES Non L’auteur de contenu peut ajouter du code XML arbitraire à l’intérieur de cet élément. Le code Microsoft n’agit pas sur les données contenues dans cet élément. Un seul élément CUSTOMATTRIBUTES peut être inclus dans l’élément DATA .

Si ce nœud existe dans le XML WRMHeader, sa valeur de données ne doit pas être vide.
DÉCRYPTORSETUP Non Cette balise peut contenir uniquement la valeur « ONDEMAND ». Lorsque cette balise est présente dans le nœud DATA et que sa valeur est définie sur « ONDEMAND », elle indique à une application qu’elle ne doit pas s’attendre à ce que la chaîne de licence complète pour que le contenu soit disponible pour l’acquisition, ou déjà présent sur l’ordinateur client, avant de configurer le graphique multimédia. Si cette balise n’est pas définie, elle indique qu’une application peut appliquer la licence à acquérir ou déjà présente sur l’ordinateur client avant de configurer le graphique multimédia. Un seul élément DECRYPTORSETUP peut être inclus dans l’élément DATA .

Remarques pour v4.1 :

  • Toutes les balises et attributs XML de l’en-tête PlayReady sont définis par Microsoft. La seule exception est le contenu de l’élément CUSTOMATTRIBUTES . Les développeurs d’applications PlayReady PC ne doivent pas ajouter de balises personnalisées en dehors de l’élément CUSTOMATTRIBUTES .
  • L’en-tête PlayReady doit respecter les spécifications XML canoniques W3C v1.1.
  • L’en-tête PlayReady ne contient pas de balise de niveau ?XML supérieur requise dans le code XML bien formé.
  • Il est recommandé que la taille de ce champ ne dépasse pas 1 Ko.

3.6. v4.0.0.0.0

PlayReady Header v4.0.0.0.0 a été introduit avec PlayReady version 1.0 en 2008 et permet à une seule clé AESCTR de prendre en charge le contenu chiffré AES, ou une clé COCKTAIL pour prendre en charge le contenu chiffré WMDRM.

3.6.1. Exemples

En-tête PlayReady 4.0.0.0.0
<WRMHEADER xmlns="http://schemas.microsoft.com/DRM/2007/03/PlayReadyHeader" version="4.0.0.0">
  <DATA>
    <PROTECTINFO>
      <ALGID>AESCTR</ALGID>
      <KEYLEN>16</KEYLEN>
    </PROTECTINFO>
    <KID>q5HgCTj40kGeNVhTH9Gexw==</KID>
    <CHECKSUM>w+OZVr8vzrQ=</CHECKSUM>
    <LA_URL>http://rm.contoso.com/rightsmanager.asmx</LA_URL>
    <CUSTOMATTRIBUTES>
      <IIS_DRM_VERSION>8.0.1705.19</IIS_DRM_VERSION>
    </CUSTOMATTRIBUTES>
  </DATA>
</WRMHEADER>
Objet PlayReady encodé en base64 contenant un en-tête PlayReady 4.0.0.0

XAMAAAEAAQBSAzwAVwBSAE0ASABFAEEARABFAFIAIAB4AG0AbABuAHMAPQAiAGgAdAB0AHAAOgAvAC8AcwBjAGgAZQBtAGEAcwAuAG0AaQBjAHIAbwBzAG8AZgB0AC4AYwBvAG0ALwBEAFIATQAvADIAMAAwADcALwAwADMALwBQAGwAYQB5AFIAZQBhAGQAeQBIAGUAYQBkAGUAcgAiACAAdgBlAHIAcwBpAG8AbgA9ACIANAAuADAALgAwAC4AMAAiAD4APABEAEEAVABBAD4APABQAFIATwBUAEUAQwBUAEkATgBGAE8APgA8AEsARQBZAEwARQBOAD4AMQA2ADwALwBLAEUAWQBMAEUATgA+ADwAQQBMAEcASQBEAD4AQQBFAFMAQwBUAFIAPAAvAEEATABHAEkARAA+ ADwALwBQAFIATwBUAEUAQwBUAEkATgBGAE8APgA8AEsASQBEAD4AcQA1AEgAZwBDAFQAagA0ADAAawBHAGUATgBWAGgAVABIADkARwBlAHgAdwA9AD0APAAvAEsASQBEAD4APABDAEgARQBDAEsAUwBVAE0APgB3ACsATwBaAFYAcgA4AHYAegByAFEAPQA8AC8AQwBIAEUAQwBLAFMAVQBNAD4APABMAEEAXwBVAFIATAA+ AGgAdAB0AHAAcwA6AC8ALwBwAHIAbwBmAGYAaQBjAGkAYQBsAHMAaQB0AGUALgBrAGUAeQBkAGUAbABpAHYAZQByAHkALgBtAGUAZABpAGEAcwBlAHIAdgBpAGMAZQBzAC4AdwBpAG4AZABvAHcAcwAuAG4AZQB0AC8AUABsAGEAeQBSAGUAYQBkAHkALwA8AC8ATABBAF8AVQBSAEwAPgA8AEMAVQBTAFQATwBNAEEAVABUAFIASQBCAFUAVABFAFMAPgA8AEkASQBTAF8ARABSAE0AXwBWAEUAUgBTAEkATwBOAD4AOAAuADAALgAxADcAMAA1AC4AMQA5ADwALwBJAEkAUwBfAEQAUgBNAF8AVgBFAFIAUwBJAE8ATgA+ ADwALwBDAFUAUwBUAE8ATQBBAFQAVABSAEkAQGBVAFQARQBTAD4APAAvAEQAQQBUAEEAPGA8AC8AVwBSA0ASABFAEEARABFAFIAPgA=

3.6.2. Format

L’en-tête PlayReady v4.0.0.0 a la syntaxe suivante :

<WRMHEADER xmlns="http://schemas.microsoft.com/DRM/2007/03/PlayReadyHeader" version="4.0.0.0">
<DATA>
      <PROTECTINFO>
        <ALGID>AESCTR</ALGID>
        <KEYLEN>16</KEYLEN>
      </PROTECTINFO>
      <LA_URL> URL for license acquisition </LA_URL>
      <LUI_URL>
        URL for Non-silent license acquisition web page
      </LUI_URL>
    <DS_ID>base64-encoded guid</DS_ID>
    <KID>base64-encoded kid</KID>
    <CUSTOMATTRIBUTES xmlns="">
      <mm:Publisher xmlns:mm="urn:schema-musicmogul-com">
           <mm:Author>
                Elvis Presley
           </mm:Author>
           <mm:CreationDate>
                2007/08/21:12:00:00
           </mm:CreationDate>
        </mm:Publisher>
    </CUSTOMATTRIBUTES>
    <CHECKSUM>
      checksum of the content key for verification
    </CHECKSUM>
  </DATA>
</WRMHEADER>

Le tableau suivant décrit les différentes balises.

Nom de la balise Obligatoire Description
WRMHEADER Oui Élément le plus externe de l’objet d’en-tête. Il peut contenir un élément DATA et un attribut de version. La version de l’en-tête est « 4.0.0.0.0 ».

Sémantique pour packager :
chaque fois que Microsoft définit de nouvelles balises ou attributs obligatoires, un nouveau numéro de version est associé à ces balises ou attributs. La version de l’en-tête PlayReady doit être définie sur la valeur la plus élevée des versions des balises et attributs obligatoires présents dans l’en-tête.

Sémantique du client :
si la version est supérieure à celle pour laquelle le code client a été écrit, le code client doit échouer, car il implique que l’en-tête contient des balises obligatoires que le client ne comprend pas. Si la version est inférieure ou égale à celle pour laquelle le code client a été écrit, le code client peut ignorer en toute sécurité les balises ou attributs qu’il ne comprend pas.
DATA Oui Élément conteneur pour les données d’en-tête, y compris les balises tierces.
PROTECTINFO Oui Spécifie le type de chiffrement à l’aide des éléments enfants KEYLEN et ALGID .
KEYLEN Oui Spécifie la taille de la clé de contenu. Doit être défini sur 16 si ALGID est défini sur « AESCTR » et 7 si ALGID est défini sur « COCKTAIL ».
ALGID Oui Spécifie l'algorithme de chiffrement. Doit être défini sur la valeur suivante :

AESCTR : correspond à l’algorithme AES en mode compteur.

COCKTAIL : Correspond à l’algorithme Cocktail.
ENFANT Oui Contient une valeur GUID d’ID de clé codée en base64. Notez que cette valeur GUID (DWORD, WORD, WORD, tableau 8 OCTETs) doit être un ordre d’octets endian peu.
CHECKSUM Non Contient la somme de contrôle calculée à l’aide de la valeur KID et de la clé de contenu. Pour plus d’informations, consultez la section Algorithme de somme de contrôle de clé .

Les versions précédentes de PlayReady ont traité ce champ comme obligatoire. Il doit donc être inclus dans n’importe quel en-tête qui va être consommé par une version précédente de PlayReady.
LA_URL Non Contient l’URL du service Web d’acquisition de licence. Seules les URL absolues sont autorisées.
LUI_URL Non Contient l’URL d’une page Web d’acquisition de licence non silencieuse. Seules les URL absolues sont autorisées.
DS_ID Non ID de service pour le service de domaine.
CUSTOMATTRIBUTES Non L’auteur de contenu peut ajouter du code XML arbitraire à l’intérieur de cet élément. Le code Microsoft n’agit pas sur les données contenues dans cet élément.

Remarques pour v4.0 :

  • Toutes les balises et attributs XML de l’en-tête PlayReady sont définis par Microsoft. La seule exception est le contenu de l’élément CUSTOMATTRIBUTES . Les développeurs d’applications PlayReady PC ne doivent pas ajouter de balises personnalisées en dehors de l’élément CUSTOMATTRIBUTES , car cela peut se heurter aux futures balises que Microsoft définit.
  • L’ordre des éléments enfants au sein d’un élément conteneur n’est pas important.
  • Notez que l’en-tête PlayReady ne contient pas de balise de niveau ?XML supérieur requise dans le code XML bien formé.
  • Il est recommandé que la taille de ce champ ne dépasse pas 1 Ko.
  • CHECKSUM est requis par le Kit de développement logiciel (SDK) PlayReady Server jusqu’à la version 1.2. Depuis la version 1.5, le Kit de développement logiciel (SDK) PlayReady Server traite le CONTRÔLE DE CONTRÔLE comme facultatif. PlayReady Porting Kit 1.2 hors de la boîte nécessite le CONTRÔLE DE CONTRÔLE. PlayReady Porting Kit 2.0 traite le CONTRÔLE DE CONTRÔLE comme facultatif.

4. Magasin de licences incorporé (ELS)

Il est recommandé d’ajouter un magasin de licences incorporées vide à l’objet PlayReady sous les conditions suivantes :

  • L’objet PlayReady doit être inséré dans un fichier de contenu.
  • Le contenu peut être utilisé dans un contexte de domaines PlayReady avec des licences incorporées.

Cela permet à un client PlayReady d’incorporer une licence liée au domaine dans l’objet PlayReady en remplit simplement le Magasin de licences incorporés existant et enregistre l’effort de re-en-tête du fichier avec un nouvel objet PlayReady d’une taille supérieure à celle initiale.

Remarque

N’incluez pas de magasin de licences incorporé vide dans un objet PlayReady, destiné à être inséré en tant que chaîne de base 64 dans un manifeste client Smooth Streaming.

Remarque

La taille recommandée est de 10 Ko.

5. Algorithme de somme de contrôle de clé

L’algorithme de somme de contrôle dans l’en-tête PlayReady est destiné à se protéger contre les clés incompatibles. Au début des jours de DRM, les chansons ont été chiffrées avec des clés étiquetées incorrectement. Cela a entraîné un bruit blanc en cours de lecture lorsque les chansons ont été déchiffrées. Et si les chansons ont été jouées assez fort, l’équipement de lecture a été détruit. Avec la somme de contrôle, la clé de contenu peut être vérifiée comme clé utilisée pour chiffrer le fichier. L’algorithme fonctionne comme suit :

Pour une valeur ALGID définie sur « AESCBC », il n’existe aucun algorithme de somme de contrôle de clé défini. L’attribut CHECKSUM doit être omis.

Pour une valeur ALGID définie sur « AESCTR », l’ID de clé de 16 octets est chiffré avec une clé de contenu AES de 16 octets à l’aide du mode BCE. Les 8 premiers octets de la mémoire tampon sont extraits et codés en base64.

Pour une valeur ALGID définie sur « COCKTAIL », procédez comme suit :

  1. Une mémoire tampon de 21 octets est créée.

  2. La clé de contenu est placée dans la mémoire tampon et le reste de la mémoire tampon est remplie de zéros.

  3. Pour cinq itérations :

    a. tampon = SHA-1 (mémoire tampon).

  4. Les 7 premiers octets de la mémoire tampon sont extraits et encodés en base64.

  5. Une fois ces étapes effectuées, les octets codés en base64 sont utilisés comme somme de contrôle.

6. CUSTOMATTRIBUTES

Un fournisseur de services peut ajouter du code XML propriétaire à l’intérieur de l’élément CUSTOMATTRIBUTES de l’en-tête PlayReady. Les balises utilisées à l’intérieur de l’élément CUSTOMATTRIBUTES ne sont pas en conflit avec les futures balises définies par Microsoft.

Le code Microsoft n’agit pas sur n’importe quel code XML à l’intérieur de cet élément. Le back-end du fournisseur de services ou son code côté client sont les seuls qui interprètent généralement la valeur de cet élément. Par exemple, supposons qu’un service d’étiquette blanche représente les services frontaux AAA, BBB, CCC. Un tel service peut chiffrer sa bibliothèque de contenu une seule fois (car c’est une opération coûteuse), mais lorsqu’il sert du contenu à un utilisateur final, il peut définir CUSTOMATTRIBUTES sur le nom du service frontal spécifique auquel l’utilisateur final s’abonne. Lorsque l’utilisateur final demande une licence pour ce contenu, cela permet au service d’étiquette blanche de déterminer le service frontal auquel l’utilisateur final s’abonne, afin qu’il puisse émettre une autre licence.

La taille de ce champ ne doit pas dépasser 1 kilooctet (Ko).