DRM v mobilních aplikacích: základy, schémata ochrany a princip fungování

Autor: IT Sectr Publikováno: 2026-05-24 Doba čtení: 11 min

DRM (Digital Rights Management) — soubor technologií ochrany digitálního obsahu proti neoprávněnému kopírování a šíření. V mobilních aplikacích se DRM používá k šifrování videa, zvuku a elektronických knih, čímž je zajištěno dodržování licenčních smluv mezi vlastníky práv a spotřebiteli. Podle Google Widevine Documentation, 2026 je DRM integrováno do většiny streamovacích služeb — Netflix, Spotify, Apple TV+ — a je povinné pro legální distribuci prémiového obsahu.

Nejdůležitější

  • DRM (Digital Rights Management) — technologie ochrany autorských práv omezující kopírování a šíření digitálního obsahu.
  • Tři hlavní schémata: Widevine (Google), FairPlay (Apple), PlayReady (Microsoft) — dominují na mobilních platformách.
  • Widevine funguje na Androidu a iOS prostřednictvím CDM, podporuje tři úrovně zabezpečení: L1, L2, L3.
  • FairPlay od Apple používá server KSM pro generování klíčů a je integrován do AVFoundation na iOS a macOS.
  • Dešifrování DRM probíhá na úrovni mediálního přehrávače — vývojář obdrží hotový video stream prostřednictvím ExoPlayer nebo AVPlayer.

Co je DRM?

DRM — je soubor kryptografických a softwarových metod, které kontrolují přístup k digitálnímu obsahu. Na rozdíl od jednoduchého šifrování zahrnuje DRM licenční systém: obsah je zašifrován a k jeho zobrazení je vyžadován klíč, který je vydán až po ověření práv uživatele.

Hlavním úkolem DRM je prevence pirátství a zajištění dodržování regionálních omezení. Bez DRM vlastníci obsahu (filmová studia, nahrávací společnosti) neposkytují licence na svůj obsah streamingovým platformám. Podle Motion Picture Association (2025) použití DRM snížilo nelegální distribuci filmů ve streamingu o 62% ve srovnání s érou DVD ripů.

Při mobilním vývoji je DRM integrováno na úrovni mediálního přehrávače: vývojář používá ExoPlayer (Android), AVPlayer (iOS) nebo Shaka Player (Web), které podporují vestavěné dešifrování zašifrovaného streamu. Vývojář nemusí implementovat kryptografii — stačí integrovat SDK pro licencování.

DRM a CENC (Common Encryption)

Standard CENC (Common Encryption — ISO/IEC 23001-7) umožňuje použití jednoho zašifrovaného mediálního souboru pro všechny DRM systémy. Obsah je zašifrován jednou a klíče jsou distribuovány prostřednictvím různých licenčních serverů. To je kriticky důležité pro víceplatformní služby: Netflix zašifruje film jednou a doručí jej na Android (Widevine), iOS (FairPlay) a Windows (PlayReady) bez překódování.

CENC používá šifrování CBC s různými klíči pro zvukové a video stopy. Každý klíč je uložen v zašifrované podobě v manifestu MPD (MPEG-DASH) nebo M3U8 (HLS). Identifikátor obsahu (KID) propojuje zašifrovaný stream s licencí na serveru — bez platné licence není klíč dešifrován.

Jak DRM funguje v mobilních aplikacích

Proces DRM přehrávání se skládá ze čtyř fází: načtení manifestu, získání licence, dešifrování obsahu a zobrazení. Každou fázi provádějí různé komponenty systému — mediální přehrávač, modul CDM a licenční server.

  • Načtení manifestu — přehrávač obdrží MPD (DASH) nebo M3U8 (HLS) s metadaty o zašifrovaných segmentech, šifrovacím schématu a URL licenčního serveru.
  • Žádost o licenci — přehrávač předá identifikátor obsahu (KID) modulu Content Decryption Module (CDM), který vytvoří požadavek na licenční server.
  • Získání klíče — server ověří práva uživatele (předplatné, region, zařízení) a vrátí klíč zašifrovaný veřejným klíčem zařízení.
  • Dešifrování streamu — CDM dešifruje klíč soukromým klíčem zařízení a předá jej přehrávači k dešifrování video segmentů v reálném čase.

