DRM 콘텐츠 암호화

Prev Next

Classic/VPC 환경에서 이용 가능합니다.

CPIX API를 통해 콘텐츠에 DRM 암호화를 적용할 수 있습니다. CPIX API는 DASH 산업 포럼에서 정의한 Content Protection Information Exchange Format(CPIX) 표준을 기반으로 구현된 API로, 미디어 콘텐츠의 패키징 과정에서 멀티 DRM을 적용하는 데 필요한 키의 연동 규격을 정의합니다. CPIX API를 이용하여 CPIX 기반의 키 연동을 지원하는 인코더·트랜스코더 솔루션과 DoveRunner(구 PallyCon) 멀티 DRM을 쉽게 연동할 수 있습니다.

참고

Live Station 서비스 연동 방법은 Live Station 채널 생성을 참조해 주십시오.

CPIX API 기반 DRM 콘텐츠 암호화

CPIX API를 활용하여 DRM 콘텐츠 암호화를 적용하는 방법은 다음과 같습니다.

구분 경로 설명
DoveRunner CPIX API DoveRunner CPIX API 연동 가이드 DoveRunner(구 PallyCon)에서 구현한 CPIX API로, 인코더/트랜스코더 솔루션과 연동하여 멀티 DRM 적용. Flussonic Media Server 연동에도 활용
SPEKE API SPEKE 가이드 AWS Elemental에서 구현한 CPIX API로, DoveRunner와 사전 연동되어 AWS Elemental MediaPackage 및 MediaConvert에서 멀티 DRM 적용
ATEME NEA-DVR CPIX API ATEME NEA-DVR 가이드 Anevia(현재 ATEME에 인수됨)에서 구현한 CPIX API로, NEA-DVR 솔루션과 사전 연동되어 멀티 DRM 적용
참고
  • DoveRunner(구 PallyCon) CPIX API 클라이언트는 주요 개발 언어별로 사전 구현된 CPIX 클라이언트 모듈을 제공합니다.
  • 각 모듈은 KMS 서버와의 통신을 위해 XML 형식의 요청 데이터를 생성하고, 응답 데이터를 해석하는 기능을 제공합니다.

DoveRunner CPIX API 사양

DoveRunner(구 PallyCon) CPIX API 클라이언트는 다음의 사양을 지원합니다.

항목 지원 사양 설명
개발 언어 C++, C#, Java, Python DRM 패키징 연동 개발 환경에 맞는 언어별 샘플 코드 제공
DRM 타입 Widevine, PlayReady, FairPlay, NCG, HLS_NCG
  • NCG: DoveRunner의 자체 DRM 규격으로, 패키징 대상 파일 전체를 암호화할 때 사용
  • HLS_NCG: AES-128로 암호화된 HLS 콘텐츠의 키를 NCG 규격으로 다시 암호화하는 방식
암호화 방식 CENC, CBC1, CENS, CBCS 클라이언트 플랫폼에서 지원하는 AES 암호화 방식에 따라 일반적으로 CENC 또는 CBCS를 지정
트랙 유형 ALL_TRACKS, AUDIO, SD, HD, UHD1, UHD2 멀티 키 패키징 환경에서 트랙별로 다른 암호화 키를 적용할 때 사용

멀티 DRM 암호화 방식

DRM 콘텐츠의 암호화 방식은 다음과 같습니다.

암호화 방식 프로토콜 DRM 타입 암호화 알고리즘 지원 단말
DRM HLS
  • FairPlay: Apple에서 제공하는 DRM 기술 규격으로, 각 HLS 세그먼트를 AES-CBC 방식으로 암호화
AES-CBC Mac/iOS Safari 브라우저, iOS/iPadOS/tvOS 앱, HLS HTML5
DRM DASH
  • PlayReady: Microsoft에서 제공하는 DRM 기술 규격으로, Common Encryption 규격에 따라 AES-128 방식으로 암호화
  • Widevine: Google에서 제공하는 DRM 기술 규격으로, Common Encryption 규격에 따라 AES-128 방식으로 암호화
CENC (Common Encryption) MS Edge, IE11, Chrome, Firefox, Opera DASH HTML5

One Click Multi DRM 이용 시나리오

One Click Multi DRM 서비스의 이용 시나리오는 다음과 같습니다.

  1. DRM 콘텐츠를 암호화합니다.
  2. 클라이언트(플레이어)에서 DRM 라이선스를 요청합니다. 요청 시 contentId, drmType 등의 콘텐츠 설정 정보가 필요합니다.
  3. 클라이언트가 발급받은 라이선스로 DRM 콘텐츠를 재생합니다.
