最終更新日: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リクエストプロセスを理解していること
APIリクエストでAES暗号鍵を安全に送信するため、RSA暗号化が必要です。これには鍵ペアの生成と秘密鍵のシステム登録が含まれます。
以下のコマンドでRSA秘密鍵と公開鍵を生成:
# 秘密鍵生成(2048ビット)
openssl genrsa -out private.key 2048
# 公開鍵の抽出
openssl rsa -in private.key -pubout -out pub.key
生成した鍵ファイルは安全に保管してください。公開鍵はAES鍵の暗号化に、秘密鍵はバックエンドでの復号に使用されます。
暗号化リクエスト作成時、特殊な暗号化設定を含むfops(ファイル操作パラメータ)を構成:
<op>/<Format>
/hlsKey/<hlsKey>
/hlsKeyUrl/<hlsKeyUrl>
|saveas/<Urlsafe_Base64_Encode(bucket:filekey)>
hlsKeyはAPIリクエスト送信前にRSA暗号化する必要があるAES暗号鍵です:
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は復号鍵の取得先を指定します。以下の2つの方法から選択:
方法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
パラメータ準備完了後、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タグが含まれ、暗号化状態と鍵取得先が明記されます。