키 및 키 ID(KID)
PlayReady로 보호되는 모든 미디어 파일에는 PlayReady에 필요한 여러 정보가 포함된 PlayReady 개체 (PRO)가 있습니다. 예를 들어 비디오 및 오디오 트랙에 대한 메타데이터도 포함될 수 있는 파일의 콘텐츠 헤더 에 있습니다.
각 PRO 내에는 PlayReady 헤더가 있습니다. 이 헤더는 클라이언트가 저장된 콘텐츠의 라이선스를 찾거나 획득하는 데 필요한 정보를 제공합니다. PlayReady 헤더는 다음과 같습니다.
<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>https://test.playready.microsoft.com/service/rightsmanager.asmx</LA_URL>
</DATA>
</WRMHEADER>
관심 있는 부분은 하나 이상의 <KID>
요소를 포함하는 요소입니다<KIDS>
. KID(키 ID)에는 클라이언트가 서버에 해당 키를 요청하는 데 사용하는 GUID(Globally Unique Identifier)와 파일 암호를 해독하는 데 사용되는 ALGID가 포함됩니다. KID는 PRO에 포함되어 있기 때문에 공개되지만 키 자체는 서비스의 비밀이며 키와 KID 간의 관계는 서비스에만 알려져 있습니다.
키 생성 및 콘텐츠 암호화
PlayReady 시스템의 콘텐츠 암호화 키는 AES-128 CTR 및 AES-128 CBC 키입니다. 콘텐츠를 암호화하는 서비스는 새 KID 및 새 콘텐츠 키를 생성합니다. KID는 PRO에 삽입되고 콘텐츠의 비디오 및 오디오 프레임은 콘텐츠 키로 암호화됩니다. 다음 이미지에서는 키를 생성한 다음 콘텐츠를 암호화하는 데 사용하는 방법을 보여줍니다.
KID 및 키를 생성하는 방법에는 다음 두 가지가 있습니다.
- 서비스에서 각 KID 및 키 값을 임의로 생성하고 저장하는 키 관리 시스템(KMS)을 사용하여 클라이언트에서 제공하는 KID에 해당하는 키 값을 조회할 수 있습니다.
- PlayReady 키 시드 메커니즘 사용 이 메커니즘을 사용하면 서비스에서 키 시드(30 바이트 임의 값)라는 상수 값을 결정하고 키가 필요한 각 콘텐츠 조각에 대해 임의의 KID를 생성합니다. 서버 SDK를 사용하여 키의 128비트 또는 키 시드 및 KID를 제공하여 키를 생성할 수 있습니다. 키는 여기에 지정된 PlayReady 알고리즘에 의해 유추됩니다.
키를 생성하는 방법에 관계없이 올바른 KID에 해당하는지 확인한 다음 콘텐츠를 암호화할 수 있어야 합니다.
콘텐츠에 대한 라이선스 제공
클라이언트가 라이선스 요청을 하면 콘텐츠의 PlayReady 헤더를 라이선스 발급자에게 보냅니다. 라이선스 발급자는 위에서 설명한 방법 중 하나를 사용하여 KID를 추출하고 해당 키 값을 결정합니다. 키 시드 메커니즘을 사용하는 경우 KID 및 키 시드를 기반으로 키를 다시 생성합니다. 그런 다음 이 키를 포함한 라이선스를 생성합니다. 이 키는 라이선스 응답에서 클라이언트로 다시 보냅니다.
예를 들어 비디오 파일이 있다고 가정해 보겠습니다. 이 콘텐츠의 패키지는 파일의 PlayReady 헤더에 삽입되는 임의의 KID 123
를 생성합니다. 또한 패키지는 KID123
에 해당하는 임의 키 값을 ABC
생성하고 둘 다 KMS 저장합니다. 패키지 관리자가 KMS 파일을 암호화할 올바른 키를 요청하고 키를 사용하여 ABC
파일을 암호화합니다. 고객이 파일을 재생하려고 하면 클라이언트는 라이선스 발급자에게 KID 123
에 해당하는 라이선스를 요청합니다. 라이선스 발급자가 KMS KID를 조회하고 클라이언트가 파일의 잠금을 해제할 수 있는 키와 고객이 볼 수 있는 키를 ABC
포함한 라이선스로 응답합니다.
참고
라이선스 발급자가 클라이언트에 보낸 라이선스(이 예에서는 키가 ABC
포함된 라이선스)가 암호화되어 공격자가 키 값을 가로챌 수 없습니다.
미디어 파일을 보호하는 데 사용되는 키와 라이선스의 키는 동일합니다. 따라서 콘텐츠 패키지 관리자와 라이선스 발급자는 모두 지정된 미디어 파일에 대해 정확히 동일한 키를 검색하거나 생성할 수 있어야 합니다. 이렇게 하려면 키 시드를 사용하여 키를 생성하는 경우 콘텐츠 패키지 관리자와 라이선스 발급자 간에 공유해야 합니다.
파일 또는 트랙 간에 키 공유
실제 키가 둘 이상의 문을 잠금 해제할 수 있는 것처럼 기술적으로 하나의 PlayReady 키를 사용하여 하나의 파일에서 여러 트랙의 잠금을 해제하거나 자산 컬렉션에 있는 여러 파일의 잠금을 해제할 수 있습니다. 패키징 프로세스 중에 콘텐츠 패키저는 여러 트랙 또는 여러 미디어 파일에 대해 동일한 키 식별자를 지정할 수 있으며 모두에 동일한 키가 사용됩니다.
예를 들어 4K, HD 및 SD 비디오 트랙과 여러 오디오 트랙이 있는 다중 품질 비디오 자산의 경우 암호화기는 트랙당 하나의 키 또는 모든 트랙에 대해 하나의 키를 유연하게 정의할 수 있습니다.
클라이언트는 암호 해독 권한이 있는 각 키에 대한 라이선스가 필요합니다. 라이선스 서버는 단일 라이선스 응답으로 여러 라이선스를 제공할 수 있습니다.
여러 트랙이 있는 단일 자산에서 모든 트랙에 대해 하나의 키 또는 각 트랙에 대한 키 간의 결정은 다음 기준에 따라 콘텐츠를 관리하는 서비스에 의해 수행됩니다.
- 키가 많을수록 더 복잡해지지만 라이선스 배달 시간에 특정 클라이언트의 암호 해독을 허용하려는 서비스를 추적할 항목을 지정할 수 있습니다.
- 더 적은 키는 덜 복잡하지만 라이선스 배달 시간에 특정 클라이언트의 암호 해독을 허용하려는 서비스를 추적할 때 지정할 수 없습니다.
- 일부 클라이언트는 단일 자산에 대해 여러 키를 지원하지 않는다는 제한 사항이 있을 수 있습니다.
참고
PlayReady 키는 둘 이상의 디지털 미디어 파일의 잠금을 해제할 수 있지만 Microsoft는 이를 강력하게 반대합니다. 모든 파일에서 고유 키를 사용하면 동일한 키를 사용하여 파일을 보호하는 것보다 보안이 강화됩니다.
라이선스 응답에 라이선스 누적
단일 라이선스 응답은 여러 라이선스와 여러 키를 사용하여 하나의 트랜잭션에서 여러 파일 또는 트랙의 잠금을 해제할 수도 있습니다. 이는 하나의 트랜잭션만 포함하므로 여러 라이선스에 대해 여러 응답을 만드는 것보다 더 효율적입니다. 이는 다음과 같은 다양한 시나리오에 유용할 수 있습니다.
- 하나의 미디어 파일은 여러 키를 사용하여 암호화됩니다. 예를 들어 비디오 트랙은 Key1을 사용하여 암호화되고 오디오 트랙은 Key2를 사용하여 암호화됩니다. 클라이언트가 KID1에 대한 라이선스를 요청하면 라이선스 서버는 KID1 및 KID2에 대한 라이선스를 포함하여 라이선스 응답을 발급하므로 클라이언트는 파일의 비디오 및 오디오 트랙을 해독하는 모든 키를 갖습니다.
- 앨범의 각 노래는 다른 키를 사용하여 암호화되지만 고객은 모두에 대한 권한을 획득했습니다. 고객이 첫 번째 노래를 재생하기 시작하면 라이선스 서버는 앨범의 각 노래에 대해 하나의 라이선스를 포함하여 라이선스 응답을 발급하므로 클라이언트는 전체 앨범을 원활하게 재생하는 데 필요한 모든 키를 갖습니다.
- 라이브 TV 채널의 키는 24시간마다 변경될 것으로 예상됩니다. 재생이 시작되면 서버는 현재 키에 대한 라이선스뿐만 아니라 다음 키가 있는 라이선스를 포함한 라이선스 응답을 보내므로 키가 변경되면 클라이언트에 이미 다음 키가 있고 변경이 원활하게 수행됩니다.