보안 - WECANDEO DRM 연동방법

DRM(디지털저작권관리)이란?
Digital Rights Management의 약자로 디지털 콘텐츠의 무단 사용을 막아, 디지털콘텐츠제공자의 권리와 이익을 보호해주는 기술과 서비스를 말하며, DRM서비스를 통해 불법 복제와 변조를 방지하는 기술 등을이 제공됩니다.

DRM이 필요한가요?
콘텐츠를 게시하거나 배포하는 개인이나 기업은 콘텐츠 보호를 위해 DRM의 활용을 검토해 볼 필요가 있습니다. 콘텐츠를 보호하고 사용을 관리한다면, 무단 사용으로 인한 피해를 입거나 가치를 훼손되지 않기 때문입니다.

WECANDEO에서 제공되는 DRM 솔루션은 Google WIDEVINE 및 Microsoft PlayReady 제품으로
DRM과 Player를 이용할 수 있도록 인코딩 과정에서 DRM 패킹을 손쉽게 실행하도록 구성되어 있어 간단한 연동만으로 콘텐츠를 보호 할 수 있습니다.

DRM 서비스 프로세스

876

※ HMAC(Keyed-hash Message Authentication Code)

해시 함수 기반의 메시지 인증코드라는 의미이며, 송신자와 수신자 간의 메시지 정보가 변경되거나 올바른 송신자로부터 발송되었는지의 여부를 지정한 임의의 메시지 길이와 송/수신자가 공유하는 Secret key를 통해 검증하는 인증방식이다.

DRM 서비스 이용방법

1. HMAC 발급

871

※ 계정관리> 부가서비스> Wecandeo DRM 메뉴 내 “발급하기“를 통해 DRM 연동 Gid 및 Secret key를 발급 받습니다.

2. HMAC 삽입

고객사 서비스 내부에 HMAC 인증코드 삽입

  • 암호화된 영상을 특정 서비스 내에서만 재생하기 위해 Wecandeo 인증서버를 통한 검증 연동 로직을 아래와 같이 코드가 서비스 내부에 삽입되어야 합니다.
  • 서비스 내에서 Wecandeo 영상이 재생되는 페이지 랜딩 전 HMAC을 생성하여 Wecandeo play url에 querystring으로포함시켜주시기 바랍니다.
  • 현재 지원되는 language는 php, java 두가지가 지원되며, 이외 language에 대해서는 아래 지원 페이지를 통해 확인하실 수 있습니다.
  • HMAC 생성 언어별 샘플코드 페이지 :
    https://www.jokecamp.com/blog/examples-of-creating-base64-hashes-using-hmac-sha256-in-different-languages/
  • Java의 경우 HMAC 생성하는 jar를 포함하여 제공드리며, 서비스 프로젝트 lib에 추가하시고 생성코드를 삽입하시기 바랍니다.

❗️

주의

Gid와 Secret key는 외부에 노출되지 않게 주의하시기 바랍니다.

[PHP]

/*hmac 인증키를 생성하는 함수*/
function get_hmac($gid, $secret_key){
                              date_default_timezone_set(“Asia/Seoul”);
                              $message = $gid.”.”.date(“YmdHis”);
                              $hmac= hash_hmac(“sha256”, $message, $secret_key, true);
                              $encode_hmac= base64_encode($hmac);
                              $encode_hmac= base64_encode(“SCENAPPSM ” . $message . “:” . $encode_hmac);
                              return $encode_hmac;
}
$gid= isset($_REQUEST[‘gid’])?$_REQUEST[‘gid’]:””;
$secret_key= isset($_REQUEST[‘secret_key’])?$_REQUEST[‘secret_key’]:””;
$origin_play_url= isset($_REQUEST[‘origin_play_url’])?$_REQUEST[‘origin_play_url’]:””;
$play_url= “”;

if(!empty($gid) && !empty($secret_key) && !empty($origin_play_url)){
                              //gid: 위캔디오 그룹 아이디 일련번호
                              //secret_key: 위캔디오 CMS에서 발급받은 Widevine drm SecretKey(HMAC)
                              $hmac_result= get_hmac($gid, $secret_key);
                              $play_url= $origin_play_url.”&hmac=”.$hmac_result;
}
웹페이지 삽입 태그(Wecandeo Embed code)
<iframe width=”640″ height=”360″ src=”<?=$play_url?>” frameborder=”0″ allowfullscreen></iframe>

[JAVA]

  1. JSP Scriptlet
