미디어 암호화

Derek Herman
Derek Herman
Joe Medley
Joe Medley

이 섹션에서는 데이터를 암호화하는 두 가지 전략을 다룹니다. 그리고 이를 FFmpeg 및 LSB와 함께 사용하는 방법에 대한 몇 가지 실제 예제 Shaka Packager 다룰 두 가지 암호화 전략은 Clear KeyGoogle Widevine과 같은 서비스를 사용하면 됩니다. 두 가지 전략 모두 권한 관리 (DRM) 기능을 사용하여 사용자가 미디어로 할 수 있는 작업을 제어합니다. 하지만 한 쪽은 다른 쪽보다 본질적으로 덜 안전합니다. 왜냐하면 이러한 이유로 DRM 서비스가 더 합리적일 수 있습니다.

웹의 기본 DRM 서비스는 Google Widevine, Microsoft PlayReady입니다. 및 Apple FairPlay에 대한 내용이 포함되어 있지만 이 도움말에서 모두 다루지는 않습니다. 하지만 모든 최신 브라우저를 타겟팅하는 경우 세 가지 DRM 서비스를 모두 사용할 수 있습니다.

변환 및 암호화는 다음 애플리케이션에서 수행됩니다.

키 암호화 지우기

먼저, 지우기 키가 무엇인지 잘 이해하고 있어야 합니다. 사용할 수 있습니다. 기존 DRM 서비스를 사용하고 싶지 않은 경우 미디어의 기본 암호화가 실행 가능한 옵션이므로 지우기 키를 사용합니다. 하지만 이러한 유형의 암호화는 동일한 수준의 암호화를 제공하지 보안을 강화하도록 설계되어 있습니다. 키-값 쌍이 다른 키로 암호화되지 않는 것을 볼 수 있습니다. 암호화 키를 암호화합니다. 또한 지우기 키는 키-값 쌍을 일반 텍스트로 저장하므로 미디어를 암호화하는 동안 그것을 복호화하는 것은 비밀이 아닙니다.

키 만들기

동일한 메서드를 사용하여 DASH 및 HLS의 키를 모두 만들 수 있습니다. 다음을 사용하여 수행 OpenSSL. 다음은 16개의 16진수 값으로 구성된 암호화 키를 만듭니다.

openssl rand -hex 16 > media.key
드림

IV 만들기

다음으로 초기화 벡터 (IV)를 생성할 수 있습니다.

openssl rand -hex 16
6143b5373a51cb46209cfed0d747da66
드림

지우기 키로 암호화

다음 예에서는 원시 키가 있는 Shaaka Packager를 사용합니다. 여기서 keyskey_ids는 Shaka Packager에 직접 제공됩니다. 다음 문서를 읽어 보세요. 더 많은 예시를 보여줍니다.

key 플래그에는 이전에 만든 media.key에 저장된 키를 사용합니다. 파일에서 참조됩니다. 그러나 명령줄에 입력할 때는 공백. key_id 플래그의 경우 media.id 값을 반복하거나 IV 값을 사용합니다. 생성됩니다.

packager \
  input=glocken.mp4,stream=audio,output=glockena.m4a \
  input=glocken.mp4,stream=video,output=glockenv.mp4 \
  --enable_fixed_key_encryption \
  --keys label=audio:key=INSERT_AUDIO_KEY_HERE:key_id=INSERT_AUDIO_KEY_ID_HERE,label=video:key=INSERT_VIDEO_KEY_HERE:key_id=INSERT_VIDEO_KEY_ID_HERE
드림

키 정보 파일 만들기

HLS에 대해 암호화하려면 키 파일 외에 키 정보 파일이 필요합니다. 가 키 정보 파일은 아래와 같은 형식의 텍스트 파일입니다. 또한 확장자 .keyinfo)로 변경합니다. 예를 들면 encrypt.keyinfo입니다.

key URI
key file path
private key