주의

One Click Multi DRM 서비스에서는 사이트에 설정된 정책에 따라 재생·보안 규칙이 적용된 라이선스를 발행합니다. 따라서 요청한 라이선스 정보와 암호화된 DRM 콘텐츠 정보가 일치하지 않으면 재생이 제한되거나 실패할 수 있습니다.

Live 콘텐츠 DRM 암호화

Live 콘텐츠의 DRM 암호화 방법은 다음과 같습니다.

Live Station을 사용할 경우

Live Station을 사용할 경우의 Live 콘텐츠 DRM 암호화 방법은 다음과 같습니다.

  1. One Click Multi DRM을 통해 사이트를 생성해 주십시오.
  2. Live Station > Channel Management 메뉴에서 채널을 생성해 주십시오.
    • 생성 시 Multi DRM 항목에 1.에서 생성한 사이트를 선택해 주십시오.

Live Station을 사용하지 않을 경우

Live Station을 사용하지 않을 경우의 Live 콘텐츠 DRM 암호화 방법은 다음과 같습니다.

  1. 다음 항목을 조합하여 콘텐츠 DRM 암호화 API를 호출해 주십시오.
    • URL: DoveRunner(구 PallyCon) CPIX API 또는 SPEKE API 등 API별 키 요청 URL
    • 추가 URI: One Click Multi DRM 사이트 상세 정보를 통해 획득한 KMS 토큰
  2. API 응답을 통해 콘텐츠 암호화를 위한 암호화 데이터를 획득해 주십시오.
  3. 획득한 DRM 암호화 정보를 서드파티 인코더·트랜스코더·패키저 연동 솔루션에 적용해 주십시오.
참고

CPIX API 응답에서 획득하는 DRM 암호화 정보는 다음과 같습니다.

필드 설명
key_id_hex, key_id_b64, key_hex, key_b64, iv_hex, iv_b64 16진수 또는 Base64 형태의 Key ID, Key, IV 값
pssh PlayReady 또는 Widevine에서 사용되는 PSSH 데이터(헤더 포함)
pssh_payload_only PSSH 데이터에서 헤더를 제외한 Payload 부분
key_uri FairPlay DRM이 적용된 HLS m3u8 파일의 #EXT-X-Key 태그에 포함되는 URI 파라미터 값

VOD 콘텐츠 DRM 암호화

VOD 콘텐츠의 DRM 암호화 방법은 다음과 같습니다.

VOD Station을 사용할 경우

VOD Station을 사용할 경우의 VOD 콘텐츠 DRM 암호화 방법은 다음과 같습니다.

  1. One Click Multi DRM을 통해 사이트를 생성해 주십시오.
    • 외부 DRM 서비스를 사용할 경우, 이 단계를 건너뛸 수 있습니다.
  2. VOD Station > Channel 메뉴에서 채널을 생성해 주십시오.
    • 생성 시 Multi DRM 항목에 다음 중 하나를 적용해 주십시오.
      • One Click Multi DRM
        • DRM Site: 활성화 상태의 DRM 사이트 선택
        • Content ID: 재생하려는 콘텐츠의 고유 식별자(DRM 패키징 시 활용)
          • <예시> drm-contents
      • 외부 DRM
        • DRM 유형: 사용할 DRM 유형 선택
        • Content ID: 재생하려는 콘텐츠의 고유 식별자(CPIX API 요청 바디(XML)에 포함)
          • <예시> drm-contents
        • DRM System ID: DRM 시스템의 고유 식별자(CPIX API 요청 바디(XML)에 포함)
          • 선택한 DRM 유형에 따라 1개 또는 2개의 System ID가 필요하며, 반드시 한 줄에 하나씩 입력
          • <예시> 9A04F079-9840-4286-AB92-E65BE0885F95, EDEF8BA9-79D6-4ACE-A3C8-27DCD51D21ED
        • DRM Key URL: CPIX API 요청 URL
          • DRM 공급사의 암호화 키 요청 형식에 맞게 입력
          • <예시> https://kms.example.com/cpix/v1/key/ujllldopmquy==
주의

VOD Station을 통한 DRM 암호화는 CPIX v1만 지원합니다.

VOD Station을 사용하지 않을 경우

