HLS AES Encryption

最終更新日:2025-05-22 16:54:58

HLS AES暗号化は、高度暗号化標準(AES-128)アルゴリズムを使用して動画セグメントを暗号化し、ストリーミング中のコンテンツを保護します。この対称鍵暗号方式では、サーバー側での暗号化と視聴者プレイヤー側での復号に同一の鍵が使用されます。

暗号化が有効なHLSプレイリスト(m3u8ファイル)には、コンテンツ復号に必要な情報を提供するEXT-X-KEYタグが含まれます:

#EXT-X-KEY:METHOD=AES-128,URI="https://keypathURI/hls_aes.key",IV=0x00000000000000000000000000000000

再生時、プレイヤーはまずプレイリストで指定されたURIから復号鍵を取得した後、動画セグメントのデコードを開始します。

実装要件

HLS AES暗号化を実装する前に以下を確認してください:
• オリジナル動画がオブジェクトストレージバケットにアップロード済みであること

• アカウントでメディア処理機能が有効化されていること

メディア処理APIリクエストプロセスを理解していること

ステップ1: RSA鍵の生成と設定

APIリクエストでAES暗号鍵を安全に送信するため、RSA暗号化が必要です。これには鍵ペアの生成と秘密鍵のシステム登録が含まれます。

RSA鍵ペアの生成

以下のコマンドでRSA秘密鍵と公開鍵を生成:

# 秘密鍵生成(2048ビット)
openssl genrsa -out private.key 2048

# 公開鍵の抽出
openssl rsa -in private.key -pubout -out pub.key

生成した鍵ファイルは安全に保管してください。公開鍵はAES鍵の暗号化に、秘密鍵はバックエンドでの復号に使用されます。

RSA秘密鍵の登録

  1. 秘密鍵ファイルをBase64形式でエンコード
  2. エンコード済み鍵をカスタマーサポートチームに提供
  3. 詳細手順はRSA秘密鍵設定例を参照

ステップ2: 暗号化パラメータの準備

暗号化リクエスト作成時、特殊な暗号化設定を含むfops(ファイル操作パラメータ)を構成:

<op>/<Format>
  /hlsKey/<hlsKey>
  /hlsKeyUrl/<hlsKeyUrl>
  |saveas/<Urlsafe_Base64_Encode(bucket:filekey)>

hlsKeyパラメータの生成

hlsKeyはAPIリクエスト送信前にRSA暗号化する必要があるAES暗号鍵です:

  1. 16バイト(128ビット)のランダム値をAES鍵として生成
  2. RSA公開鍵とOAEPパディングで暗号化
  3. URLセーフなBase64エンコードを実施

AES鍵値01234566543210abcdef888888abcdefの例:

# ランダム16バイト鍵生成(必要に応じて)
openssl rand -hex 16

# RSA-OAEP暗号化とAPI送信用エンコード
echo -n "01234566543210abcdef888888abcdef" | openssl rsautl -encrypt -pubin -inkey pub.key -oaep | openssl base64 -A | tr "+/" "-_"

出力された文字列が暗号化済みhlsKey値です。

hlsKeyUrlパラメータの設定

hlsKeyUrlは復号鍵の取得先を指定します。以下の2つの方法から選択:

  1. 独自鍵サーバーを使用:鍵管理システムのURLを提供
  2. オブジェクトストレージを使用:鍵ファイルをバケットにアップロードしURLを指定

方法2の場合の鍵ファイル作成:

# 16進鍵からバイナリファイル生成
echo -ne "\x01\x23\x45\x66\x54\x32\x10\xab\xcd\xef\x88\x88\x88\xab\xcd\xef" > key.hex

バケットにアップロード後、アクセス可能なURLを指定例:

https://bucketname.s3-cn-north-1.wcsapi.com/key.hex

ステップ3: 暗号化プロセスの実行

パラメータ準備完了後、APIリクエストを送信して動画暗号化を実行します。

APIリクエスト例

vod-wcs-test001バケット内のtest_hls.m3u8ファイルを暗号化:

curl -v -X POST \
  -d "bucket=Urlsafe_Base64_Encode(vod-wcs-test001)&key=Urlsafe_Base64_Encode(test_hls.m3u8)&fops=Urlsafe_Base64_Encode(avthumb/m3u8/hlsKey/encrypted hlsKey/hlsKeyUrl/https://bucketname.s3-cn-north-1.wcsapi.com/key.hex|saveas/Urlsafe_Base64_Encode(vod-wcs-test001:hls_aes_.m3u8))&force=1&separate=1" \
  -H "Authorization: AccessKey EncodeSign" \
  --url "http://mgrDomain/fops"

トランスコード成功後、暗号化済み動画が指定バケットに保存されます。生成されたHLSマニフェスト(m3u8ファイル)にはEXT-X-KEYタグが含まれ、暗号化状態と鍵取得先が明記されます。

セキュリティに関する注意事項

  • RSA秘密鍵は常に安全な場所に保管してください
  • 鍵URLへの不正アクセス防止のためアクセス制御を実装してください
  • 高セキュリティ環境ではトークンベース認証システムの導入を推奨します