키 URI는 위에서 만든 media.key가 위치하는 위치입니다. 있습니다 키 파일 경로는 키를 기준으로 한 위치입니다. 정보 파일을 다운로드합니다. 마지막으로 비공개 키는 media.key의 콘텐츠입니다. 파일 자체 또는 이전에 만든 IV가 있습니다. 예를 들면 다음과 같습니다.

https://example.com/keys/media.key
/path/to/media.key
6143b5373a51cb46209cfed0d747da66

HLS 암호화

packager \
  'input=input.mp4,stream=video,segment_template=output$Number$.ts,playlist_name=video_playlist.m3u8' \
  'input=input.mp4,stream=audio,segment_template=output_audio$Number$.ts,playlist_name=audio_playlist.m3u8,hls_group_id=audio,hls_name=ENGLISH' \
  --hls_master_playlist_output="master_playlist.m3u8" \
  --hls_base_url="http://localhost:5000/"

이 명령어는 16자 또는 32자(영문 기준)의 키를 허용합니다.

ffmpeg -i myvideo.mov -c:v libx264 -c:a aac -hls_key_info_file encrypt.keyinfo myvideo.m3u8

Widevine 암호화

지금까지 Clear Key 암호화가 무엇이며 언제 사용해야 하는지 알아보았습니다. 그렇다면 보안 강화를 위해 언제 DRM 서비스를 사용해야 할까요? Widevine 또는 다른 서비스인 비밀번호는 미디어를 안전하게 암호화하고 복호화하는 데 사용됩니다. Widevine은 MPEG-DASH 및 HLS는 Google의 DRM입니다. Widevine은 Chrome 및 Firefox 웹에서 사용됩니다. 브라우저, Android MediaDRM, Android TV 및 기타 사용자 가전제품 Widevine이 콘텐츠를 복호화하는 암호화된 미디어 확장 프로그램 및 미디어 소스 확장 프로그램

Widevine으로 암호화

이 도움말의 대부분의 예에서는 Clear Key 암호화를 사용했습니다. 하지만 Widevine에서는 다음 옵션을 대체합니다.

--enable_fixed_key_encryption \
--enable_fixed_key_decryption \
--keys label=:key=INSERT_KEY_HERE:key_id=INSERT_KEY_ID_HERE

파일 이름과 --content-id 플래그는 예시에서 정확히 복사되어야 합니다. --content-id는 16입니다. 또는 32개의 임의의 16진수 숫자입니다. 자체 키 대신 여기에 제공된 키를 사용하세요. 샤카 읽기 Widevine 키 서버 사용에 대한 Packager 문서에서 더 많은 예시를 확인하세요.

  1. 오디오와 비디오를 Demux (분리)하고, 새 파일을 암호화하고, 미디어 프레젠테이션 설명 (MPD) 파일이며,

    packager \
      input=tmp_glocken.mp4,stream=video,output=glocken_video.mp4 \
      input=tmp_glocken.mp4,stream=audio,output=glocken_audio.m4a \
      --enable_widevine_encryption \
      --key_server_url "https://license.uat.widevine.com/cenc/getcontentkey/widevine_test" \
      --content_id "fd385d9f9a14bb09" \
      --signer "widevine_test" \
      --aes_signing_key "1ae8ccd0e7985cc0b6203a55855a1034afc252980e970ca90e5202689f947ab9" \
      --aes_signing_iv "d58ce954203b7c9a9a9d467f59839249"
    
  2. 오디오 및 동영상 스트림을 Remux (결합)합니다. 동영상을 사용하는 경우 이 작업이 필요하지 않을 수도 있습니다

    ffmpeg -i glocken_video.mp4 -i glocken_audio.m4a -c copy glocke.mp4
    
를 통해 개인정보처리방침을 정의할 수 있습니다.

미디어 전환 시퀀스

이 섹션에서는 원시 .mov 파일에서 다음 코드로 가져오는 데 필요한 명령어를 보여줍니다. DASH 또는 HLS를 위해 패키징된 암호화된 애셋. 공개 입찰의 소스 파일을 해상도에서 8Mbs의 비트 전송률로 변환하고 있음을 보여 줍니다. 1080p (1920x1080)입니다. 필요에 따라 이러한 값을 조정하세요.

