PlayReady 헤더 사양

1. 소개

이 사양은 PlayReady Server SDK, PlayReady 장치 포팅 키트, Windows, Xbox, Windows Phone 및 Silverlight를 사용하여 만든 모든 최종 제품에 적용됩니다.

1.1. 변경 내용

버전 변경
2021년 9월 8일 PROTECTINFO 노드에 선택적 LICENSEREQUESTED 특성을 추가합니다.
2017년 11월 1일 구문 요구 사항 섹션을 추가합니다. 잘못된 특성 순서로 다중 예제 수정(특성은 사전순이어야 합니다).
2017년 7월 12일 PlayReady 버전 4부터 지원되는 PlayReady 헤더 4.3.0.0 섹션을 추가합니다.
모든 XML 노드를 닫는 태그로 명시적으로 닫아야 하는 구문 요구 사항 추가
2015년 4월 10일 PlayReady 버전 3부터 지원되는 PlayReady 헤더 4.2.0.0 섹션 추가
2011년 9월 PlayReady 버전 2부터 지원되는 PlayReady 헤더 4.1.0.0 섹션 추가
2008년 8월 PlayReady 버전 1에서 지원되는 PlayReady 헤더 4.0.0.0을 문서화하는 초기 버전

2. PlayReady 개체(PRO)

PlayReady 개체(PRO)에는 다음 필드가 포함됩니다.

필드 이름 필드 형식 크기(비트) Description
길이 DWORD 32 PlayReady 개체의 길이(바이트)입니다. 이 값은 15KB(KB)를 초과하면 안 됩니다.
PlayReady 개체 레코드 수 WORD 16 PlayReady 개체의 PlayReady 개체 레코드 수를 지정합니다.
PlayReady 개체 레코드 BYTE 배열 상황에 따라 다름 라이선스 및 라이선스 취득과 관련된 정보를 포함하는 가변 수의 레코드를 포함합니다.

2.1 PlayReady 개체 레코드

PlayReady 개체는 PlayReady 개체 레코드라는 추가 하위 개체로 구성됩니다. PlayReady 개체 레코드에는 다음 필드가 포함됩니다.

필드 이름 필드 형식 크기(비트) Description
레코드 유형 WORD 16 레코드 값에 저장된 데이터의 형식을 지정합니다.
레코드 길이 WORD 16 레코드 값의 크기(바이트)를 지정합니다.
레코드 값 BYTE 배열 상황에 따라 다름 개체의 내용은 레코드 형식의 값에 따라 달라집니다.

레코드 형식 필드에는 다음 값 중 하나가 있습니다.

값 형식 Description
0x0001 레코드에 PRH(PlayReady 헤더)가 포함되어 있음을 나타냅니다.
0x0002 예약되어 있습니다.
0x0003 ELS(Embedded License Microsoft Store)를 나타냅니다.

2.2. PlayReady 개체 예제

다음 그림에서는 PlayReady 헤더가 포함된 PlayReady 개체가 있는 분할된 MP4 파일을 보여 줍니다.

PlayReady Object in MP4

다음 그림은 이 MP4 파일의 HEX 뷰를 보여줍니다.

PlayReady Object Hex Dump

3. PlayReady 헤더(PRH)

PlayReady 헤더(PRH)는 클라이언트가 저장된 콘텐츠에 대한 라이선스를 찾거나 획득하는 데 사용됩니다. UTF-16을 사용하여 인코딩됩니다.

3.1 버전 지원 매트릭스

  PlayReady 헤더 v4.3.0.0 PlayReady 헤더 v4.2.0.0 PlayReady 헤더 v4.1.0.0 PlayReady 헤더 v4.0.0.0
PlayReady 4.0 SDK 기반 클라이언트
(참고 1 참조)
PlayReady 3.0 SDK 기반 클라이언트
(참고 2 참조)
 
PlayReady 2.x SDK 기반 클라이언트
(참고 3 참조)
   
PlayReady 1.x SDK 기반 클라이언트
(참고 4 참조)
     

참고:

  1. Xbox One 버전 1709 이상은 PlayReady 4.X 클라이언트입니다.
  2. Windows 10(모든 버전) 및 Xbox One 버전 1703 이하는 PlayReady 3.X 클라이언트입니다. 2017년 이후에 출시된 최신 비 Windows 디바이스(예: 스마트 TV)는 PlayReady 3.X 클라이언트입니다.
  3. Silverlight 및 Windows 8, 8.1은 PlayReady 2.X 클라이언트입니다. 2011년과 2017년 사이에 출시된 대부분의 비 Windows 디바이스(예: 스마트 TV)는 PlayReady 2.X 클라이언트입니다.
  4. 2008년과 2011년 사이에 출시된 대부분의 비 Windows 디바이스(예: 스마트 TV)는 PlayReady 1.X 클라이언트입니다.

3.2. 구문 요구 사항

3.2.1. 정규화

XML은 정식화되어야 합니다.

