メディア暗号化

Derek Herman
Derek Herman
Joe Medley
Joe Medley

このセクションでは、データを暗号化するための 2 つの異なる戦略を FFmpeg や FFmpeg の使用法に関する実用的な例 Shaka Packager。これから説明する暗号化の 2 つの戦略は、クリア鍵と、 Google Widevine などのサービスを使用する。どちらの戦略もデジタル 著作権管理(DRM)を使用して、ユーザーがメディアに対して行える操作を制御します。ただし、 鍵が暗号化される仕組み上、一方は他方よりも本質的に安全性が劣る それこそが、DRM サービスが合理的といえる理由です。

ウェブ向けの主な DRM サービスは Google WidevineMicrosoft PlayReady です。 と Apple FairPlay ですが、この記事ではそのすべてについては説明しません。 最新のブラウザをすべてターゲットにすれば 使用する必要があります

変換と暗号化は、次のアプリケーションで行われます。

鍵の暗号化をクリア

まず、Clear Key がどのようなもので、 できます。既存の DRM サービスを使用したくないが、 基本的な暗号化が有効なオプションである場合は、Clear Key を使用します。ただし、 ただし、このタイプの暗号化では、Google と同じレベルの暗号化は セキュリティで保護します。これは Key-Value ペアが 別の鍵で暗号化されない(別の鍵で暗号化されない) 暗号鍵を復号化できます。さらに、Clear Key は 書式なしテキストとして格納されるため、メディアを暗号化している間は、 シークレットではありません。

キーを作成

同じ方法で DASH と HLS の両方のキーを作成できます。これを行うには、 OpenSSL。以下では、16 個の 16 進数値からなる暗号鍵を作成します。

openssl rand -hex 16 > media.key

IV を作成する

次に、初期化ベクトル(IV)を生成します。

openssl rand -hex 16
6143b5373a51cb46209cfed0d747da66

クリアな鍵で暗号化する

次の例では、未加工の鍵を持つ Shaka 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 暗号化

ここまで、クリアキー暗号化とは何か、どのような場合に使用すべきかについて学習しました。しかし、セキュリティを強化するために DRM サービスを使用するのは、どのような場合でしょうか?これは Widevine(別のサービス)の を使用してメディアを安全に暗号化および復号できます。Widevine は MPEG-DASH と HLS であり、Google の DRM です。Widevine は Google Chrome と Firefox のウェブで使用されている ブラウザ、Android MediaDRM、Android TV、その他の家庭用電化製品デバイスで Encrypted Media Extensions と Media Source Extensions(Widevine がコンテンツを復号する)

Widevine で暗号化する

この記事のほとんどの例では、クリアキー暗号化を使用しています。ただし Widevine の場合は 次のオプションを置き換える必要があります。

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

demuxer(demultiplexer)コマンドに含まれる --content-id フラグは、この例から正確にコピーする必要があります。--content-id は 16 です 32 桁のランダムな 16 進数で指定します。独自の鍵ではなく、ここで提供された鍵を使用します。シャカを読む その他の例については、Widevine Key Server の使用に関する 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. 音声ストリームと動画ストリームを再多重化(結合)します。動画を使用する場合 使用する必要がない場合もあります。

    ffmpeg -i glocken_video.mp4 -i glocken_audio.m4a -c copy glocke.mp4
    
で確認できます。

メディア コンバージョン シーケンス

このセクションでは、未加工の .mov ファイルを取得するために必要なコマンドを順番に説明します。 暗号化アセットを処理できます目標を達成するため ソースファイルを解像度 8Mbs のビットレートに変換します。 1080p(1920 x 1080)これらの値は、必要に応じて調整してください。

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. クリア鍵暗号鍵を作成します。

    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. 音声ストリームと動画ストリームを再多重化(結合)します。動画を使用する場合 使用する必要がない場合もあります。

    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. クリア鍵暗号鍵を作成します。

    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. 音声ストリームと動画ストリームを再多重化(結合)します。動画を使用する場合 使用する必要がない場合もあります。

    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. クリア鍵暗号鍵を作成します。

    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
    

説明が大変でしたが 今度はメディアを暗号化して 実現できます。次に、メディアを追加する方法について説明します。 できます。