Crittografia per contenuti multimediali

Derek Herman
Derek Herman
Joe Medley
Joe Medley

In questa sezione tratteremo due diverse strategie di crittografia i tuoi contenuti multimediali e alcuni esempi pratici su come utilizzarli con FFmpeg Shaka Packager. Le due strategie per la crittografia di cui parleremo sono Clear Key e utilizzando un servizio come Google Widevine. Entrambe le strategie sono una sorta di la gestione dei diritti (DRM) per controllare cosa possono fare gli utenti con i tuoi contenuti multimediali. Tuttavia, una è intrinsecamente meno sicura dell'altra, a causa del modo in cui le chiavi vengono passate autenticazione ed è per questo che un servizio DRM potrebbe avere più senso.

I servizi DRM principali per il web sono Google Widevine e Microsoft PlayReady e Apple FairPlay, ma in questo articolo non li tratteremo tutti. Tuttavia, se hai scelto come target tutti i browser moderni, utilizzare tutti e tre i servizi DRM.

La conversione e la crittografia vengono eseguite con queste applicazioni:

Cancella crittografia chiave

Innanzitutto, dovresti avere una buona comprensione di cosa sia Clear Key e cosa non lo sia prima utilizzandolo. Quando non vuoi utilizzare un servizio DRM esistente e ritieni che la crittografia di base dei tuoi contenuti multimediali è un'opzione valida, dovresti usare Clear Key. Ma tieni presente che questo tipo di crittografia non fornisce lo stesso livello sicurezza come l'utilizzo di uno dei servizi DRM. Questo perché la coppia chiave-valore non criptate in un'altra chiave, a differenza delle chiavi criptate generate da un di decriptazione archiviata su un server di licenza. Inoltre, Clear Key invia la coppia chiave-valore come testo normale. Quindi, mentre cripti il contenuto multimediale, la chiave non è un secret.

Crea una chiave

Puoi utilizzare lo stesso metodo per creare una chiave sia per DASH che per HLS. Esegui questa operazione utilizzando OpenSSL. Di seguito verrà creata una chiave di crittografia composta da 16 valori esadecimali.

openssl rand -hex 16 > media.key

Crea un IV

Ora possiamo generare un vettore di inizializzazione (IV).

openssl rand -hex 16
6143b5373a51cb46209cfed0d747da66

Cripta con Cancella chiave

L'esempio seguente utilizza Shaka Packager con chiavi non elaborate, dove keys e I key_ids vengono forniti direttamente a Shaka Packager. Leggi la documentazione per altri esempi.

Per il flag key, utilizza la chiave creata in precedenza, che è archiviata in media.key . Tuttavia, quando lo inserisci dalla riga di comando, assicurati di aver rimosso uno spazio vuoto. Per il flag key_id, ripeti il valore media.id o utilizza il valore IV generati sopra.

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

Crea un file di informazioni chiave

Per criptare gli oggetti HLS, hai bisogno di un file con le informazioni sulle chiavi oltre a un file della chiave. R il file di informazioni chiave è un file di testo nel seguente formato. Dovrebbe avere estensione .keyinfo. Ad esempio: encrypt.keyinfo.

key URI
key file path
private key

L'URI della chiave è il punto in cui verrà inserito media.key (creato sopra) situata sul tuo server. Il percorso del file della chiave è la sua posizione rispetto alla chiave. delle informazioni. Infine, la chiave privata è il contenuto dell'elemento media.key o l'IV che hai creato prima. Ad esempio:

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

Crittografia per 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/"

Questo comando accetta una chiave di 16 o 32 caratteri.

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

Crittografia Widevine

Ora sai cos'è la crittografia Clear Key e quando utilizzarla. Ma quando è consigliabile utilizzare un servizio DRM per una maggiore sicurezza? È qui che Widevine o un altro servizio verranno utilizzate per criptare e decriptare in modo sicuro i tuoi contenuti multimediali. Widevine supporta MPEG-DASH e HLS ed è un DRM di Google. Widevine è utilizzato da Google Chrome e Firefox sul web browser, Android MediaDRM, Android TV e altri dispositivi elettronici di consumo che utilizzano Encrypted Media Extensions e Media Source Extensions, dove Widevine decripta i contenuti.

Cripta con Widevine

La maggior parte degli esempi in questo articolo utilizzava la crittografia Clear Key. Tuttavia, per Widevine le opzioni seguenti verranno sostituite.

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

Tutto ciò che è presente nel comando demultiplexer (demux), tranne il nome dei file e Il flag --content-id deve essere copiato esattamente dall'esempio. --content-id compie 16 anni o 32 cifre esadecimali casuali. Utilizza le chiavi fornite qui anziché le tue. Leggi lo Shaka Documentazione dello strumento di creazione pacchetti sull'utilizzo di Widevine Key Server per altri esempi.

  1. Demux (separa) audio e video, cripta i nuovi file e come output file MPD (Media Presentation Description).

    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 (combinare) gli stream audio e video. Se è in uso un video potrebbe non essere necessario eseguire questa operazione.

    ffmpeg -i glocken_video.mp4 -i glocken_audio.m4a -c copy glocke.mp4
    
di Gemini Advanced.

Sequenza di conversione multimediale

Questa sezione mostra i comandi in ordine necessari per ottenere da un file .mov non elaborato a asset criptati in pacchetti per DASH o HLS. Per il gusto di avere un obiettivo Stiamo convertendo un file sorgente a una velocità in bit di 8 Mbs e a una risoluzione di 1080p (1920 x 1080). Modifica questi valori in base alle tue esigenze.

DASH/WebM

  1. Converti il tipo di file e il codec.

    Per questo comando puoi utilizzare liborbis o libopus come codec audio.

    ffmpeg -i glocken.mov -c:v libvpx-vp9 -c:a libvorbis -b:v 8M -vf setsar=1:1 -f webm tmp_glocken.webm
    
  2. Crea una chiave di crittografia Clear Key.

    openssl rand -hex 16 > media.key
    
  3. Demux (separa) audio e video, cripta i nuovi file e come output file MPD (Media Presentation Description).

    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 (combinare) gli stream audio e video. Se è in uso un video potrebbe non essere necessario eseguire questa operazione.

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

DASH/MP4

  1. Converti il tipo di file, il codec video e la velocità in bit.

    ffmpeg -i glocken.mov -c:v libx264 -c:a aac -b:v 8M -strict -2 tmp_glocken.mp4
    
  2. Crea una chiave di crittografia Clear Key.

    openssl rand -hex 16 > media.key
    
  3. Demux (separa) audio e video, cripta i nuovi file e come output file MPD (Media Presentation Description).

    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 (combinare) gli stream audio e video. Se è in uso un video potrebbe non essere necessario eseguire questa operazione.

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

HLS/MP4

HLS supporta solo MP4, quindi prima dovrai convertirlo nel container MP4 e codec supportati.

  1. Converti il tipo di file, il codec video e la velocità in bit.

    ffmpeg -i glocken.mov -c:v libx264 -c:a aac -b:v 8M -strict -2 glocken.mp4
    
  2. Crea una chiave di crittografia Clear Key.

    openssl rand -hex 16 > media.key
    
  3. Crea un file di informazioni chiave

    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
    

I dati erano tanti, ma spero che ora tu sia in grado di criptare i tuoi contenuti multimediali in tutta sicurezza. Ora ti mostreremo come aggiungere contenuti multimediali alla nel tuo sito.