3.2.2. 모든 노드 및 특성 이름은 대/소문자를 구분합니다.

지원됨

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

지원되지 않음

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

3.2.3. 닫는 태그는 명시적이어야 합니다.

모든 XML 노드는 CUSTOMATTRIBUTES 노드 내의 노드에 있는 노드를 포함하여 닫는 태그에 의해 명시적으로 닫혀야 합니다.

지원됨

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

지원되지 않음

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

3.2.4. 네임스페이스 특성

모든 네임스페이스 특성은 네임스페이스가 아닌 특성 앞에 나타나야 합니다.

지원됨

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

지원되지 않음

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

3.2.5. 알파벳순

모든 특성은 CUSTOMATTRIBUTES 노드 내의 노드에 있는 특성을 포함하여 사전순이어야 합니다.

지원됨

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

지원되지 않음

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

3.3. v4.3.0.0

PlayReady 헤더 v4.3.0.0은 헤더에서 AESCBC 키를 지원하기 위해 2017년 9월에 PlayReady 버전 4.0과 함께 도입되었습니다. 이 지원을 통해 CBC 모드의 콘텐츠 암호화, 특히 일반 암호화 모드 'cbcs'의 경우 콘텐츠를 암호화할 수 있습니다. 또한 PlayReady 클라이언트와 다른 DRM 시스템 및 기존 콘텐츠와의 상호 운용성도 향상됩니다.

3.3.1. 다른 버전과의 차이점

버전 4.0부터 PlayReady SDK 및 클라이언트는 PlayReady 헤더 버전 4.0, 4.1, 4.2 및 4.3을 처리할 수 있습니다. 버전 4.0 이전의 PlayReady SDK는 v4.3 헤더와 함께 제공되는 경우 "지원되지 않는 버전" 오류를 반환합니다.

PlayReady 헤더 형식 v.4.3.0.0에는 v4.2.0.0과 비교하여 다음과 같은 변경 내용이 있습니다.

  • WRMHEADER 요소의 버전 특성은 문자열 "4.3.0.0"으로 설정됩니다.
  • KID 요소 내에 있는 ALGID 특성이 라이선스 취득 요청에 누락되었을 수 있습니다. 콘텐츠에 포함된 헤더에 ALGID 특성에 유효한 값이 있는 것이 좋습니다.
  • ALGID 특성이 모든 KID 요소에 있고 KIDS 요소에 둘 이상의 KID 요소가 있는 경우 모든 KID 요소는 ALGID 특성을 포함해야 하며 특성 값은 동일해야 합니다.
  • 이제 KID 요소 내에 있는 ALGID 특성은 다음과 같은 경우 "AESCTR" 외에도 "AESCBC" 값을 가질 수 있습니다.
    • ALGID 특성이 "AESCBC"로 설정된 경우 CHECKSUM 특성을 포함하면 안 됩니다.

3.3.2. 예제

다음은 AESCBC 키를 사용하는 PlayReady 헤더 4.3.0.0의 예입니다.

<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>

다음은 ALGID가 누락된 PlayReady 헤더 4.3.0.0의 예입니다.

<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. 형식

PlayReady 헤더 v4.3.0.0에는 다음 구문이 있습니다.

<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>

태그는 아래에 설명되어 있습니다.

태그 이름 필수 Description
WRMHEADER 헤더 개체의 가장 바깥쪽 요소입니다. 하나의 DATA 요소를 포함할 수 있으며 하나의 버전 특성을 포함해야 합니다. 헤더의 버전은 "4.3.0.0"입니다. Microsoft에서 새 필수 태그 또는 특성을 정의할 때마다 새 버전 번호가 해당 태그 또는 특성과 연결됩니다. 버전이 클라이언트 코드가 작성된 버전보다 크면 클라이언트 코드가 실패해야 합니다. 이는 헤더에 클라이언트가 이해하지 못하는 필수 태그가 포함되어 있음을 의미하기 때문입니다. 버전이 클라이언트 코드가 작성된 버전보다 작거나 같으면 클라이언트 코드가 이해하지 못하는 태그 또는 특성을 안전하게 건너뛸 수 있습니다.
DATA 아니요 타사 태그를 포함하여 헤더 데이터에 대한 컨테이너 요소입니다. WRMHEADER 요소에는 둘 이상의 DATA 요소가 포함될 수 있습니다.
PROTECTINFO 0개 또는 1개의 KIDS 요소를 지정합니다. DATA 요소에 둘 이상의 PROTECTINFO 요소가 포함될 수 있습니다. 선택적으로 LICENSEREQUESTED 특성을 포함합니다.
LICENSEREQUESTED 아니요 라이선스 취득이 하나 이상의 라이선스를 요청하는지 여부를 지정합니다. 있는 경우 "true" 또는 "false"로 설정해야 하며, 없는 경우 "true"로 설정된 것으로 간주됩니다. 이 특성은 4.5 이전의 PlayReady 버전에서 무시됩니다. PlayReady Server SDK 애플리케이션은 이 특성을 무시할 수 있습니다. 정보 제공 전용입니다.
아이 연결된 콘텐츠에 대한 암호 해독기 개체를 만드는 데 사용할 수 있는 하나 이상의 KID 요소를 지정합니다. PROTECTINFO 노드 아래에 하나 또는 0개의 KIDS 요소가 있을 수 있습니다.
아이 아니요 지정된 라이선스에 대한 모든 키 데이터를 포함합니다. KIDS 노드가 있는 경우 KIDS 노드 아래에 하나 이상의 KID 요소가 있어야 합니다. KID 요소에는 다음 특성이 포함됩니다.