Content Decryption Module (CDM)

CDM — je chráněný softwarový nebo hardwarový modul, který provádí dešifrování obsahu. Na Androidu je CDM implementováno na úrovni API MediaDrm, na iOS — integrováno do AVFoundation prostřednictvím AVContentKeySession. CDM nikdy neodhalí klíč aplikaci — všechny kryptografické operace jsou prováděny uvnitř chráněného prostředí (TEE — Trusted Execution Environment).

Na zařízeních s hardwarovou podporou (Secure Level 1) CDM pracuje uvnitř TEE — klíč se nikdy nedostane do hlavní paměti zařízení. To je požadavek studií pro přehrávání obsahu v 4K HDR. Na zařízeních bez TEE jsou klíče dešifrovány softwarově (L3), což snižuje ochranu a omezuje maximální kvalitu na 540p.

Hlavní schémata DRM

Na mobilních platformách dominují tři DRM systémy. Každý je exkluzivní pro svůj ekosystém, ale podporuje CENC, což umožňuje použití jednoho zašifrovaného obsahu na všech platformách.

DRMVývojářPlatformaMax. kvalitaHardwarová ochrana
WidevineGoogleAndroid, Chrome, Android TV4K HDR (L1)TEE (L1)
FairPlayAppleiOS, iPadOS, macOS, tvOS4K HDR (iOS)Secure Enclave
PlayReadyMicrosoftWindows, Xbox, Windows Phone4K (SL3000)TPM + TEE

Výběr DRM pro víceplatformní službu

Pro streamovací službu fungující na všech platformách je vyžadována podpora všech tří DRM. Praktickým řešením je použití CDN s podporou multi-DRM (Muvi, Vualto, Axinom), které automaticky směrují žádosti o licence k příslušnému serveru v závislosti na zařízení uživatele. Podle Streaming Learning Center (2025) používá 78% streamovacích služeb přístup Multi-DRM.

Standard MPEG-DASH s CENC zjednodušuje architekturu: obsah je zašifrován jednou sdíleným klíčem a systém DRM je vybrán na straně klienta. Licenční server obdrží požadavek s identifikátorem zařízení a vrátí klíč zašifrovaný pro konkrétní CDM. Žádný rozdíl v obsahu pro různé platformy — pouze jiný licenční server.

Widevine: úrovně a vlastnosti

Widevine — DRM systém Google, který je de facto standardem na Androidu. Podporuje tři úrovně zabezpečení, které určují, kde a jak probíhá dešifrování obsahu. Úroveň zabezpečení závisí na hardwarových možnostech zařízení a určuje maximální rozlišení obsahu.

Úrovně zabezpečení Widevine

Widevine L1 (hardwarová) — nejchráněnější úroveň. Všechny kryptografické operace jsou prováděny uvnitř Trusted Execution Environment (TEE). Klíč nikdy neopustí chráněnou oblast. Zařízení s L1 mohou přehrávat obsah až do 4K HDR. Je vyžadována certifikace Google — procedura, kterou procházejí vlajkové lodi zařízení.

Widevine L3 (softwarová) — dešifrování probíhá v hlavní paměti zařízení. Klíč může být získán technicky zdatným útočníkem. Rozlišení je omezeno na 540p (960x540) pro prémiový obsah. Všechna zařízení s Androidem podporují L3, i když nejsou certifikována pro L1.

Widevine L2 — vzácná mezilehlá úroveň, kde dešifrování probíhá v TEE, ale vykreslování nechráněnou cestou. Používá se na některých Smart TV. Na mobilních zařízeních se prakticky nevyskytuje.

Jak zjistit úroveň Widevine na zařízení

kotlin
import android.media.MediaDrm
import android.media.UUID