VOD Station을 사용하지 않을 경우의 VOD 콘텐츠 DRM 암호화 방법은 다음과 같습니다.

  1. 다음 항목을 조합하여 콘텐츠 DRM 암호화 API를 호출해 주십시오.
    • URL: DoveRunner(구 PallyCon) CPIX API 또는 SPEKE API 등 API별 키 요청 URL
    • 추가 URI: One Click Multi DRM 사이트 상세 정보를 통해 획득한 KMS 토큰
  2. API 응답을 통해 콘텐츠 암호화를 위한 암호화 데이터를 획득해 주십시오.
  3. 획득한 DRM 암호화 정보를 서드파티 인코더·트랜스코더·패키저 연동 솔루션에 적용해 주십시오.

요청

DoveRunner(구 PallyCon) CPIX API를 활용한 요청 형식은 다음과 같습니다.

  • 요청 URL
    • POST https://kms.pallycon.com/v1/cpix/pallycon/getKey/{kmsToken}
  • 요청 헤더
  • 요청 바디
    필드 타입 필수 여부 설명
    cpix:CPIX Object Required 콘텐츠 키와 DRM 시스템 정보를 포함하는 CPIX 문서의 루트 요소
    cpix:ContentKeyList Object Required 콘텐츠 키 목록을 정의하는 컨테이너 요소
     └ cpix:ContentKey Object Required kid(Key ID) 속성을 가진 개별 콘텐츠 키 정보
    cpix:DRMSystemList Object Required DRM 시스템 목록을 정의하는 컨테이너 요소
      └ cpix:DRMSystem Object Required kid(Key ID)와 systemId(DRM 시스템 식별자) 속성을 가진 각 DRM 시스템 정보
  • 요청 예시
    curl --location --request POST 'https://kms.pallycon.com/v1/cpix/pallycon/getKey/{kmsToken}' \
    --header 'x-ncp-apigw-timestamp: {Timestamp}' \
    --header 'x-ncp-iam-access-key: {Access Key}' \
    --header 'x-ncp-apigw-signature-v2: {API Gateway Signature}' \
    --header 'Content-Type: application/xml' \
    --header 'x-ncp-region_code: KR' \
    --data '<?xml version="1.0" encoding="UTF-8"?>
    <cpix:CPIX id="your-content-id" xmlns:cpix="urn:dashif:org:cpix" xmlns:pskc="urn:ietf:params:xml:ns:keyprov:pskc" xmlns:speke="urn:aws:amazon:com:speke">
      <cpix:ContentKeyList>
          <cpix:ContentKey kid="681e5b39-49f2-4dfa-b744-86573c22e6fb"></cpix:ContentKey>
      </cpix:ContentKeyList>
      <cpix:DRMSystemList>
          <!-- Common encryption / MSS (Playready) -->
          <cpix:DRMSystem kid="681e5b39-49f2-4dfa-b744-86573c22e6fb" systemId="9a04f079-9840-4286-ab92-e65be0885f95" />
          <!-- Common encryption (Widevine)-->
          <cpix:DRMSystem kid="681e5b39-49f2-4dfa-b744-86573c22e6fb" systemId="edef8ba9-79d6-4ace-a3c8-27dcd51d21ed" />
      </cpix:DRMSystemList>
    </cpix:CPIX>'
    

응답