ALGID: 선택 사항입니다. 암호화 알고리즘을 지정합니다. "AESCTR", "AESCBC" 또는 "COCKTAIL"으로 설정할 수 있습니다.

CHECKSUM: 선택 사항입니다. AESCTR 키에만 해당합니다. KID VALUE 특성 및 콘텐츠 키를 사용하여 계산된 체크섬을 포함합니다. 자세한 내용은 이 문서의 키 체크섬 알고리즘 섹션을 참조하세요.

이 노드가 WRMHeader XML에 있는 경우 해당 데이터 값은 비어 있어야 합니다.

VALUE: 필수 요소입니다. base64로 인코딩된 키 ID GUID 값을 포함합니다. 이 GUID(DWORD, WORD, WORD, 8-BYTE 배열) 값은 작은 엔디안 바이트 순서여야 합니다.
LA_URL 라이선스 취득 웹 서비스에 대한 URL을 포함합니다. 절대 URL만 허용됩니다. DATA 요소에 둘 이상의 LA_URL 요소를 포함할 수 없습니다.

이 노드가 WRMHeader XML에 있는 경우 해당 데이터 값이 비어 있지 않아야 합니다.
LUI_URL 아니요 비사일 라이선스 취득 웹 페이지의 URL을 포함합니다. 절대 URL만 허용됩니다. DATA 요소에 둘 이상의 LUI_URL 요소가 포함될 수 있습니다.

이 노드가 WRMHeader XML에 있는 경우 해당 데이터 값이 비어 있으면 안 됩니다.
DS_ID 도메인 서비스의 서비스 ID입니다. DATA 요소에는 최대 하나의 DS_ID 요소만 포함될 수 있습니다.

이 노드가 WRMHeader XML에 있는 경우 해당 데이터 값이 비어 있으면 안 됩니다.
CUSTOMATTRIBUTES 콘텐츠 작성자가 이 요소 내에 사용자 지정 XML을 추가할 수 있습니다. Microsoft 코드는 이 요소 내에 포함된 데이터에 대해 아무 작업도 수행하지 않습니다. DATA 요소에 CUSTOMATTRIBUTES 요소를 둘 이상 포함할 수 없습니다.

이 노드가 WRMHeader XML에 있는 경우 해당 데이터 값이 비어 있으면 안 됩니다.
DECRYPTORSETUP 이 태그는 "ONDEMAND" 값만 포함할 수 있습니다. 이 태그가 DATA 노드에 있고 해당 값이 "ONDEMAND"로 설정된 경우 미디어 그래프를 설정하기 전에 콘텐츠의 전체 라이선스 체인을 획득할 수 있거나 클라이언트 컴퓨터에 이미 존재할 것으로 예상해서는 안 됨을 애플리케이션에 나타냅니다. 이 태그를 설정하지 않으면 애플리케이션이 미디어 그래프를 설정하기 전에 라이선스를 획득하거나 클라이언트 컴퓨터에 이미 존재하도록 적용할 수 있음을 나타냅니다. DATA 요소에 둘 이상의 DECRYPTORSETUP 요소가 포함될 수 있습니다.

3.4. v4.2.0.0

PlayReady 헤더 v4.2.0.0은 단일 헤더에 여러 개의 KID를 허용하기 위해 2015년 4월 PlayReady 버전 3.0과 함께 도입되었습니다. 즉, 오디오 트랙을 비디오 트랙과 다른 키로 암호화해야 하는 경우와 같이 여러 키를 사용하여 단일 자산을 암호화할 수 있습니다.

3.4.1. 다른 버전과의 차이점

PlayReady 3.0 SDK 이상 클라이언트는 v4.0, v4.1 및 v4.2 PlayReady 헤더 버전을 처리할 수 있습니다. 이전 PlayReady SDK는 v4.2 헤더와 함께 제공된 경우 "지원되지 않는 버전" 오류를 반환합니다. v4.2 헤더를 사용하는 경우 클라이언트는 사용자 지정 앱별 메커니즘을 통해 어떤 서버 버전을 사용하고 있는지 알고 있어야 합니다. PlayReady SDK는 이 버전 정보를 가져오는 기본 방법을 제공하지 않습니다.