fun checkWidevineLevel(): String {
    val widevineUuid = UUID.fromString("edef8ba9-79d6-4ace-a3c8-27dcd51d21ed")
    val mediaDrm = MediaDrm(widevineUuid)

    val securityLevel = mediaDrm.getPropertyString(
        MediaDrm.PROPERTY_SECURITY_LEVEL
    )

    return when (securityLevel) {
        "L1" -> "Widevine L1 — hardwarová ochrana"
        "L3" -> "Widevine L3 — softwarová ochrana"
        else -> "Widevine $securityLevel"
    }
}

Metoda vyžaduje od CDM vlastnost securityLevel pomocí UUID Widevine. Vrácená hodnota — řetězec L1, L2 nebo L3 — označuje aktuální úroveň ochrany zařízení. Tato informace je kritická pro streamovací služby: pokud má zařízení pouze L3, obsah v 4K nelze zobrazit.

Apple FairPlay: architektura a princip fungování

FairPlay — DRM systém Apple, integrovaný do všech platforem ekosystému: iOS, iPadOS, macOS, tvOS a watchOS. Na rozdíl od Widevine, FairPlay nemá úrovně zabezpečení — ochrana je určena zařízením. Na iOS se Secure Enclave poskytuje FairPlay úroveň ochrany srovnatelnou s Widevine L1.

FairPlay pracuje výhradně s protokolem HLS (HTTP Live Streaming). Obsah je zabalen do segmentů .ts (MPEG-TS) nebo fragmentů .m4s (fMP4). Manifest M3U8 obsahuje značku #EXT-X-KEY s URI licenčního serveru (KSM — Key Server Module) a iniciační IV. Při spuštění přehrávání AVPlayer načte manifest a prostřednictvím AVContentKeySession požaduje klíč.

Integrace FairPlay Streaming

swift
import AVFoundation

let contentKeySession = AVContentKeySession(keySystem: fairPlayStreaming)
let player = AVPlayer(playerItem: playerItem)
contentKeySession.setDelegate(self, queue: delegateQueue)

func contentKeySession(
    _ session: AVContentKeySession,
    didProvide keyRequest: AVContentKeyRequest
) {
    let assetId = keyRequest.identifier as! String
    sendLicenseRequest(assetId) { licenseData in
        keyRequest.processContentKeyResponse(
            AVContentKeyResponse(fairPlayStreamingKeyResponseData: licenseData)
        )
    }
}

Delegát AVContentKeySession obdrží žádost o klíč s identifikátorem obsahu (assetId). Aplikace odešle toto ID na svůj licenční server (KSM), který vrátí zašifrovaný klíč. Volání processContentKeyResponse předá klíč CDM k dešifrování. Pokud je licence neplatná (prošlá, nezaplacená), server vrátí chybu 403 a AVPlayer nezahájí přehrávání.

Persistent Key Loading pro offline obsah

FairPlay podporuje persistent keys — uložení licence na zařízení pro offline prohlížení. Po získání klíče aplikace zavolá processContentKeyResponse s příznakem allowsPersistableKey. Klíč je uložen v Keychain a může být použit bez dotazování serveru při opakovaném sledování. Doba platnosti offline licence je však omezena — obvykle 7–30 dní, po které je vyžadována obnova.

Offline licence jsou uloženy v chráněném úložišti iOS — Keychain. Při pokusu o prolomení (jalibreak, extrakce dumpu paměti) Secure Enclave zničí klíče. Podle Apple (2025) se technologie persistent keys používá v Apple TV+, Netflix a Disney+ pro stahování obsahu na iPad před cestou.

Microsoft PlayReady pro univerzální ochranu

PlayReady — DRM od Microsoftu, používané na Windows, Xbox a zastaralých Windows Phone. I když se PlayReady na mobilních zařízeních vyskytuje méně často než Widevine a FairPlay, je důležité pro univerzální streamovací řešení fungující na všech platformách Microsoft. PlayReady podporuje jak softwarovou, tak hardwarovou ochranu prostřednictvím TPM.

