PlayReady 콘텐츠 암호화 모드
이 항목에서는 PlayReady 시스템의 콘텐츠 암호화 모드에 대한 개요를 제공합니다. PlayReady 및 콘텐츠 암호화에 대한 개요는 PlayReady 콘텐츠 암호화를 참조하세요. 암호화 용어 및 정의는 용어집 을 참조하세요.
PlayReady 버전 1.0은 이전에 WMDRM(Windows Media Digital Rights Management)에서 사용된 Microsoft 관련 COCKTAIL 암호화 모드 외에도 AES-128 CTR 콘텐츠 암호화 모드를 도입했습니다. AES-128 CTR 콘텐츠 암호화 모드는 CTR(카운터 모드)의 콘텐츠 파일에 사용되는 길이가 128비트인 AES 키를 사용합니다.
버전 4.0부터 PlayReady 시스템은 CTR(카운터 모드) 및 CBC(암호 블록 체인 모드)에서 AES 128비트 키를 지원합니다.
이렇게 변경하면 PlayReady를 사용하는 서비스가 모든 디바이스에서 고유한 스트림 및 파일 형식을 완전히 활용할 수 있습니다. 또한 Microsoft ISO/IEC FDIS 23000-19에 정의된 CMAF(Common Media Application Format) 표준을 지원합니다.
일반 암호화 모드
ISO 표준 ISO/IEC 23001-7은 네 가지 공통 암호화 모드를 정의합니다.
버전 4.0부터 PlayReady 클라이언트는 공통 암호화 모드 'cenc'에 대한 AES CTR 키 외에도 공통 암호화 모드 'cbcs'를 지원할 수 있는 AES CBC 키를 지원합니다. 버전 4.0 이전에는 AES CTR이 주로 PlayReady 클라이언트에서 지원되었던 모드였으며, 이를 통해 일반 암호화 모드 'cenc'를 지원할 수 있었습니다. 일반적인 암호화 모드 'cens' 및 'cbc1'은 PlayReady 에코시스템에서 허용되고 기술적으로 수행할 수 있지만 지원되지는 않습니다.
'cbcs' AES-CBC 암호화 체계 지원
PlayReady PK 버전 4.0 이후에 빌드된 모든 클라이언트는 CBC 키를 지원할 수 있습니다. 하지만 클라이언트에 대한 지원은 선택 사항이며 라이선스 획득 프로토콜의 추가 속성을 통해 라이선스 서버에 신호를 보냅니다.
버전 | 칵테일 | 'cenc' | 'cbcs' |
---|---|---|---|
PlayReady 클라이언트 1.0 | 지원됨 | 지원됨 | 지원되지 않음 |
PlayReady 클라이언트 2.0 | 지원됨 | 지원됨 | 지원되지 않음 |
PlayReady 클라이언트 2.5 | 지원됨 | 지원됨 | 지원되지 않음 |
PlayReady 클라이언트 3.0 | 지원되지 않음 | 지원됨 | 지원되지 않음 |
PlayReady 클라이언트 3.3 | 지원되지 않음 | 지원됨 | 지원되지 않음 |
PlayReady 클라이언트 4.0 | 지원되지 않음 | 지원됨 | 지원됨 |
참고
- 버전 1709 이상으로 업그레이드된 모든 Xbox One 장치는 'cbcs'를 지원합니다.
- 버전 4.0부터 모든 PlayReady 라이선스 서버는 CBC 키를 사용하여 라이선스 발급을 지원합니다.
PlayReady 헤더에서 ALGID 신호
PlayReady 헤더는 일반적으로 콘텐츠 파일 또는 스트림의 헤더에 포함된 XML 문서입니다. 클라이언트가 이 콘텐츠의 암호를 해독하는 데 필요한 PlayReady 특성을 설명합니다. PlayReady 헤더에는 고유한 사양 및 버전 관리가 있습니다. 자세한 내용은 PlayReady 헤더 사양을 참조하세요.
버전 | PlayReady 헤더 4.3 | PlayReady 헤더 4.2 | PlayReady 헤더 4.1 | PlayReady 헤더 4.0 |
---|---|---|---|---|
PlayReady 클라이언트 4.0 (참고 4 참조) |
✔ | ✔ | ✔ | ✔ |
PlayReady 클라이언트 3.3 (참고 3 참조) |
✔ | ✔ | ✔ | |
PlayReady 클라이언트 3.0 (참고 3 참조) |
✔ | ✔ | ✔ | |
PlayReady 클라이언트 2.5 (참고 2 참조) |
✔ | ✔ | ||
PlayReady 클라이언트 2.0 (참고 2 참조) |
✔ | ✔ | ||
PlayReady 클라이언트 1.0 (참고 1 참조) |
✔ |
참고
- (4) Xbox One 버전 1709 이상은 PlayReady 4.X 클라이언트입니다.
- (3) Windows 10 모든 버전과 Xbox One 버전 1703 이하가 PlayReady 3.X 클라이언트입니다. 2017년 이후에 출시된 최신 비 Windows 디바이스(예: 스마트 TV)는 PlayReady 3.X 클라이언트입니다.
- (2) Silverlight 및 Windows 8, 8.1은 PlayReady 2.X 클라이언트입니다. 2011년과 2017년 사이에 출시된 대부분의 비 Windows 디바이스(예: 스마트 TV)는 PlayReady 2.X 클라이언트입니다.
- (1) 2008년과 2011년 사이에 출시된 대부분의 비 Windows 장치(예: 스마트 TV)는 PlayReady 1.X 클라이언트입니다.
다음은 PlayReady 헤더 v4.2의 예입니다.
<WRMHEADER
version="4.2.0.0"
xmlns="http://schemas.microsoft.com/DRM/2007/03/PlayReadyHeader">
<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>
<DECRYPTORSETUP>ONDEMAND</DECRYPTORSETUP>
</DATA>
</WRMHEADER>
ALGID(알고리즘 식별자)는 KID 요소의 속성이며 콘텐츠를 암호화하는 데 사용된 암호화 알고리즘을 지정합니다. PlayReady 헤더 버전 4.2부터 ALGID가 필요하며 "AESCTR" 또는 "COCKTAIL"으로 설정해야 합니다. 그러나 버전 4.3부터 ALGID를 "AESCBC" 값으로 설정할 수도 있습니다. 다음 예제에서는 ALGID 값이 "AESCBC"로 설정된 PlayReady 헤더 버전 4.3을 보여줍니다.
<WRMHEADER
version="4.3.0.0"
xmlns="http://schemas.microsoft.com/DRM/2007/03/PlayReadyHeader">
<DATA>
<PROTECTINFO>
<KIDS>
<KID VALUE="PV1LM/VEVk+kEOB8qqcWDg==" ALGID="AESCBC"/>
<KID VALUE="tuhDoKUN7EyxDPtMRNmhyA==" ALGID="AESCBC"/>
</KIDS>
</PROTECTINFO>
<LA_URL>http://rm.contoso.com/rightsmanager.asmx</LA_URL>
<DS_ID>AH+03juKbUGbHl1V/QIwRA==</DS_ID>
<DECRYPTORSETUP>ONDEMAND</DECRYPTORSETUP>
</DATA>
</WRMHEADER>
다음 그림에서는 라이선스 요청이 PlayReady 헤더를 기반으로 하고 ALGID가 지정된 콘텐츠 흐름을 보여줍니다.
ALGID 누락
PlayReady 헤더 버전 4.3부터 ALGID가 누락되었을 수 있습니다. 다음 예제에서는 ALGID 값이 누락된 PlayReady 헤더 버전 4.3을 보여줍니다.
<WRMHEADER
version="4.3.0.0"
xmlns="http://schemas.microsoft.com/DRM/2007/03/PlayReadyHeader">
<DATA>
<PROTECTINFO>
<KIDS>
<KID VALUE="PV1LM/VEVk+kEOB8qqcWDg=="/>
</KIDS>
</PROTECTINFO>
<LA_URL>http://rm.contoso.com/rightsmanager.asmx</LA_URL>
<DS_ID>AH+03juKbUGbHl1V/QIwRA==</DS_ID>
<DECRYPTORSETUP>ONDEMAND</DECRYPTORSETUP>
</DATA>
</WRMHEADER>
다음 그림은 라이선스 요청이 CDMi 모듈을 사용하고 ALGID가 누락된 콘텐츠 흐름을 보여줍니다.
참고
각 PlayReady 헤더에는 다음이 있을 수 있습니다.
- 암호화 유형은 하나뿐입니다. 예를 들어 ALGID="AESCTR"이면 헤더의 모든 키가 CTR 모드에서 사용됩니다. ALGID="AESCBC"이면 이 헤더의 모든 키가 CBC 모드에서 사용됩니다.
- ALGID가 누락되면 이 헤더의 모든 키가 카운터 모드 또는 암호화 블록 체인에서 사용되지만 값은 헤더에 삽입되지 않습니다.
- v4.0 미만의 라이선스 서버에 PlayReady 헤더 v4.3을 사용하여 라이선스 취득 요청을 하면 예외가 발생합니다.
- 라이선스 응답에는 하나 이상의 라이선스가 포함될 수 있으며, 각 라이선스에는 하나의 키와 정책 수가 포함됩니다.
ALGID 값이 누락된 이유
Microsoft 암호화기가 콘텐츠를 처리할 때 포함된 것과 동일한 ALGID 값을 PlayReady 헤더에 항상 포함하는 것이 좋습니다.
표준 시나리오에서 암호화기는 콘텐츠를 암호화하고 콘텐츠에 PlayReady 헤더를 생성합니다. 암호화기는 암호화에 사용된 AES 모드를 알고 있습니다. 따라서 PlayReady 헤더의 ALGID 속성에 이 정보가 포함됩니다. 클라이언트는 실제 콘텐츠에서 구문 분석된 PlayReady 헤더를 기반으로 라이선스 요청을 시작하므로 ALGID 값이 존재하고 유효합니다.
일부 시나리오에서 클라이언트는 간단한 KID 값(128비트 GUID)을 기반으로 라이선스 요청을 시작합니다. 이 경우 라이선스 요청에 삽입된 PlayReady 헤더의 ALGID 값이 누락됩니다(지정되지 않음이라고도 함). 한 가지 예는 클라이언트가 HTML5 EME API를 사용하여 라이선스 요청을 하는 경우입니다.
클라이언트가 누락된 ALGID를 처리하는 방법
클라이언트가 들어오는 PlayReady 헤더를 기반으로 라이선스 요청을 시작하는 경우 라이선스 획득 챌린지에 PlayReady 헤더의 복사본이 포함되어 있으므로 라이선스 요청의 ALGID 값이 헤더에 있는 값을 반영합니다. 이 경우 다음과 같습니다.
- 모든 PlayReady 헤더 v4.2 이하의 경우 ALGID 값이 필요하며 유효해야 합니다.
- PlayReady Headers v4.3 이상의 경우 ALGID 값이 존재하고 유효하거나 누락될 수 있습니다.
서버 SDK가 누락된 ALGID를 처리하는 방법
라이선스 응답을 통해 제공되는 모든 라이선스에는 유효한 ALGID 값이 포함되어야 합니다.
들어오는 라이선스 요청에서 ALGID가 지정되지 않은 경우 라이선스 서버는 서비스의 백 엔드에서 이 정보를 가져와서 라이선스 응답에 올바른 값을 넣어야 합니다.
초기화 벡터(EV)
PlayReady 버전 3.3 이하에서는 CTR 모드에서 64비트 EV(8비트 EV)만 지원됩니다. PlayReady 버전 4.0부터 64비트 및 128비트 EV(8비트 및 16비트 EV)는 CTR 및 CBC 모드에서 모두 지원됩니다.
예:
- 이제 CBC 모드에서 128비트 EV를 자주 사용하는 HLS 규격 스트림이 지원됩니다.
- 이제 CTR 모드에서 128비트 EV를 사용하는 일부 HbbTV 호환 스트림이 지원됩니다.
제한 사항
- PlayReady 헤더는 모든 KID 요소에 하나의 ALGID 값만 사용해야 합니다. 즉, 자산의 다양한 트랙과 품질을 암호화하는 데 사용되는 모든 키는 AES CTR 또는 AES CBC여야 합니다. 모든 KID 요소에서 ALGID가 누락된 경우 모든 KID 요소에서 누락되어야 합니다.
- PlayReady 버전 4.4 이전에는 들어오는 클라이언트 인증서가 Windows이고 SL2000에서 예외가 throw될 때 CBC 키를 사용하여 라이선스를 생성합니다. Windows 클라이언트는 SL3000 단위에서만 CBC를 지원하기 때문입니다. 그러나 이 클라이언트가 PlayReady 버전 4.0 이상이고 CBC 모드에 대한 지원을 선언하는 경우 CBC 키가 있는 라이선스를 SL2000 클라이언트에 제공할 수 있습니다.
- 들어오는 클라이언트 인증서가 4.0 이전의 포팅 키트 버전을 사용하는 디바이스인 경우 CBC 키를 사용하여 라이선스를 생성하면 예외가 발생합니다.
- 들어오는 라이선스 요청이 AES CBC에 대한 지원을 나타내지 않는 경우 CBC 키를 사용하여 라이선스를 생성하면 예외가 throw됩니다.
중요
서비스는 동일한 {KID, Ck}를 사용하여 CTR 모드 및 CBC 모드에서 단일 콘텐츠를 암호화해서는 안 됩니다.
- 기능적인 이유로 {KID, Ck, AESCTR} 및 {KID, Ck, AESCBC}에 대한 라이선스를 모두 획득한 클라이언트는 작동하지 않습니다.
- 강력한 이유로 공격자가 CBC 및 CTR 모드에서 동일한 키로 암호화된 동일한 콘텐츠에 액세스하면 권한 부여 없이 콘텐츠의 암호를 보다 쉽게 해독할 수 있습니다.