PlayReady 헤더 형식 v.4.2.0.0에는 v4.1.0.0에 비해 다음과 같은 변경 내용이 있습니다.

  • WRMHEADER 요소의 버전 특성은 문자열 "4.2.0.0"으로 설정됩니다.
  • PROTECTINFO 요소 내에 있는 KID 요소의 이름이 KIDS로 바뀌었으며 여전히 선택 사항입니다.
  • 여러 KID 요소가 KIDS 요소 내에 있습니다.

3.4.2. 예제

두 개의 AESCTR 키가 있는 PlayReady 헤더 4.2.0.0:

<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. 형식

PlayReady 헤더 v4.2.0.0에는 다음과 같은 구문이 사용됩니다.

<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>

태그는 아래에 설명되어 있습니다.

태그 이름 필수 Description
WRMHEADER 헤더 개체의 가장 바깥쪽 요소입니다. 하나의 DATA 요소를 포함할 수 있으며 하나의 버전 특성을 포함해야 합니다. 헤더 버전은 "4.2.0.0"입니다. Microsoft가 새 필수 태그 또는 특성을 정의할 때마다 새 버전 번호가 해당 태그 또는 특성과 연결됩니다. 버전이 클라이언트 코드가 작성된 버전보다 크면 클라이언트 코드가 실패해야 합니다. 이는 헤더에 클라이언트가 이해하지 못하는 필수 태그가 포함되어 있음을 의미하기 때문입니다. 버전이 클라이언트 코드가 작성된 버전보다 작거나 같으면 클라이언트 코드가 이해하지 못하는 태그 또는 특성을 안전하게 건너뛸 수 있습니다.
DATA 아니요 타사 태그를 포함하여 헤더 데이터에 대한 컨테이너 요소입니다. WRMHEADER 요소에는 최대 하나의 DATA 요소만 포함될 수 있습니다.
PROTECTINFO 아니요 0개 또는 1개의 KIDS 요소를 지정합니다. DATA 요소에 둘 이상의 PROTECTINFO 요소가 포함될 수 있습니다.
아이 아니요 연결된 콘텐츠에 대한 암호 해독기 개체를 만드는 데 사용할 수 있는 하나 이상의 KID 요소를 지정합니다. PROTECTINFO 노드 아래에 하나 또는 0개의 KIDS 요소가 있을 수 있습니다.
아이 아니요 지정된 라이선스에 대한 모든 키 데이터를 포함합니다. KIDS 노드가 있는 경우 하나 이상의 KID 요소가 KIDS 노드 아래에 있어야 합니다. KID 요소에는 다음 특성이 포함됩니다.

ALGID: 필수입니다. 암호화 알고리즘을 지정합니다. AESCTR 또는 칵테일체크섬

: 선택 사항으로 설정해야 합니다. KID VALUE 및 콘텐츠 키를 사용하여 계산된 체크섬을 포함합니다. 자세한 내용은 이 문서의 키 체크섬 알고리즘 섹션을 참조하세요.

이 노드가 WRMHeader XML에 있는 경우 해당 데이터 값은 비어 있어야 합니다.

VALUE: 필수입니다. base64로 인코딩된 키 ID GUID 값을 포함합니다. 이 GUID(DWORD, WORD, WORD, 8-BYTE 배열) 값은 작은 엔디안 바이트 순서여야 합니다.
LA_URL 아니요 라이선스 취득 웹 서비스에 대한 URL을 포함합니다. 절대 URL만 허용됩니다. DATA 요소에 둘 이상의 LA_URL 요소가 포함될 수 있습니다.

이 노드가 WRMHeader XML에 있는 경우 해당 데이터 값이 비어 있으면 안 됩니다.
LUI_URL 비사일 라이선스 취득 웹 페이지의 URL을 포함합니다. 절대 URL만 허용됩니다. DATA 요소에 둘 이상의 LUI_URL 요소가 포함될 수 있습니다.

이 노드가 WRMHeader XML에 있는 경우 해당 데이터 값이 비어 있으면 안 됩니다.
DS_ID 도메인 서비스의 서비스 ID입니다. DATA 요소에 둘 이상의 DS_ID 요소가 포함될 수 있습니다.

이 노드가 WRMHeader XML에 있는 경우 해당 데이터 값이 비어 있으면 안 됩니다.
CUSTOMATTRIBUTES 아니요 콘텐츠 작성자가 이 요소 내에 임의의 XML을 추가할 수 있습니다. Microsoft 코드는 이 요소 내에 포함된 데이터에 대해 아무 작업도 수행하지 않습니다. DATA 요소에 CUSTOMATTRIBUTES 요소를 둘 이상 포함할 수 없습니다.

