DRM and Android

DRM and Android

Introduce to Widevine and PlayReady on Android.

6dd0483f1353a4a359e92633cfd65c64?s=128

Daichi Furiya (Wasabeef)

June 22, 2017
Tweet

Transcript

  1. DRM × Android wasabeef Shibuya.apk #16

  2. About me 降矢 大地 (Daichi Furiya) Google Developer Expert AbemaTV,

    Inc. (SF branch) @wasabeef_jp wasabeef
  3. DRM ?

  4. Wikiによると… デジタル著作権管理 (Digital Rights Management) とは、電子機器上のコンテンツ (映画や音楽、小 説など) の無制限な利用を防ぐための技術の総 称である。

    DRM ?
  5. DRM Technology

  6. Microsoft PlayReady Google Widevine (Modular / Classic) Apple FairPlay Streaming

    DRM Technology
  7. DRM Technology PlayReady Widevine (M) Widevine (C) FairPlay Android (4.3+)

    ✕ ◯ ◯ ✕ Android (3+) ✕ ✕ ◯ ✕ iOS (6+) ✕ ✕ ✕ ◯ Windows Phone ◯ ✕ ✕ ✕ Chromecast ◯ ◯ ✕ ✕ Android TV ◯ ◯ ✕ ✕ Apple TV ✕ ✕ ✕ ◯ Fire TV ◯ ◯ ✕ ✕
  8. PlayReady

  9. Android TV only HLS, MPEG-DASH Security Level (SL2000 / SL3000)


    Software Protection (TextureView, SurfaceView) PlayReady
  10. Widevine

  11. Android 4.3+ (Modular) MPEG-DASH (CENC は Android 4.4+) Security Level

    (L1 / L2 / L3)
 Hardware Protection (SurfaceView) Widevine
  12. Widevine E com.google.android.exoplayer2.ExoPlaybackException E at com.google.android.exoplayer2.mediacodec.MediaCodecRenderer.throwDecoderInitError(MediaCodecRenderer.java:380) E at com.google.android.exoplayer2.mediacodec.MediaCodecRenderer.maybeInitCodec(MediaCodecRenderer.java:367) E

    at com.google.android.exoplayer2.mediacodec.MediaCodecRenderer.onInputFormatChanged(MediaCodecRenderer.java:796) E at com.google.android.exoplayer2.video.MediaCodecVideoRenderer.onInputFormatChanged(MediaCodecVideoRenderer.java:365) E at com.google.android.exoplayer2.mediacodec.MediaCodecRenderer.render(MediaCodecRenderer.java:494) E at com.google.android.exoplayer2.ExoPlayerImplInternal.doSomeWork(ExoPlayerImplInternal.java:479) E at com.google.android.exoplayer2.ExoPlayerImplInternal.handleMessage(ExoPlayerImplInternal.java:308) E at android.os.Handler.dispatchMessage(Handler.java:98) E at android.os.Looper.loop(Looper.java:154) E at android.os.HandlerThread.run(HandlerThread.java:61) E Caused by: com.google.android.exoplayer2.mediacodec.MediaCodecRenderer: Decoder init failed: OMX.qcom.video.decoder.avc.secure, Format(1, null, video/avc, 772315, null, [320, 142, 24.0], [-1, -1]) E ... 9 more E Caused by: android.media.MediaCodec$CodecException: start failed E at android.media.MediaCodec.native_start(Native Method) E at android.media.MediaCodec.start(MediaCodec.java:1991) E at com.google.android.exoplayer2.mediacodec.MediaCodecRenderer.maybeInitCodec(MediaCodecRenderer.java:359) E ... 8 more
  13. Widevine L1 を利用しようとしている のに SurfaceView が使われておらず、 TextureView で Software Decode

    し ようとしている。 MediaCodec$CodecException
  14. Security Level

  15. TrustZone & TEE

  16. ARM社のセキュリテイ技術 Normal World と Secure World の実行環境が分 かれている Normal World

    から Secure World へのアクセス をするために TEE と呼ばれる API 郡が利用される TrustZone & TEE
  17. TrustZone & TEE ࢀর: ARM

  18. ここでは Android などの Rich OS が動作する。アプリ のインストールやデータの読 み書き、インターネット接続 などの通常動作が行われる。 Normal

    World ࢀর: ARM
  19. Secure World Secure OS が動作している。通常 の環境とは仮想的に分離されてい る。Normal World からのアクセ スは制限され、悪意のあるアプリ

    が Secure World 内のデータを利 用することは出来ない。 また Secure World での実行環境 と API 郡を標準化したのが TEE 仕様となる。 ࢀর: ARM
  20. SL2000
 TEE がなく全て Normal World で行われる SL3000
 PlayReady 3.0 で実装されており、Android

    では 利用できないが TEE が利用される PlayReady - Security Level
  21. PlayReady - Security Level ࢀর: Microsoft

  22. L1
 全ての制御、暗号化は 
 TEE を使い Secure World で行われる L3
 TEE

    がなく全て Normal World で行われる Widevine - Security Level
  23. ClearKey

  24. Android 5.0+ JSON Web Key (JWK) 簡易的な DRM
 Google や

    Microsoft のシステムが必要なく自前の鍵システム MPEG-DASH でよく使われる ClearKey
  25. ClearKey (JWK) { "keys": [{ "kty": "oct", "k": "tQ0bJVWb6b0KPL6KtZIy_A", "kid":

    "LwVHf8JLtPrv2GUXFW2v_A" }], "type": "temporary" }
  26. Base64 URL 形式を採用
 
 ‘=‘ のパディングは無し
 ‘-’ を ‘+’ に、‘/’

    を ‘_’ に変換する ClearKey (JWK)
  27. Web の EME (W3C) では JWK の規定に基づ いて、Base64 URL 形式でブラウザに実装さ

    れている Android の ClearKey Plugin ではそのまま Base64 形式になっており、’-‘ や ‘/‘ はその ままの状態でやりとりが行われる。 ClearKey (JWK)
  28. HLS

  29. H.264 (AVC) / H.265 (HEVC) MPEG2-TS Fragmented mp4 ID3 (Timed

    Metadata) Sample-AES (AES-128) HLS Common Encryption (CENC) Offline HLS Offline FairPlay
  30. MPEG-DASH

  31. H.264 (AVC) / H.265 (HEVC) MPEG2-TS Fragmented mp4 EventMessage (EMSG)

    Common Encryption (CENC) MPEG-DASH Profile
 Full Profile
 On Demand Profile
 Live Profile
 Main Profile Can separate Audio and Video.
  32. Cost

  33. Cost MPEG LA (MPEG-2, MPEG-4) DRM License (PlayReady, Widevine) Man-hour

  34. MPEG LA AVC / H.264 License HEVC / H.265 License

    DASH License
  35. MPEG LA - AVC/H.264 License 10万 Unit 以上ある場合に費用が発生 1Unit あたり

    $0.20 1Unit あたり $0.10 (5.0 million以上) 上限は $9.75M (2017-2020) エンコード側 及び デコード側の両方が対象 有償ユーザのみ
  36. MPEG LA - DASH License 10万 Unit 以上ある場合に費用が発生 1Unit あたり

    $0.05 上限は $30M デコード側が対象 無償、有償ユーザいずれも
  37. DRM License Microsoft PlayReady Google Widevine Apple FairPlay Streaming

  38. DRM License Google や Microsoft との DRM パー トナー認定を受けている企業に仲介し てもらう必要がある。

    Certified Widevine Implementation Partner Program (CWIP)
  39. Cost Man-hour Money HLS MPEG-DASH

  40. Cost Man-hour Money PlayReady Widevine FairPlay

  41. With ExoPlayer

  42. Android 4.1+ (DRM 利用の場合は 4.3+) HLS (no DRM, AES-128) DASH

    (no DRM, Widevine, CENC scheme) Google VR ExoPlayer
  43. DrmSessionManager

  44. ExoPlayer における DRM 処理の中心 現状では、Multiple DRM はサポー トしていない (issue #2885)

    DrmSessionManager
  45. FrameworkMediaDrm (MediaDrm)

  46. Android 4.3+ (API18) DRM Scheme (uuid) を指定して生成 Widevine, CENC などのフォーマット

    に対応している FrameworkMediaDrm (MediaDrm)
  47. MediaDrmCallback

  48. Key のリクエストとコールバックに 処理を追加できる。
 
 例えば、ClearKey などに独自の暗号 化を加えている場合など。 MediaDrmCallback

  49. MediaDrmCallback public interface MediaDrmCallback { /** * Executes a provisioning

    request. */ byte[] executeProvisionRequest(UUID uuid, ProvisionRequest request) throws Exception; /** * Executes a key request. */ byte[] executeKeyRequest(UUID uuid, KeyRequest request) throws Exception; }
  50. Issues

  51. Pixel & Pixel XL で 7.x (Nougat) を 利用している場合において 


    Clear -> DRM -> Clear -> DRM を繰 り返した場合、端末が Reboot される Issue No.1
  52. Android O で Fix される予定
 
 #2587
 github.com/google/ExoPlayer/issues/2587 Issue No.1

  53. Conclusion

  54. Thank you. twitter.com/wasabeef_jp wasabeef.jp github.com/wasabeef