Upgrade to Pro — share decks privately, control downloads, hide ads and more …

DRM and Android

DRM and Android

Introduce to Widevine and PlayReady on Android.

Daichi Furiya (Wasabeef)

June 22, 2017
Tweet

More Decks by Daichi Furiya (Wasabeef)

Other Decks in Technology

Transcript

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

    ✕ ◯ ◯ ✕ Android (3+) ✕ ✕ ◯ ✕ iOS (6+) ✕ ✕ ✕ ◯ Windows Phone ◯ ✕ ✕ ✕ Chromecast ◯ ◯ ✕ ✕ Android TV ◯ ◯ ✕ ✕ Apple TV ✕ ✕ ✕ ◯ Fire TV ◯ ◯ ✕ ✕
  2. Android TV only HLS, MPEG-DASH Security Level (SL2000 / SL3000)


    Software Protection (TextureView, SurfaceView) PlayReady
  3. Android 4.3+ (Modular) MPEG-DASH (CENC は Android 4.4+) Security Level

    (L1 / L2 / L3)
 Hardware Protection (SurfaceView) Widevine
  4. 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
  5. ARM社のセキュリテイ技術 Normal World と Secure World の実行環境が分 かれている Normal World

    から Secure World へのアクセス をするために TEE と呼ばれる API 郡が利用される TrustZone & TEE
  6. Secure World Secure OS が動作している。通常 の環境とは仮想的に分離されてい る。Normal World からのアクセ スは制限され、悪意のあるアプリ

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

    では 利用できないが TEE が利用される PlayReady - Security Level
  8. L1
 全ての制御、暗号化は 
 TEE を使い Secure World で行われる L3
 TEE

    がなく全て Normal World で行われる Widevine - Security Level
  9. Android 5.0+ JSON Web Key (JWK) 簡易的な DRM
 Google や

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

    "LwVHf8JLtPrv2GUXFW2v_A" }], "type": "temporary" }
  11. Web の EME (W3C) では JWK の規定に基づ いて、Base64 URL 形式でブラウザに実装さ

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

  13. 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
  14. 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.
  15. MPEG LA - AVC/H.264 License 10万 Unit 以上ある場合に費用が発生 1Unit あたり

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

    $0.05 上限は $30M デコード側が対象 無償、有償ユーザいずれも
  17. Android 4.1+ (DRM 利用の場合は 4.3+) HLS (no DRM, AES-128) DASH

    (no DRM, Widevine, CENC scheme) Google VR ExoPlayer
  18. 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; }
  19. Pixel & Pixel XL で 7.x (Nougat) を 利用している場合において 


    Clear -> DRM -> Clear -> DRM を繰 り返した場合、端末が Reboot される Issue No.1