이 노드가 WRMHeader XML에 있는 경우 해당 데이터 값이 비어 있으면 안 됩니다.
DECRYPTORSETUP 아니요 이 태그는 "ONDEMAND" 값만 포함할 수 있습니다. 이 태그가 DATA 노드에 있고 해당 값이 "ONDEMAND"로 설정된 경우 미디어 그래프를 설정하기 전에 콘텐츠의 전체 라이선스 체인을 획득할 수 있거나 클라이언트 컴퓨터에 이미 존재할 것으로 예상해서는 안 됨을 애플리케이션에 나타냅니다. 이 태그를 설정하지 않으면 애플리케이션이 미디어 그래프를 설정하기 전에 라이선스를 획득하거나 클라이언트 컴퓨터에 이미 존재하도록 적용할 수 있음을 나타냅니다. DATA 요소에 둘 이상의 DECRYPTORSETUP 요소가 포함될 수 있습니다.

3.5. v4.1.0.0

PlayReady Header v4.1.0.0은 2011년 9월 PlayReady 버전 2.0과 함께 도입되어 스트림에 확장 가능한 리프 라이선스가 포함된 라이브 선형 스트림을 지원합니다. 이러한 유형의 스트림을 사용하려면 클라이언트가 암호 해독기에서 사용할 콘텐츠 암호화 키에 대한 지식 없이 확장 가능한 루트 라이선스를 바인딩해야 합니다.

3.5.1. 다른 버전과의 차이점

PlayReady 2.0 SDK 이상 클라이언트는 v4.0 및 v4.1 PlayReady 헤더 버전을 모두 처리할 수 있습니다. 이전 PlayReady SDK는 v4.1 헤더와 함께 제공된 경우 "지원되지 않는 버전" 오류를 반환합니다.

PlayReady 헤더 형식 v.4.1.0.0에는 v4.0.0.0과 비교하여 다음과 같은 변경 내용이 있습니다.

  • WRMHEADER 요소의 버전 특성은 문자열 "4.1.0.0"으로 설정됩니다.
  • DATA 요소에는 선택적 DECRYPTORSETUP 요소가 포함됩니다.
  • KID 요소는 PROTECTINFO 요소 내에 있으며 필수가 아닌 선택 사항입니다.
  • KID 요소에는 ALGID(필수), CHECKSUM(선택 사항) 및 VALUE(필수) 특성이 포함됩니다.
  • KEYLEN 요소가 제거되었습니다. KEYLEN 특성은 이전에 서로 다른 길이 키로 칵테일 라이선스를 명확하게 하는 데 사용되었습니다. v4.1 헤더는 8 바이트 칵테일 키를 제외한 모든 것을 지원하는 기능을 중단합니다. 8 바이트가 아닌 칵테일 키를 사용하는 경우 v4.0 헤더를 사용해야 합니다.
  • ALGIDCHECKSUM 요소는 해당 데이터가 KID 요소의 특성 내에 포함되어 있기 때문에 제거되었습니다.

3.5.2. 형식

PlayReady 헤더 v4.1.0.0에는 다음 구문이 있습니다.

<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>

태그는 아래에 설명되어 있습니다.

태그 이름 필수 Description
WRMHEADER 헤더 개체의 가장 바깥쪽 요소입니다. 하나의 DATA 요소를 포함할 수 있으며 하나의 버전 특성을 포함해야 합니다. 헤더의 버전은 "4.1.0.0"입니다. Microsoft가 새 필수 태그 또는 특성을 정의할 때마다 새 버전 번호가 해당 태그 또는 특성과 연결됩니다. 버전이 클라이언트 코드가 작성된 버전보다 크면 클라이언트 코드가 실패해야 합니다. 이는 헤더에 클라이언트가 이해하지 못하는 필수 태그가 포함되어 있음을 의미하기 때문입니다. 버전이 클라이언트 코드가 작성된 버전보다 작거나 같으면 클라이언트 코드가 이해하지 못하는 태그 또는 특성을 안전하게 건너뛸 수 있습니다.
DATA 타사 태그를 포함하여 헤더 데이터에 대한 컨테이너 요소입니다. WRMHEADER 요소에 둘 이상의 DATA 요소가 포함될 수 있습니다.
PROTECTINFO 아니요 연결된 콘텐츠에 대한 암호 해독기 개체를 만드는 데 사용할 수 있는 0개 또는 1개의 KID 요소를 지정합니다. DATA 요소에 둘 이상의 PROTECTINFO 요소가 포함될 수 있습니다.
아이 지정된 라이선스에 대한 모든 키 데이터를 포함합니다. PROTECTINFO 노드 아래에 하나 또는 0개의 KID 요소가 있을 수 있습니다. KID 요소에는 다음 특성이 포함됩니다.

VALUE: 필수입니다. base64로 인코딩된 키 ID GUID 값을 포함합니다. 이 GUID(DWORD, WORD, WORD, 8-BYTE 배열) 값은 작은 엔디안 바이트 순서여야 합니다.

ALGID: 필수입니다. 암호화 알고리즘을 지정합니다. "AESCTR" 또는 "COCKTAIL

"CHECKSUM: 선택 사항으로 설정해야 합니다. KID VALUE 및 콘텐츠 키를 사용하여 계산된 체크섬을 포함합니다. 자세한 내용은 이 문서의 키 체크섬 알고리즘 섹션을 참조하세요.

