📸
HLS+AESってなあに
【初心者向け】HLS(HTTP Live Streaming)ってなあに シリーズ。
暗号化なしだと、誰でもm3u8ファイルをダウンロードして再生できる状態になってしまいます。
セグメントファイルをAES暗号(共通鍵暗号)することで、フリーダウンロード動画化は回避することができます。
(完璧ではない)
こんな感じ
-
m3u8ファイル取得
- .m3u8 ファイルを コンテンツ配信サーバー から取得
- .m3u8 ファイルには、.tsファイル のプレイリストや、暗号化キー(鍵)を取得するためのURL(EXT-X-KEY)の記載がある
.m3u8ファイル#EXTM3U #EXT-X-VERSION:3 #EXT-X-TARGETDURATION:13 #EXT-X-MEDIA-SEQUENCE:0 #EXT-X-KEY:METHOD=AES-128,URI="https://kagikagi.net/key.m3u8key" // 暗号化キー取得用URL // 以下セグメントファイルのプレイリスト #EXTINF:12.387, media_0.ts #EXTINF:2.653, media_1.ts #EXT-X-ENDLIST
-
暗号化キーをリクエスト
- EXT-X-KEY に指定された URI にアクセスして暗号化キーを取得
- 鍵配信サーバーは、ここで「ユーザー認証」や「トークンチェック」などを実施し、正当なリクエストにのみ鍵を返す
-
.tsファイル取得
- .m3u8ファイルのプレイリストに従って、 .ts セグメント(暗号化された動画データ)を コンテンツ配信サーバー から順次取得
-
復号して再生
- 取得した暗号化キーを使って、.ts ファイルを復号し、動画として再生
ポイント
- 暗号化キーを誰にでも渡さない
- ユーザー認証して、再生権限がある場合のみ暗号化キーを返すようにする
- 暗号化キーは大切に
- 複数動画がある場合、それぞれ別の暗号化キーにすることで、1つの動画の暗号化キーが漏洩した時のセキュリティリスクを減らす
- 暗号化キーを定期的に変更する!
- 暗号化キーはキャッシュさせない!
- 署名付きURLの活用
- 暗号化キー取得用URLや.m3u8ファイル/.tsファイルのURLを署名付きURLにすることで、第三者による使い回しを防止
注意
手軽に実装できて、簡単にダウンロードされることを防ぐ事ができるのですが、、完璧ではないです。
結局、ブラウザで暗号化キーを取得し、復号しているので、、、検証モードで暗号化キーも見えてしまうし、.m3u8ファイル/.tsファイルをダウンロードできるので、、完璧に無料配布防止にはなりません。
更に対策するには、DRM導入の検討が必要です。(あんまりわからないけど、より強固なはず)
まとめ
- 違法ダウンロードはやめてほしい
Discussion