Partager via


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

1. Introduction

Cette spécification s’applique à tout 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 Changez
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 à compter de PlayReady version 4.
Ajouter une exigence de syntaxe 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 à compter de PlayReady version 2
Août 2008 Version initiale documentant l'en-tête PlayReady 4.0.0.0 pris en charge dans la version 1 de PlayReady

2. Objet PlayReady (PRO)

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

Nom du champ Type Field Taille (bits) Descriptif
Longueur DWORD 32 Longueur de l’objet PlayReady en octets. Cette valeur ne doit pas dépasser 15 kilo-octets (Ko).
Nombre d’enregistrements d’objets PlayReady MOT 16 Spécifie le nombre d'enregistrements d'objets 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’objets PlayReady contiennent les champs suivants.

Nom du champ Type Field Taille (bits) Descriptif
Type d'enregistrement MOT 16 Spécifie le type de données stockées dans la valeur d’enregistrement.
Longueur de l’enregistrement MOT 16 Spécifie la taille en octets de la valeur d’enregistrement.
Valeur d'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 Descriptif
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 :

Un objet PlayReady dans un MP4

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

Vidage hexadécimal d'un objet PlayReady

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 de UTF-16.

Matrice de prise en charge des versions 3.1

  PlayReady Header v4.3.0.0 PlayReady Header v4.2.0.0 PlayReady Header v4.1.0.0 PlayReady Header v4.0.0.0
Clients
basés sur le Kit de développement logiciel (SDK) PlayReady 4.0 (voir la note 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 inférieure sont des clients PlayReady 3.X. Les nouveaux appareils non-Windows (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 de syntaxe

3.2.1. Mis en forme canonique

Le code XML doit être canonique.

3.2.2. Les noms des nœuds et des attributs sont sensibles à la casse

Soutenu

<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 fermante, y compris celles figurant dans les nœuds à l’intérieur du nœud CUSTOMATTRIBUTES.

Soutenu

<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 non-espaces de noms.

Soutenu

<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 dans les nœuds à l’intérieur du nœud CUSTOMATTRIBUTES.

Soutenu

<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

L'en-tête PlayReady v4.3.0.0 a été introduit dans la version 4.0 de PlayReady en septembre 2017 afin de 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 les autres versions

À compter de la version 4.0, les kits SDK PlayReady et les clients sont en mesure de traiter les versions 4.0, 4.1, 4.2 et 4.3. Les 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 version 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 Descriptif
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.
DONNÉES 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 » si présent et est supposé être défini sur « true » s’il n’est pas présent. Cet attribut est ignoré par les versions playReady antérieures à la version 4.5. L'application PlayReady Server SDK a la liberté d'ignorer cet attribut; il est uniquement à titre informatif.
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 .
CHEVREAU 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 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 de 8 octets) doit être au format Little 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 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.
DECRYPTORSETUP Non Cette balise ne peut contenir que 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 le contenu soit disponible pour l’acquisition, ou déjà présente sur l’ordinateur client, avant de configurer le graphe 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 graphe 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 ressource unique, 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 les autres versions

Les SDK PlayReady 3.0 et les clients ultérieurs sont en mesure de traiter les versions v4.0, v4.1 et v4.2 des en-têtes PlayReady. Les sdk PlayReady précédents retournent une erreur « version non prise en charge » lorsqu’ils sont fournis avec des en-têtes v4.2. Lorsque vous utilisez l’en-tête v4.2, le client doit savoir quelle version du serveur elle 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 :

En-tête PlayReady 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 Descriptif
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.
DONNÉES Non Élément conteneur pour les données d’en-tête, y compris les balises tierces. 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échiffrement pour le contenu associé. Un ou zéro élément KIDS peut exister sous le nœud PROTECTINFO .
CHEVREAU 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, consultez 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 de 8 octets) doit être au format Little 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 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.
DECRYPTORSETUP Non Cette balise ne peut contenir que 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 le contenu soit disponible pour l’acquisition, ou déjà présente sur l’ordinateur client, avant de configurer le graphe 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 graphe 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 nécessite que les clients lient 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 les autres versions

