Szyfrowanie multimediów

Derek Herman
Derek Herman
Joe Medley
Joe Medley

W tej sekcji omówimy dwie strategie szyfrowania: Twoich mediów i kilka praktycznych przykładów, jak z nich korzystać w FFmpeg i Pakowanie Shaka. Dwie strategie szyfrowania, które omówimy, to Clear Key i korzystając z takiej usługi jak Google Widevine. Obie strategie stanowią zarządzanie prawami (DRM), które pozwalają kontrolować, co użytkownicy mogą robić z Twoimi multimediami. Pamiętaj jednak: jeden z nich jest mniej bezpieczny od drugiego ze względu na sposób przekazywania kluczy uwierzytelnianie i dlatego usługa DRM może okazać się bardziej przydatna.

Podstawowe usługi DRM w internecie to Google Widevine i Microsoft PlayReady. oraz Apple FairPlay, ale nie omówimy ich wszystkich w tym artykule. Jeśli jednak kierujesz kampanię na wszystkie nowoczesne przeglądarki, korzystania ze wszystkich 3 usług DRM.

Konwersja i szyfrowanie są wykonywane za pomocą tych aplikacji:

Wyczyść szyfrowanie klucza

Najpierw dobrze zastanów się, czym jest funkcja Clear Key. za jego pomocą. Gdy nie chcesz korzystać z istniejącej usługi DRM podstawowego szyfrowania multimediów, należy użyć klucza Clear Key. Ale: Pamiętaj, że ten typ szyfrowania nie zapewnia jak za pomocą jednej z usług DRM. Dzieje się tak, ponieważ para klucz-wartość jest niezaszyfrowane za pomocą innego klucza (w przeciwieństwie do zaszyfrowanych kluczy generowanych przez kluczami odszyfrowywania przechowywanych na serwerze licencji. Dodatkowo przycisk Clear Key wysyła pary klucz-wartość jako zwykły tekst. Jeśli więc szyfrujesz multimedia, klucz do odszyfrowywanie. To nie jest tajemnica.

Utwórz klucz

Aby utworzyć klucz na potrzeby zarówno DASH, jak i HLS, możesz użyć tej samej metody. Zrób to za pomocą OpenSSL. W ten sposób utworzysz klucz szyfrowania składający się z 16 wartości szesnastkowych.

openssl rand -hex 16 > media.key

Tworzenie kroplówki

Następnie możemy wygenerować wektor inicjujący (IV).

openssl rand -hex 16
6143b5373a51cb46209cfed0d747da66

Zaszyfruj z użyciem klucza czyszczenia

W poniższym przykładzie użyto narzędzia Shaka Packager z nieprzetworzonymi kluczami, gdzie keys i Dane key_ids są przekazywane bezpośrednio do narzędzia Shaka Packager. Przeczytaj dokumentację więcej przykładów.

W przypadku flagi key użyj utworzonego wcześniej klucza, który jest przechowywany w media.key . Jednak wprowadzając go w wierszu poleceń, pamiętaj, aby usunąć jej zawartość odstępu. W przypadku flagi key_id powtórz wartość media.id lub użyj wartości IV. wygenerowane powyżej.

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

Tworzenie pliku z kluczowymi informacjami

Do szyfrowania na potrzeby HLS potrzebujesz oprócz pliku klucza plik z informacjami o kluczu. O plik z informacjami o kluczach jest plikiem tekstowym w formacie opisanym poniżej. Powinna mieć parametr rozszerzenie .keyinfo. Na przykład: encrypt.keyinfo.

key URI
key file path
private key

Identyfikator URI klucza to miejsce, w którym znajduje się obiekt media.key (utworzony powyżej). na Twoim serwerze. Ścieżka pliku klucza to jego lokalizacja względem klucza pliku informacyjnego. Kluczem prywatnym jest zawartość klucza media.key lub utworzony wcześniej plik IV. Na przykład:

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

Szyfrowanie na potrzeby 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/"

To polecenie obsługuje klucz o długości 16 lub 32 znaków.

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

Szyfrowanie Widevine

Teraz już wiesz, czym jest szyfrowanie za pomocą klucza czyszczenia i kiedy go używać. Kiedy jednak warto korzystać z usługi DRM, by zwiększyć bezpieczeństwo? Tutaj Widevine lub inna usługa będzie bezpiecznie szyfrowany i odszyfrowany multimedia. Widevine obsługuje pliki MPEG-DASH i HLS, to DRM od Google. Widevine używa przeglądarki Google Chrome i Firefox przeglądarek, Android MediaDRM, Android TV i innej elektroniki użytkowej, która Encrypted Media Extensions and Media Source Extensions, gdzie Widevine odszyfrowuje treści.

Szyfrowanie za pomocą Widevine

W większości przykładów w tym artykule użyto szyfrowania z czystym kluczem. Jednak w przypadku Widevine będzie chciał zastąpić

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

Wszystkie elementy w poleceniu demultiplekser (demux) oprócz nazw plików i Flaga --content-id powinna być skopiowana dokładnie z przykładu. --content-id ma 16 lat lub 32 losowe cyfry szesnastkowe. Użyj podanych tutaj kluczy zamiast własnych. Przeczytaj Shaka Dokumentacja programu pakującego na temat korzystania z serwera kluczy Widevine zawiera więcej przykładów.

  1. Demuksuj (rozdziel) dźwięk i obraz, zaszyfruj nowe pliki i wygeneruj plik z opisem prezentacji multimedialnej (MediaPresentation description, 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. Remusuj (łącz) strumienie audio i wideo. Jeśli używasz filmu może nie być konieczne wykonanie tej czynności.

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

Sekwencja konwersji multimediów

W tej sekcji wyświetlane są polecenia w kolejności potrzebne do przejścia z nieprzetworzonego pliku .mov do zaszyfrowanych zasobów w pakiecie na potrzeby DASH lub HLS. Aby osiągnąć cel konwertujemy plik źródłowy do 8 MB w rozdzielczości 1080p (1920 x 1080). Dostosuj te wartości do swoich potrzeb.

DASH/WebM

  1. Przekonwertuj typ pliku i kodek.

    W tym poleceniu możesz użyć kodeka audio liborbis lub 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. Utwórz klucz szyfrowania Clear Key.

    openssl rand -hex 16 > media.key
    
  3. Demuksuj (rozdziel) dźwięk i obraz, zaszyfruj nowe pliki i wygeneruj plik z opisem prezentacji multimedialnej (MediaPresentation description, 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. Remusuj (łącz) strumienie audio i wideo. Jeśli używasz filmu może nie być konieczne wykonanie tej czynności.

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

DASH/MP4

  1. Skonwertuj typ pliku, kodek wideo i szybkość transmisji bitów.

    ffmpeg -i glocken.mov -c:v libx264 -c:a aac -b:v 8M -strict -2 tmp_glocken.mp4
    
  2. Utwórz klucz szyfrowania Clear Key.

    openssl rand -hex 16 > media.key
    
  3. Demuksuj (rozdziel) dźwięk i obraz, zaszyfruj nowe pliki i wygeneruj plik z opisem prezentacji multimedialnej (MediaPresentation description, 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. Remusuj (łącz) strumienie audio i wideo. Jeśli używasz filmu może nie być konieczne wykonanie tej czynności.

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

HLS/MP4

HLS obsługuje tylko MP4, więc najpierw musisz przekonwertować go na kontener MP4. obsługiwanych kodeków.

  1. Skonwertuj typ pliku, kodek wideo i szybkość transmisji bitów.

    ffmpeg -i glocken.mov -c:v libx264 -c:a aac -b:v 8M -strict -2 glocken.mp4
    
  2. Utwórz klucz szyfrowania Clear Key.

    openssl rand -hex 16 > media.key
    
  3. Tworzenie pliku z kluczowymi informacjami

    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
    

Trochę to zajęło, ale mam nadzieję, że teraz uda Ci się zaszyfrować multimedia pewni siebie. Następnie pokażemy Ci, jak dodać multimedia do w Twojej witrynie.