DoveRunner(구 PallyCon) CPIX API 요청에 대한 응답 형식은 다음과 같습니다.

  • 응답 바디
    필드 타입 필수 여부 설명
    cpix:CPIX Object - 콘텐츠 아이디(CID) 키와 DRM 시스템 정보를 포함하는 CPIX 문서의 루트 요소
    cpix:ContentKeyList Object - 콘텐츠 키 목록을 정의하는 컨테이너 요소
     └ cpix:ContentKey Object - kid(Key ID)와 explicitIV(초기화 벡터) 속성을 가진 개별 콘텐츠 키 정보
    • kid 값은 요청 데이터에 입력된 값과 별개로 KMS 에서 새로 생성된 값이 적용되며, 키와 IV는 Base64 인코딩된 형태로 리턴됨
      └ cpix:Data Object - 콘텐츠 키 데이터를 포함하는 요소
       └ pskc:Secret Object - 콘텐츠 키의 비밀 데이터를 포함하는 요소
       └ pskc:PlainValue String - Base64로 인코딩된 콘텐츠 키 값
    cpix:DRMSystemList Object - DRM 시스템 목록을 정의하는 컨테이너 요소
      └ cpix:DRMSystem Object - kid(Key ID)와 systemId(DRM 시스템 식별자) 속성을 가진 각 DRM 시스템 정보
       └ cpix:ContentProtectionData String - Base64로 인코딩된 PSSH 데이터에서 헤더가 제거된 Payload 부분
       └ cpix:PSSH String - Base64로 인코딩된 PSSH 데이터(헤더 포함)
  • 응답 예시
    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <cpix:CPIX id="cpix-test-cid" xmlns:cpix="urn:dashif:org:cpix" xmlns:speke="urn:aws:amazon:com:speke" xmlns:pskc="urn:ietf:params:xml:ns:keyprov:pskc" >
      <cpix:ContentKeyList>
          <cpix:ContentKey explicitIV="MDEyMzQ1Njc4OWFiY2RlZg==" kid="12ea753c-23e7-bc02-4474-b2b976c43beb">
              <cpix:Data>
                  <pskc:Secret>
                      <pskc:PlainValue>SzC1qc1cEpyFU6t/lL7Byw==</pskc:PlainValue>
                  </pskc:Secret>
              </cpix:Data>
          </cpix:ContentKey>
      </cpix:ContentKeyList>
      <cpix:DRMSystemList>
          <!-- Common encryption / MSS (Playready) -->
          <cpix:DRMSystem kid="12ea753c-23e7-bc02-4474-b2b976c43beb" systemId="9a04f079-9840-4286-ab92-e65be0885f95">
                <cpix:ContentProtectionData>qAUAAAEAAQCeB...A=</cpix:ContentProtectionData><!-- V2에 추가됨 -->
              <cpix:PSSH>AAACwnBzc2gAAAAAmgTweZhAQoarkuZb4IhflQAAAqKiAgAAAQABAJgCPABXAFIATQBIAEUAQQBEAEUAUgAgAHgAbQBsAG4AcwA9ACIAaAB0AHQAcAA6AC8ALwBzAGMAaABlAG0AYQBzAC4AbQBpAGMAcgBvAHMAbwBmAHQALgBjAG8AbQAvAEQAUgBNAC8AMgAwADAANwAvADAAMwAvAFAAbABhAHkAUgBlAGEAZAB5AEgAZQBhAGQAZQByACIAIAB2AGUAcgBzAGkAbwBuAD0AIgA0AC4AMAAuADAALgAwACIAPgA8AEQAQQBUAEEAPgA8AFAAUgBPAFQARQBDAFQASQBOAEYATwA+ADwASwBFAFkATABFAE4APgAxADYAPAAvAEsARQBZAEwARQBOAD4APABBAEwARwBJAEQAPgBBAEUAUwBDAFQAUgA8AC8AQQBMAEcASQBEAD4APAAvAFAAUgBPAFQARQBDAFQASQBOAEYATwA+ADwASwBJAEQAPgBQAEgAWABxAEUAdQBjAGoAQQByAHgARQBkAEwASwA1AGQAcwBRADcANgB3AD0APQA8AC8ASwBJAEQAPgA8AEMASABFAEMASwBTAFUATQA+AC8ARgA3AEIAMQBmAEgAMgBlADAAYwA9ADwALwBDAEgARQBDAEsAUwBVAE0APgA8AEwAQQBfAFUAUgBMAD4AaAB0AHQAcABzADoALwAvAHQAZQBzAHQAdABvAGsAeQBvAC4AcABhAGwAbAB5AGMAbwBuAC4AYwBvAG0ALwByAGkALwBwAGwAYQB5AHIAZQBhAGQAeQAvAGwAaQBjAGUAbgBzAGUATQBhAG4AYQBnAGUAcgAuAGQAbwA8AC8ATABBAF8AVQBSAEwAPgA8AC8ARABBAFQAQQA+ADwALwBXAFIATQBIAEUAQQBEAEUAUgA+AA==</cpix:PSSH>
          </cpix:DRMSystem>
          <!-- Common encryption (Widevine)-->
          <cpix:DRMSystem kid="12ea753c-23e7-bc02-4474-b2b976c43beb" systemId="edef8ba9-79d6-4ace-a3c8-27dcd51d21ed">
                <cpix:ContentProtectionData>qAUAAAEAAQCeB...A=</cpix:ContentProtectionData><!-- V2에 추가됨 -->
              <cpix:PSSH>AAAAVXBzc2gAAAAA7e+LqXnWSs6jyCfc1R0h7QAAADUIARIQEup1PCPnvAJEdLK5dsQ76xoMaW5rYWVudHdvcmtzIg1jcGl4LXRlc3QtY2lkKgJIRA==</cpix:PSSH>
          </cpix:DRMSystem>
      </cpix:DRMSystemList>
    </cpix:CPIX>