Les clients PlayReady 2.0 SDK et versions ultérieures sont capables de traiter les versions d'en-tête PlayReady v4.0 et v4.1. Les sdk PlayReady précédents retournent une erreur « version non prise en charge » lorsqu’ils sont fournis 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 obligatoire.
  • 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 été utilisé précédemment pour dissiper l’ambiguïté des licences de cocktail avec des clés de longueurs différentes. L'en-tête v4.1 empêchera la prise en charge de clés cocktail autres que celles de 8 octets. Si vous utilisez des clés cocktail qui ne sont pas de 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 Descriptif
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.
DONNÉES 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échiffrement pour le contenu associé. Aucun élément PROTECTINFO ne peut être inclus dans l’élément DATA .
CHEVREAU 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 de 8 octets) doit être au format Little endian.

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.
DECRYPTORSETUP Non Cette balise ne peut contenir que 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 le contenu soit disponible pour l’acquisition, ou déjà présente sur l’ordinateur client, avant de configurer le graphe 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 graphe multimédia. Un seul élément DECRYPTORSETUP peut être inclus dans l’élément DATA .

Remarques pour la version 4.1 :

  • Toutes les balises et attributs XML dans 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

PlayReady Header v4.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
<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+ADwALwBDAFUAUwBUAE8ATQBBAFQAVABSAEkAQgBVAFQARQBTAD4APAAvAEQAQQBUAEEAPgA8AC8AVwBSAE0ASABFAEEARABFAFIAPgA=

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 Descriptif
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 ».

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.
DONNÉES 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.
CHEVREAU Oui Contient une valeur GUID d’ID de clé codée en base64. Notez que cette valeur GUID (DWORD, WORD, WORD, tableau de 8 octets) doit être au format Little endian.
checksum Non Contient une 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 étant obligatoire, donc il doit être inclus dans tout en-tête qui va être consommé par une version antérieure 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 dans 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 être en conflit avec les balises futures que Microsoft définit.
  • L’ordre des éléments enfants au sein d’un élément conteneur n’a pas d’importance.
  • 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 SDK PlayReady Server traite le checksum comme facultatif. Le Kit de portage PlayReady 1.2 prêt-à-emploi nécessite le CHECKSUM. PlayReady Porting Kit 2.0 traite le checksum comme facultatif.

4. Magasin de licences incorporé (ELS)

Il est recommandé d’ajouter un magasin de licences incorporées vide à l’objet PlayReady dans 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 remplissant simplement le magasin de licences incorporé existant et économise le besoin de réen-têter le fichier avec un nouvel objet PlayReady d’une taille supérieure à celle de l’objet initial.

Remarque

N'incluez pas de magasin de licences incorporées vide dans un objet PlayReady destiné à être inséré sous forme de chaîne en 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 conçu pour offrir une protection contre les clés incompatibles. Au début de la gestion des droits numériques, les chansons ont été chiffrées avec des clés étiquetées incorrectement. Cela entraînait la lecture d'un bruit blanc lorsque les chansons étaient déchiffrées. En outre, si les chansons étaient jouées à un volume suffisamment élevé, cela pouvait endommager le matériel de lecture. Avec la somme de contrôle, la clé de contenu peut être vérifiée en tant que clé utilisée pour chiffrer le fichier. L’algorithme fonctionne comme suit :

Pour une valeur ALGID définie sur « AESCBC », aucun algorithme de somme de contrôle de clé n'est 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 rempli de zéros.

  3. Pour cinq itérations :

    a) tampon = SHA-1 (tampon).

  4. Les 7 premiers octets de la mémoire tampon sont extraits et codé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. Toutes les balises utilisées à l’intérieur de l’élément CUSTOMATTRIBUTES ne sont pas en conflit avec les balises futures définies par Microsoft.

Le code Microsoft n’agit pas sur un 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 ne peut chiffrer sa bibliothèque de contenu qu’une seule fois (étant donné qu’il s’agit d’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).