<%
String gid= request.getParameter(“gid”)==null?””:request.getParameter(“gid”);
String secretKey= request.getParameter(“secret_key”)==null?””:request.getParameter(“secret_key”);
String originPlayUrl= request.getParameter(“origin_play_url”)==null?””:request.getParameter(“origin_play_url”);
String playUrl= “”;
String hmac= “”;
if(!””.equals(gid) && !””.equals(secretKey) && !””.equals(originPlayUrl)){
                                    hmac= HMAC.encode(gid, secretKey);
                                    playUrl= originPlayUrl+”&hmac=”+hmac;
}
%>
  1. Java Springframework RequestMapping
@RequestMapping(“/wcd_drm_video”)
public String wcd_drm_video(Model model, HttpServletRequestreq) throws Exception{
                                   String gid= req.getParameter(“gid”)==null?””:req.getParameter(“gid”);
                                   String secretKey= req.getParameter(“secret_key”)==null?””:req.getParameter(“secret_key”);
                                   String originPlayUrl= req.getParameter(“origin_play_url”)==null?””:req.getParameter(“origin_play_url”);
                                   String playUrl= “”;
                                   String hmac= “”;
                                   if(!””.equals(gid) && !””.equals(secretKey) && !””.equals(originPlayUrl)){
                                                                        hmac= HMAC.encode(gid, secretKey);
                                                                        playUrl= originPlayUrl+”&hmac=”+hmac;
                                                                        model.addAttribute(“gid”, gid);
                                                                        model.addAttribute(“secretKey”, secretKey);
                                                                        model.addAttribute(“playUrl”, playUrl);
                                                                        model.addAttribute(“originPlayUrl”, originPlayUrl);
                                   }
                                  model.addAttribute(“hmac”, hmac);
                                  return “wcd_drm_video”;
}

웹페이지 삽입 태그(Wecandeo Embed code)

<iframe width=”640″ height=”360″ src=”${playUrl}” frameborder=”0″ allowfullscreen></iframe> <!–jstl 사용–>
<iframe width=”640″ height=”360″ src=”<%=playUrl%>” frameborder=”0″ allowfullscreen></iframe> <!–sciptlet 사용–>
}

3. WECANDEO DRM 패키지생성

1033

※ 배포> 배포패키지 메뉴 내 ’새패키지 만들기’ 시 해당 패키지의 부가 기능 설정을 “Wecandeo DRM”으로 설정 후 패키지 생성 시 해당 패키지로 업로드되는 영상들 모두 DRM 설정이 적용됩니다.

4. DRM 동영상 업로드

990

※ Wecandeo DRM 배포패키지 생성 후 해당 패키지를 선택하여 동영상 업로드를 하시면 됩니다.

업로드 시 DRM 패키지 선택을 원하지 않으실 경우 미 선택 후 업로드 하셔도 무방하며, 이후 DRM 패키지에서 영상 추가하기를 통해서 업로드 하셔도 DRM 서비스 이용이 가능합니다.

Wecandeo DRM 이용 참고사항

833

※ DRM 패키지 내 ‘동영상 추가하기’ 시 DRM 패키지에 등록된 영상들끼리만 추가하기가 가능합니다.

DRM 패키지(영상) → DRM 패키지 = O
DRM 패키지(영상) → 일반패키지 = O
일반패키지 → 일반패키지 = O
일반패키지(영상) → DRM 패키지 = X

※ DRM 패키지는 “플레이리스트“ 기능을 이용하실 수 없습니다.

※ 동영상 업로드 시 DRM 패키지 영상은 일반 인코딩 작업 이후 DRM 패키징 작업이 추가로 진행됩니다.

※ 플레이어 내 기능 중 “공유” 기능은 비활성화하여 플레이어를 생성 후 이용 부탁드리며, DRM 영상의 경우 타채널에서재생이 되지 않기 때문에 해당 기능 이용은 제한됩니다.

Wecandeo DRM 지원 범위

716

※ 지원 여부에 표기 되어 있는 O / X (지원예정) 이외의 OS 및 Browser에서는 DRM 서비스를 지원하지 않습니다.

※ Mobile(Android)의 경우 5.0 이상 버전에서만 지원이 가능하며, 이하 버전에서는 서비스 이용이 불가합니다.

※ Mobile(iOS)의 경우 Mobile Web에서도 DRM 서비스가 가능합니다. 단, User는 애플 앱스토어에서 WECANDEO PLAYER를 다운받은 후 서비스를 이용하실 수 있습니다.

※ Wecandeo DRM은 HTML5 플레이어(New 플레이어)에서만 서비스 이용이 가능합니다.