PlayReady používá architekturu SL (Security Level): SL2000 (softwarová, analog Widevine L3), SL3000 (hardwarová, analog L1). Na Xbox Series X pracuje PlayReady SL3000 prostřednictvím TEE+TPM — klíče jsou extrahovány pouze v chráněném prostředí. To umožňuje přehrávání 4K Blu-ray na konzoli bez rizika kopírování.

Podle Microsoft Docs (2026) PlayReady podporuje CENC a může pracovat s MPEG-DASH prostřednictvím Media Source Extensions (MSE) v prohlížečích Edge. Pro mobilní aplikace na Android a iOS je PlayReady k dispozici prostřednictvím SDK, ale používá se zřídka — především pro firemní aplikace a mediální služby Microsoftu.

PlayReady Native SDK pro Android

Microsoft poskytuje PlayReady Native SDK pro Android a iOS. Integrace se provádí prostřednictvím ExoPlayer s rozšířením PlayReady: vývojář přidá PlayReadyRenderer, který se vloží do řetězce dekódování. ExoPlayer automaticky přepíná mezi Widevine a PlayReady v závislosti na tom, který DRM je uveden v manifestu MPD.

I když se PlayReady v mobilních aplikacích vyskytuje zřídka, jeho podpora je povinná pro služby, které jsou součástí ekosystému Microsoft — například firemní vzdělávací platformy na SharePoint a Stream. Podle Microsoft (2025) se PlayReady používá ve 23% firemních mediálních řešení oproti 62% pro Widevine.

Integrace DRM do mobilní aplikace

Integrace DRM do mobilní aplikace nevyžaduje psaní kryptografického kódu — vývojář pracuje s přehrávačem, který podporuje DRM ihned po vybalení. Podívejme se na integraci na Androidu prostřednictvím ExoPlayer s rozšířením DRM.

Nastavení ExoPlayer s podporou Widevine

kotlin
val drmSessionManager = DefaultDrmSessionManager.Builder()
    .setUuidAndExoMediaDrmProvider(
        C.WIDEVINE_UUID,
        FrameworkMediaDrm.DEFAULT_PROVIDER
    )
    .setMultiSession(true)
    .build(mediaDrmCallback)

val mediaItem = MediaItem.Builder()
    .setUri(mpdUrl)
    .setDrmConfiguration(
        MediaItem.DrmConfiguration.Builder(C.WIDEVINE_UUID)
            .setLicenseUri(licenseUrl)
            .setLicenseRequestHeaders(headers)
            .build()
    )
    .build()

exoPlayer.setMediaItem(mediaItem)
exoPlayer.prepare()

DefaultDrmSessionManager spravuje DRM relaci: vytváří relaci MediaDrm, zpracovává žádosti o licence a předává klíče dekodéru. Parametr setMultiSession(true) umožňuje současné dešifrování více streamů (audio + video) v různých relacích. MediaDrmCallback implementuje HTTP požadavek na licenční server — obvykle POST s tělem požadavku ve formátu SignedRequest.

MediaDrmCallback pro žádost o licenci

kotlin
val mediaDrmCallback = DefaultDrmSessionManager.MediaDrmCallback {
    url, requestBody ->

    val response = OkHttpClient().newCall(
        Request.Builder()
            .url(url)
            .post(RequestBody.create(requestBody, MediaType.parse("application/octet-stream")))
            .addHeader("Authorization", "Bearer ")
            .build()
    ).execute()

    val responseBytes = response.body?.bytes()
        ?: throw DrmSessionException(Exception("Empty license response"))

    responseBytes
}

Callback odešle POST požadavek na licenční server s UUID Widevine v těle. Server ověří autentizaci uživatele (token v hlavičce) a vrátí zašifrovaný klíč. Pokud uživatel nemá aktivní předplatné, server vrátí 403 Forbidden — ExoPlayer vygeneruje DRM chybu, kterou je třeba zpracovat prostřednictvím onPlayerError.

Zpracování DRM chyb