이 노드가 WRMHeader XML에 있는 경우 해당 데이터 값은 비어 있어야 합니다.
LA_URL 라이선스 취득 웹 서비스에 대한 URL을 포함합니다. 절대 URL만 허용됩니다. DATA 요소에 둘 이상의 LA_URL 요소가 포함될 수 있습니다.

이 노드가 WRMHeader XML에 있는 경우 해당 데이터 값이 비어 있으면 안 됩니다.
LUI_URL 비사일 라이선스 취득 웹 페이지의 URL을 포함합니다. 절대 URL만 허용됩니다. DATA 요소에 둘 이상의 LUI_URL 요소가 포함될 수 있습니다.

이 노드가 WRMHeader XML에 있는 경우 해당 데이터 값이 비어 있으면 안 됩니다.
DS_ID 도메인 서비스의 서비스 ID입니다. DATA 요소에 둘 이상의 DS_ID 요소가 포함될 수 있습니다.

이 노드가 WRMHeader XML에 있는 경우 해당 데이터 값이 비어 있으면 안 됩니다.
CUSTOMATTRIBUTES 아니요 콘텐츠 작성자가 이 요소 내에 임의의 XML을 추가할 수 있습니다. Microsoft 코드는 이 요소 내에 포함된 데이터에 대해 아무 작업도 수행하지 않습니다. DATA 요소에는 최대 하나의 CUSTOMATTRIBUTES 요소만 포함될 수 있습니다.

이 노드가 WRMHeader XML에 있는 경우 해당 데이터 값이 비어 있으면 안 됩니다.
DECRYPTORSETUP 이 태그는 "ONDEMAND" 값만 포함할 수 있습니다. DATA 노드에 있는 이 태그와 해당 값이 "ONDEMAND"로 설정된 경우 미디어 그래프를 설정하기 전에 콘텐츠의 전체 라이선스 체인을 획득할 수 있거나 클라이언트 컴퓨터에 이미 존재할 것으로 예상해서는 안 됨을 애플리케이션에 나타냅니다. 이 태그를 설정하지 않으면 애플리케이션이 미디어 그래프를 설정하기 전에 라이선스를 획득하거나 클라이언트 컴퓨터에 이미 존재하도록 적용할 수 있음을 나타냅니다. DATA 요소에는 최대 하나의 DECRYPTORSETUP 요소만 포함될 수 있습니다.

v4.1에 대한 참고 사항:

  • PlayReady 헤더의 모든 XML 태그 및 특성은 Microsoft에서 정의합니다. 유일한 예외는 CUSTOMATTRIBUTES 요소의 내용입니다. PlayReady PC 애플리케이션 개발자는 CUSTOMATTRIBUTES 요소 외부에 사용자 지정 태그를 추가하면 안 됩니다.
  • PlayReady 헤더는 W3C Canonical XML v1.1 사양을 준수해야 합니다.
  • PlayReady 헤더에는 올바른 형식의 ?XML XML에 필요한 최상위 태그가 포함되어 있지 않습니다.
  • 이 필드의 크기는 1KB를 초과하지 않는 것이 좋습니다.

3.6. v4.0.0.0

PlayReady 헤더 v4.0.0.0은 2008년 PlayReady 버전 1.0에서 도입되었으며, 단일 AESCTR 키를 사용하여 AES 암호화 콘텐츠를 지원하거나 WMDRM 암호화 콘텐츠를 지원하는 칵테일 키를 사용할 수 있습니다.

3.6.1. 예제

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>
PlayReady 헤더 4.0.0.0을 포함하는 Base64로 인코딩된 PlayReady 개체

XAMAAAEAAQBSAzwAVwBSAE0ASABFAEEARABFAFIAIAB4AG0AbABuAHMAPQAiAGgAdAB0AHAAOgAvAC8AcwBjAGgAZQBtAGEAcwAuAG0AaQBjAHIAbwBzAG8AZgB0AC4AYwBvAG0ALwBEAFIATQAvADIAMAAwADcALwAwADMALwBQAGwAYQB5AFIAZQBhAGQAeQBIAGUAYQBkAGUAcgAiACAAdgBlAHIAcwBpAG8AbgA9ACIANAAuADAALgAwAC4AMAAiAD4APABEAEEAVABBAD4APABQAFIATwBUAEUAQwBUAEkATgBGAE8APgA8AEsARQBZAEwARQBOAD4AMQA2ADwALwBLAEUAWQBMAEUATgA+ADwAQQBMAEcASQBEAD4AQQBFAFMAQwBUAFIAPAAvAEEATABHAEkARAA+ ADwALwBQAFIATwBUAEUAQwBUAEkATgBGAE8APgA8AEsASQBEAD4AcQA1AEgAZwBDAFQAagA0ADAAawBHAGUATgBWAGgAVABIADkARwBlAHgAdwA9AD0APAAvAEsASQBEAD4APABDAEgARQBDAEsAUwBVAE0APgB3ACsATwBaAFYAcgA4AHYAegByAFEAPQA8AC8AQwBIAEUAQwBLAFMAVQBNAD4APABMAEEAXwBVAFIATAA+ AGgAdAB0AHAAcwA6AC8ALwBwAHIAbwBmAGYAaQBjAGkAYQBsAHMAaQB0AGUALgBrAGUAeQBkAGUAbABpAHYAZQByAHkALgBtAGUAZABpAGEAcwBlAHIAdgBpAGMAZQBzAC4AdwBpAG4AZABvAHcAcwAuAG4AZQB0AC8AUABsAGEAeQBSAGUAYQBkAHkALwA8AC8ATABBAF8AVQBSAEwAPgA8AEMAVQBTAFQATwBNAEEAVABUAFIASQBCAFUAVABFAFMAPgA8AEkASQBTAF8ARABSAE0AXwBWAEUAUgBTAEkATwBOAD4AOAAuADAALgAxADcAMAA1AC4AMQA5ADwALwBJAEkAUwBfAEQAUgBNAF8AVgBFAFIAUwBJAE8ATgA+ ADwALWBDAFUAUWBUAE8ATQBBAFQAVABSAEkAQgBVAFQARQBTAD4APAAvAEQAQQQBUAEEAPgA8AC8AVwBSAE0ASABFAEEARABFAFIAPgA=

