📸

HLS+AESってなあに

に公開

【初心者向け】HLS(HTTP Live Streaming)ってなあに シリーズ。

暗号化なしだと、誰でもm3u8ファイルをダウンロードして再生できる状態になってしまいます。
セグメントファイルをAES暗号(共通鍵暗号)することで、フリーダウンロード動画化は回避することができます。
(完璧ではない)

こんな感じ

  1. 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
    
  2. 暗号化キーをリクエスト

    • EXT-X-KEY に指定された URI にアクセスして暗号化キーを取得
    • 鍵配信サーバーは、ここで「ユーザー認証」や「トークンチェック」などを実施し、正当なリクエストにのみ鍵を返す
  3. .tsファイル取得

    • .m3u8ファイルのプレイリストに従って、 .ts セグメント(暗号化された動画データ)を コンテンツ配信サーバー から順次取得
  4. 復号して再生

    • 取得した暗号化キーを使って、.ts ファイルを復号し、動画として再生

ポイント

  • 暗号化キーを誰にでも渡さない
    • ユーザー認証して、再生権限がある場合のみ暗号化キーを返すようにする
  • 暗号化キーは大切に
    • 複数動画がある場合、それぞれ別の暗号化キーにすることで、1つの動画の暗号化キーが漏洩した時のセキュリティリスクを減らす
    • 暗号化キーを定期的に変更する!
    • 暗号化キーはキャッシュさせない!
  • 署名付きURLの活用
    • 暗号化キー取得用URLや.m3u8ファイル/.tsファイルのURLを署名付きURLにすることで、第三者による使い回しを防止

注意

手軽に実装できて、簡単にダウンロードされることを防ぐ事ができるのですが、、完璧ではないです。
結局、ブラウザで暗号化キーを取得し、復号しているので、、、検証モードで暗号化キーも見えてしまうし、.m3u8ファイル/.tsファイルをダウンロードできるので、、完璧に無料配布防止にはなりません。
更に対策するには、DRM導入の検討が必要です。(あんまりわからないけど、より強固なはず)

まとめ

  • 違法ダウンロードはやめてほしい

参照

Discussion