DRM chyby vznikají, když je licence neplatná, prošlá nebo zařízení nepodporuje požadovanou úroveň ochrany. ExoPlayer předá chybu prostřednictvím Player.Listener.onPlayerError s kódem TYPE_DRM_LICENSE_EXPIRED, TYPE_DRM_UNSUPPORTED nebo TYPE_SOURCE. Doporučuje se zobrazit uživateli informativní zprávu: „Obsah není pro toto zařízení k dispozici” nebo „Pro prodloužení předplatného pro sledování”.

Podle analýzy streamovacích služeb (2025) až 8% neúspěšných startů přehrávání souvisí s DRM chybami. Z nich 60% tvoří prošlé licence, 25% — nekompatibilita zařízení a 15% — síťové chyby při žádosti o klíč. Automatický opakovaný pokus po 5 sekundách řeší 40% případů síťových chyb.

Často kladené otázky

Lze obejít DRM na mobilním zařízení?

Technicky možné na zařízeních s Widevine L3 (softwarová ochrana), kde lze klíč získat z paměti. Na L1 a FairPlay se Secure Enclave je obejití extrémně obtížné — je vyžadován fyzický přístup k TEE. Obsahová studia cílí na zařízení L1 pro prémiový obsah.

Proč Netflix zobrazuje nízkou kvalitu na mém Androidu?

S největší pravděpodobností zařízení není certifikováno pro Widevine L1 a používá L3. Netflix omezuje kvalitu na 540p na zařízeních L3. Zkontrolujte úroveň Widevine pomocí aplikace DRM Info z Google Play. Vlajkové lodě Samsung, Pixel a OnePlus mají obvykle L1.

Který DRM je lepší pro streamovací službu?

Použijte Multi-DRM: Widevine pro Android, FairPlay pro Apple, PlayReady pro Windows. Služby jako Axinom nebo Vualto poskytují jednotné API pro všechny tři DRM. Obsah je zašifrován jednou prostřednictvím CENC a výběr DRM probíhá automaticky na straně klienta.

Jak implementovat offline sledování s DRM?

Na iOS použijte persistent keys FairPlay prostřednictvím AVContentKeySession. Na Androidu — Widevine Offline License prostřednictvím ExoPlayer OfflineLicenseHelper. Klíč je uložen lokálně v Keychain (iOS) nebo KeyStore (Android) s omezenou dobou platnosti — obvykle 7 až 30 dní.

Co je KID v kontextu DRM?

KID (Key ID) — jedinečný 16-bajtový identifikátor šifrovacího klíče v manifestu CENC. Každý KID je vázán na konkrétní segment obsahu (například 10minutový segment filmu). Licenční server používá KID k nalezení příslušného klíče ve své databázi. Jeden film může obsahovat až 20 různých KID pro různé části.

Shrnutí

  • DRM (Digital Rights Management) — systém kryptografické ochrany digitálního obsahu, povinný pro legální streaming.
  • Tři hlavní schémata: Widevine (Android), FairPlay (iOS), PlayReady (Windows) — používají CENC pro jednotné šifrování obsahu.
  • Widevine L1 (hardwarová ochrana prostřednictvím TEE) umožňuje 4K HDR, L3 (softwarová) omezena na 540p. Úroveň se kontroluje pomocí MediaDrm.getPropertyString.
  • FairPlay funguje pouze s HLS a používá AVContentKeySession pro žádosti o klíče prostřednictvím serveru KSM.
  • Integrace DRM se provádí prostřednictvím mediálního přehrávače: ExoPlayer (Android) s DefaultDrmSessionManager, AVPlayer (iOS) s AVContentKeySession.
  • DRM chyby jsou zpracovávány prostřednictvím onPlayerError — prošlé licence, nekompatibilita zařízení a síťové chyby tvoří 8% neúspěšných startů.
  • Pro víceplatformní služby je doporučen přístup Multi-DRM s poskytovatelem CDN a jednotným šifrováním CENC obsahu.

Vyvineme mobilní aplikaci na klíč

IT Sectr vytváří aplikace pro iOS a Android pro startupy a podniky od roku 2017. Poradíme vám a navrhneme nejlepší řešení.

Prodiskutovat projekt

Přečtěte si také