3.6.2. 형식

PlayReady 헤더 v4.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>
      <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>

다음 표에서는 다양한 태그에 대해 설명합니다.

태그 이름 필수 Description
WRMHEADER 헤더 개체의 가장 바깥쪽 요소입니다. 하나의 DATA 요소와 하나의 버전 특성을 포함할 수 있습니다. 헤더의 버전은 "4.0.0.0"입니다.

패키지에 대한 의미 체계:
Microsoft에서 새 필수 태그 또는 특성을 정의할 때마다 새 버전 번호가 해당 태그 또는 특성과 연결됩니다. PlayReady 헤더 버전은 헤더에 있는 필수 태그 및 특성 버전 중 가장 높은 버전으로 설정해야 합니다.

클라이언트에 대한 의미 체계:
버전이 클라이언트 코드가 작성된 버전보다 크면 클라이언트가 이해하지 못하는 필수 태그가 헤더에 포함되어 있음을 의미하기 때문에 클라이언트 코드가 실패해야 합니다. 버전이 클라이언트 코드가 작성된 버전보다 작거나 같은 경우 클라이언트 코드는 이해하지 못하는 태그 또는 특성을 안전하게 건너뛸 수 있습니다.
DATA 타사 태그를 포함하여 헤더 데이터에 대한 컨테이너 요소입니다.
PROTECTINFO KEYLENALGID 자식 요소를 사용하여 암호화 유형을 지정합니다.
KEYLEN 콘텐츠 키의 크기를 지정합니다. ALGID가 "AESCTR"로 설정된 경우 16으로 설정하고 ALGID가 "COCKTAIL"으로 설정된 경우 7로 설정해야 합니다.
ALGID 암호화 알고리즘을 지정합니다. AESCTR: 카운터 모드의 AES 알고리즘에 해당하는 값

으로 설정해야 합니다.

칵테일: 칵테일 알고리즘에 해당합니다.
아이 base64로 인코딩된 키 ID GUID 값을 포함합니다. 이 GUID(DWORD, WORD, WORD, 8-BYTE 배열) 값은 작은 엔디안 바이트 순서여야 합니다.
CHECKSUM 아니요 KID VALUE 및 콘텐츠 키를 사용하여 계산된 체크섬을 포함합니다. 자세한 내용은 키 체크섬 알고리즘 섹션을 참조하세요.

이전 버전의 PlayReady는 이 필드를 필요에 따라 처리했기 때문에 이전 버전의 PlayReady에서 사용할 헤더에 포함되어야 합니다.
LA_URL 아니요 라이선스 취득 웹 서비스에 대한 URL을 포함합니다. 절대 URL만 허용됩니다.
LUI_URL 비사일 라이선스 취득 웹 페이지의 URL을 포함합니다. 절대 URL만 허용됩니다.
DS_ID 도메인 서비스의 서비스 ID입니다.
CUSTOMATTRIBUTES 아니요 콘텐츠 작성자가 이 요소 내에 임의의 XML을 추가할 수 있습니다. Microsoft 코드는 이 요소 내에 포함된 데이터에 대해 아무 작업도 수행하지 않습니다.