DASH/WebM

  1. 파일 형식 및 코덱을 변환합니다.

    이 명령어의 경우 오디오 코덱으로 liborbis 또는 libopus를 사용할 수 있습니다.

    ffmpeg -i glocken.mov -c:v libvpx-vp9 -c:a libvorbis -b:v 8M -vf setsar=1:1 -f webm tmp_glocken.webm
    
  2. Clear Key 암호화 키를 만듭니다.

    openssl rand -hex 16 > media.key
    
  3. 오디오와 비디오를 Demux (분리)하고, 새 파일을 암호화하고, 미디어 프레젠테이션 설명 (MPD) 파일이며,

    packager \
      input=tmp_glocken.webm,stream=video,output=glocken_video.webm \
      input=tmp_glocken.webm,stream=audio,output=glocken_audio.webm \
      --enable_fixed_key_encryption \
      --enable_fixed_key_decryption \
      --keys label=:key=INSERT_KEY_HERE:key_id=INSERT_KEY_ID_HERE \
      --mpd_output glocken_webm_vod.mpd
    
  4. 오디오 및 동영상 스트림을 Remux (결합)합니다. 동영상을 사용하는 경우 이 작업이 필요하지 않을 수도 있습니다

    ffmpeg -i glocken_video.webm -i glocken_audio.webm -c copy glocken.webm
    

DASH/MP4

  1. 파일 형식, 동영상 코덱 및 비트 전송률을 변환합니다.

    ffmpeg -i glocken.mov -c:v libx264 -c:a aac -b:v 8M -strict -2 tmp_glocken.mp4
    
  2. Clear Key 암호화 키를 만듭니다.

    openssl rand -hex 16 > media.key
    
  3. 오디오와 비디오를 Demux (분리)하고, 새 파일을 암호화하고, 미디어 프레젠테이션 설명 (MPD) 파일이며,

    packager \
      input=tmp_glocken.mp4,stream=video,output=glocken_video.mp4 \
      input=tmp_glocken.mp4,stream=audio,output=glocken_audio.m4a \
      --enable_fixed_key_encryption \
      --enable_fixed_key_decryption \
      --keys label=:key=INSERT_KEY_HERE:key_id=INSERT_KEY_ID_HERE \
      --mpd_output glocken_mp4_vod.mpd
    
  4. 오디오 및 동영상 스트림을 Remux (결합)합니다. 동영상을 사용하는 경우 이 작업이 필요하지 않을 수도 있습니다

    ffmpeg -i glocken_video.mp4 -i glocken_audio.m4a -c copy glocken.mp4
    

HLS/MP4

HLS는 MP4만 지원하므로 먼저 MP4 컨테이너로 변환하고 지원되는 코덱에서 사용할 수 없습니다.

  1. 파일 형식, 동영상 코덱 및 비트 전송률을 변환합니다.

    ffmpeg -i glocken.mov -c:v libx264 -c:a aac -b:v 8M -strict -2 glocken.mp4
    
  2. Clear Key 암호화 키를 만듭니다.

    openssl rand -hex 16 > media.key
    
  3. 키 정보 파일 만들기

    packager \
      'input=glocken.mp4,stream=video,segment_template=output$Number$.ts,playlist_name=video_playlist.m3u8' \
      'input=glocken.mp4,stream=audio,segment_template=output_audio$Number$.ts,playlist_name=audio_playlist.m3u8,hls_group_id=audio,hls_name=ENGLISH' \
      --hls_master_playlist_output="master_playlist.m3u8" \
      --hls_base_url="http://localhost:5000/" \
      --enable_fixed_key_encryption \
      --enable_fixed_key_decryption \
      --keys label=:key=INSERT_KEY_HERE:key_id=INSERT_KEY_ID_HERE
    

아쉬운 내용이었습니다. 하지만 이제 미디어를 암호화하실 수 있기를 바랍니다. 안심하고 사용할 수 있습니다. 다음으로 YouTube에 미디어를 추가하는 방법을 확인할 수 있습니다.