Technically Impossible

Lets look at the weak link in your statement. Anything "Technically Impossible" basically means we haven't figured out how yet.

DRM review Ver 1.1 - DRM (Widevine)、HDCPなどの情報を表示するAndroidアプリ

github.com

先日、Android端末でのオンライン動画再生にまつわるセキュリティ情報について投稿した。*1どうせならば、ある程度まとまった情報を表示できるアプリケーションとして仕上げてみようと思い立った。そして出来上がったのが、DRM reviewだ。

このアプリケーションを起動すると、次の情報を表示する。

  • DRMシステムの情報:Android端末なので、通常はGoogle Widevine*2についての情報
  • HDCP (High bandwidth Digital Content Protection))*3の情報
  • コンテンツ・タイプごとの処理方法
    • 現時点ではMP4とWebM

各項目ごとの情報が何を意味しているのか、それぞれの説明を併記しているので分かり易いと思う。

この投稿では、併記された説明では伝えきれていない、使用上の留意点についてまとめている。

インストール方法

DRM reviewはGoogle Playでは公開していないし、するつもりもない。

DRM reviewはGitHubで公開しており、apkファイルを直接ダウンロードしてインストールする。Android端末のWebブラウザでアクセスすれば、自動的にインストールの承認を求められるだろうし、一度ダウンロード・フォルダへ保存してから、改めてインストールを指示しても良い。

github.com

Widevine、そしてTEEの判定について

先日の投稿でも触れたことだが、改めて明記しておく。アプリが表示するセキュリティ・レベルは、現時点での判定であり、絶対的なものではない。それはGoogleの都合によって変化する。

これはその時点でGoogleが、どの端末をTEE (Truested Execution Environment)*4と見做しているかに依存している。有名ブランドのハイエンド端末は、発売直後は間違いなくTEEと見做され、L1と判定されるだろう。しかし、OSのアップデート・サポートが終了し、時が経てばTEEとは見なされなくなる。実際、そのような運用が実施されている。
qiita.com

Widevine L1、L2、L3について

Android端末のセキュリティ・レベルを判定すれば、通常はL1かL3が表示される。まずL1、L2以外は全てL3と見做される。実際のところ、L1とはTEEのことを表している。コンテンツ保護について求められる要件を満たした端末ということになる。

L2とは、コンテンツの処理が複数の機器にまたがる場合に考慮されるレベルだ。コンテンツは常に受信端末上で再生されるとは限らない。コンテンツがストリーミングされるのはAndroid端末だが、さらにテレビやプロジェクタなどへ外部出力される場合がある。このような環境を前提としたとき、

  1. コンテンツの復号化はAndroid端末で、コンテンツの再生処理は外部出力先で実施する場合
  2. コンテンツの復号化、再生処理をAndroid端末で実施する場合
    • 外部出力先はAndroid端末の画面をミラーしているだけ

特に前者において外部出力先がTEEと見做されなければ、L2と判定される。一部のコンテンツ・プロバイダが、このような再生環境の中継をサポートしなかったり、画質を落としたコンテンツを配信したりする原因の一つがこれだ。

そして、このような環境にまつわるもう一つの存在がHDCPだ。

HDCPについて

HDCPはコンテンツが再生される経路上のすべての機器に影響する要素だ。デスクトップPCでの再生環境を想像すると分かり易い。

  1. PC内で処理されたコンテンツがビデオカードから出力される
  2. 出力されたコンテンツはケーブルを介して伝達される
  3. 伝達されたコンテンツはモニターへ入力される

HDCPは、これらの構成要素(ビデオカード、ケーブル、モニター)すべてに影響する。もし一定のHDCPレベルが要求されている場合、これらの構成要素は全て、その要件を満たさなければならない。

DRM reviewは動作端末と再生環境一通りのHDCPをチェックしている。次の画像では、該当項目に「6 / 2147483647」と出力されている。これは次のことを意味している。

アプリ実行環境のHDCP 6 HDCP version 2.3 Type 1をサポートしている
再生環境 2147483647 デジタル出力無し

ちなみに検証端末はMicrosoft Surface Duoだ。これはWindowsデスクトップPCへのMiracast*5をサポートしている。HDCPはMiracastにも影響するのだが、得られた結果は少々興味深い。

Miracast接続状態でYouTubeを再生し、DRM reviewを起動した結果を、Windows側からキャプチャした画像だ。先のWidevine L2の説明で触れた、「コンテンツの復号化、再生処理をAndroid端末で実施」している状態になる。PCはAndroid端末の画面を表示しているだけで、YouTubeコンテンツは、そこに含まれているだけだ。言い方を変えるならば、PCはAndroid端末の画面を表示しているだけで、YouTubeコンテンツを再生しているわけではない。YouTubeコンテンツを再生しているのはPCではなく、Surface Duoだからだ。
この状態では、デジタル出力無し(No digital output)と見做されている。

コンテンツ・レベルのセキュリティ

この項目は参考情報だ。現在のバージョンでは、次のフォーマットについて調べた結果を返している。

  • MP4
  • WebM*6

DRMシステムは、オンライン動画の形態ごとに処理方法を変える可能性がある。とはいえMP4は標準フォーマットだし、WebMはGoogleのフォーマットなのだから、GoogleDRMシステムであるWidevineがどちらもサポートしているのは当然の結果だろう。

この項目は、端的にはDRMの鍵管理、並びに一連のコンテンツ処理がハードウェアに実装されているのか、ソフトウェアに組み込まれているのか、が問われている。

次の画像は、Android Studio上のエミュレータでの実行結果だ。エミュレータはハードウェアを持たないので、ハードウェア系の項目について、ことごとく「false」を返している。