v4.0에 대한 참고 사항:

  • PlayReady 헤더의 모든 XML 태그 및 특성은 Microsoft에서 정의합니다. 유일한 예외는 CUSTOMATTRIBUTES 요소의 내용입니다. PlayReady PC 애플리케이션 개발자는 CUSTOMATTRIBUTES 요소 외부에 사용자 지정 태그를 추가해서는 안 됩니다. 이렇게 하면 Microsoft가 정의하는 향후 태그와 충돌할 수 있습니다.
  • 컨테이너 요소 내의 자식 요소 순서는 중요하지 않습니다.
  • PlayReady 헤더에는 올바른 형식의 XML에 필요한 최상위 ?XML 태그가 포함되어 있지 않습니다.
  • 이 필드의 크기는 1KB를 초과하지 않는 것이 좋습니다.
  • CHECKSUM 은 PlayReady Server SDK에서 버전 1.2까지 필요합니다. 버전 1.5부터 PlayReady 서버 SDK는 CHECKSUM 을 선택 사항으로 처리합니다. PlayReady 포팅 키트 1.2는 체크 이 필요합니다. PlayReady 포팅 키트 2.0은 CHECKSUM 을 선택 사항으로 처리합니다.

4. 포함된 라이선스 Microsoft Store(ELS)

다음 조건에서 PlayReady 개체에 빈 임베디드 라이선스 Microsoft Store 추가하는 것이 좋습니다.

  • PlayReady 개체는 콘텐츠 파일에 삽입됩니다.
  • 콘텐츠는 포함된 라이선스가 있는 PlayReady 도메인의 컨텍스트에서 사용할 수 있습니다.

이렇게 하면 PlayReady 클라이언트가 기존 Embedded License Microsoft Store 간단히 채워서 PlayReady 개체에 도메인 바인딩된 라이선스를 추가로 포함할 수 있으며, 초기 라이선스보다 더 큰 크기의 새 PlayReady 개체로 전체 파일의 헤더를 다시 지정해야 하는 작업을 줄일 수 있습니다.

참고

부드러운 스트리밍 클라이언트 매니페스트에서 base-64 문자열로 삽입되는 것을 목표로 하는 PlayReady 개체에 빈 포함된 라이선스 Microsoft Store 포함하지 마세요.

참고

권장 크기는 10KB입니다.

5. 키 체크섬 알고리즘

PlayReady 헤더의 체크섬 알고리즘은 일치하지 않는 키로부터 보호하기 위한 것입니다. DRM 초기에 노래는 잘못 레이블이 지정된 키로 암호화되었습니다. 이로 인해 노래의 암호를 해독할 때 백색 잡음이 재생되었습니다. 그리고 노래가 충분히 큰 소리로 재생되면, 재생 장비가 파괴되었다. 체크섬을 사용하면 콘텐츠 키를 파일을 암호화하는 데 사용된 키로 확인할 수 있습니다. 알고리즘은 다음과 같이 작동합니다.

"AESCBC"로 설정된 ALGID 값의 경우 정의된 키 체크섬 알고리즘이 없습니다. CHECKSUM 특성을 생략해야 합니다.

"AESCTR"로 설정된 ALGID 값의 경우 16 바이트 키 ID는 ECB 모드를 사용하여 16 바이트 AES 콘텐츠 키로 암호화됩니다. 버퍼의 처음 8바이트가 추출되고 base64가 인코딩됩니다.

"COCKTAIL"으로 설정된 ALGID 값의 경우 다음 단계를 수행합니다.

  1. 21비트 버퍼가 만들어집니다.

  2. 콘텐츠 키는 버퍼에 저장되고 나머지 버퍼는 0으로 채워집니다.

  3. 5회 반복의 경우:

    a. buffer = SHA-1(버퍼).

  4. 버퍼의 처음 7바이트가 추출되고 base64가 인코딩됩니다.

  5. 이러한 단계를 수행한 후 base64로 인코딩된 바이트가 체크섬으로 사용됩니다.

6. CUSTOMATTRIBUTES

서비스 공급자는 PlayReady 헤더의 CUSTOMATTRIBUTES 요소 내에 독점 XML을 추가할 수 있습니다. CUSTOMATTRIBUTES 요소 내에서 사용되는 모든 태그는 Microsoft에서 정의한 이후 태그와 충돌하지 않도록 보장됩니다.

Microsoft 코드는 이 요소 내의 XML에 대해 아무 작업도 수행하지 않습니다. 서비스 공급자의 백 엔드 또는 해당 클라이언트 쪽 코드는 일반적으로 이 요소의 값을 해석하는 유일한 코드입니다. 예를 들어 흰색 레이블 서비스가 프런트 엔드 서비스 AAA, BBB, CCC를 나타낸다고 가정해 보겠습니다. 이러한 서비스는 콘텐츠 라이브러리를 한 번만 암호화할 수 있지만(비용이 많이 드는 작업이므로) 최종 사용자에게 콘텐츠를 제공하는 경우 CUSTOMATTRIBUTES 를 최종 사용자가 구독하는 특정 프런트 엔드 서비스의 이름으로 설정할 수 있습니다. 최종 사용자가 해당 콘텐츠에 대한 라이선스를 요청하면 화이트 레이블 서비스에서 최종 사용자가 구독하는 프런트 엔드 서비스를 결정하여 다른 라이선스를 발급할 수 있습니다.

이 필드의 크기는 1KB(KB)를 초과하면 안 됩니다.