Widevine — technologie DRM vyvinutá společností Google pro ochranu video obsahu před neoprávněným kopírováním na mobilních zařízeních, Smart TV a webových platformách. Šifrování obsahu se provádí prostřednictvím modulu CDM, který je podporován na 4 miliardách zařízení po celém světě. Technologie Widevine zajišťuje kompatibilitu s Androidem, iOS, Chrome a Smart TV a umožňuje streamovacím službám chránit prémiový obsah na jakékoli platformě.
Hlavní body
Widevine — proprietární technologie DRM, kterou Google získal v roce 2010 a která se stala de facto standardem pro ochranu video obsahu v ekosystému Android. Používají ji největší streamovací služby, včetně Netflixu, Amazon Prime Video, Disney+ a Hulu, k prevenci neoprávněného kopírování a šíření obsahu.
Widevine podporuje šifrování podle standardu AES-128 CBC pomocí klíčů obsahu, které jsou přenášeny pouze autorizovaným zařízením prostřednictvím zabezpečeného licenčního kanálu. Systém zajišťuje end-to-end ochranu od okamžiku šifrování na serveru až po dekódování na zařízení uživatele.
Společnost Widevine Technologies byla založena v roce 1999 a původně vyvíjela řešení pro ochranu obsahu na kabelových televizních platformách. Po akvizici Googlem v roce 2010 byla technologie přizpůsobena pro mobilní platformy a integrována do operačního systému Android od verze 4.4 KitKat. Od roku 2015 se Widevine stal povinnou součástí certifikace Google Mobile Services.
V roce 2018 Google představil Widevine Modular DRM, který umožnil výrobcům zařízení implementovat různé úrovně ochrany hardwarově bez změny kódu operačního systému. Dnes je Widevine Modular podporován na více než 4 miliardách zařízení a je hlavním DRM mechanismem na Androidu.
Architektura Widevine se skládá ze tří klíčových komponent: Content Decryption Module (CDM), licenčního serveru a nástroje pro šifrování obsahu. CDM provádí dešifrování na straně klienta a spolupracuje s hardwarovým Trusted Execution Environment (TEE) pro bezpečné ukládání klíčů.
Licenční server Google spravuje vydávání klíčů na základě politik poskytovatele obsahu, které definují časová omezení, počet zařízení a kvalitu přehrávání. Nástroj pro šifrování připravuje obsah na straně poskytovatele a balí jej do formátu MPEG-DASH nebo HLS s šifrováním CENC.
Proces ochrany začíná fází balení obsahu, kdy je mediální soubor zašifrován pomocí klíče obsahu na serveru poskytovatele. Zašifrovaný proud je přenesen na zařízení uživatele prostřednictvím CDN, kde CDM požaduje licenci od licenčního serveru.
Licenční server ověřuje autenticitu zařízení a právo přístupu k obsahu. Pokud je ověření úspěšné, server vydá licenci s klíčem, který CDM použije k dešifrování. Licence může obsahovat omezení týkající se doby sledování a rozlišení.
Výměna licencí ve Widevine je implementována prostřednictvím protokolu EME (Encrypted Media Extensions) v prohlížečích nebo prostřednictvím SDK na mobilních platformách. Požadavek na licenci je generován CDM a odeslán na licenční server přes HTTPS, což zajišťuje ochranu proti zachycení klíčů během přenosu.
Server zpracuje požadavek a vrátí licenci, která je rovněž zašifrována a může být dešifrována pouze CDM zařízení. Hardwarové vázání klíče ke konkrétnímu zařízení zabraňuje jeho přenosu na jiné platformy.
Widevine používá standardy Common Encryption (CENC) definované v ISO/IEC 23001-7, což zajišťuje kompatibilitu s formáty MPEG-DASH a HLS. Šifrování AES-128 v režimu CTR nebo CBC je aplikováno pro ochranu mediálních proudů.
Pro odvození klíčů se používá HKDF (HMAC-based Key Derivation Function), která umožňuje generování jedinečných klíčů pro každý segment obsahu. Podpora HLS ve Widevine byla přidána od verze Modular 2.0, což rozšířilo kompatibilitu s platformami Apple.
@Throws
fun requestLicense(): ByteArray {
val drmSessionManager = mediaDrm.createSession(
sessionId,
List("keyRequestType", "init")
)
val request = mediaDrm.getKeyRequest(
sessionId,
schemeData.get("mimeType"),
KeyType.STREAMING,
mutableMapOf()
)
return licenseService.acquire(request.data)
}
Widevine definuje tři úrovně zabezpečení, které se liší způsobem provádění kryptografických operací a zpracování obsahu. Úroveň L1 poskytuje maximální ochranu, L3 — minimální, L2 zaujímá střední pozici.
| Úroveň | Typ ochrany | Požadavky na zařízení | Maximální rozlišení |
|---|---|---|---|
| L1 | Hardwarová | TEE na úrovni SoC | 4K Ultra HD |
| L2 | Hybridní | TEE pro klíče, software pro video | 1080p |
| L3 | Softwarová | Pouze softwarový CDM | 720p |
Úroveň L1 vyžaduje přítomnost Trusted Execution Environment (TEE) na hardwarové úrovni, kde jsou prováděny všechny kryptografické operace. Klíče obsahu nikdy neopouštějí TEE, což vylučuje jejich extrakci i v případě kompromitace hlavního operačního systému.
Zařízení s certifikací L1 mohou přehrávat obsah v kvalitě 4K a HDR, protože dešifrovaný video proud je přenášen přímo na chráněný video výstup bez přístupu uživatelských procesů.
Úroveň L3 provádí všechny kryptografické operace softwarově v běžném uživatelském prostoru. Jedná se o nejméně bezpečný režim, při kterém mohou být klíče extrahovány z operační paměti zařízení.
Widevine L3 omezuje kvalitu přehrávání na 720p, což jej činí vhodným pro sledování na zařízeních nižší třídy nebo desktopových prohlížečích bez hardwarové ochrany.
fun getSecurityLevel(): String {
val mediaDrm = MediaDrm(UUID.fromString(
"edef8ba9-79d6-4ace-a3c8-27dcd51d21ed"
))
val level = mediaDrm.getPropertyString(
"securityLevel"
)
return level.ifEmpty { "L3" }
}
Integrace Widevine v mobilních aplikacích se provádí prostřednictvím standardních API MediaDrm (Android) a AVContentKeySession (iOS). Ve většině případů nemusí vývojář pracovat přímo s DRM — knihovny přehrávačů jako ExoPlayer a AVPlayer zpracovávají licencování automaticky.
Na Androidu se Widevine integruje prostřednictvím třídy MediaDrm, která poskytuje přímý přístup k CDM. Pro streamovací aplikace se doporučuje používat ExoPlayer s modulem DrmSessionManager, který automaticky spravuje požadavky na licence.
Při inicializaci přehrávače je třeba zadat UUID schématu Widevine (`edef8ba9-79d6-4ace-a3c8-27dcd51d21ed`) a URL licenčního serveru poskytnutého poskytovatelem obsahu. ExoPlayer automaticky zpracovává cyklus požadavku a obnovy licence.
val drmLicenseUrl = "https://license.service.com/wv"
val mediaItem = MediaItem.Builder()
.setUri(Uri.parse(streamUrl))
.setDrmKeyRequestUrl(drmLicenseUrl)
.setDrmKeyRequestHeaders(
mapOf("Authorization" to token)
)
.build()
val exoPlayer = ExoPlayer.Builder(context)
.build()
exoPlayer.setMediaItem(mediaItem)
exoPlayer.prepare()
Na webových platformách Widevine funguje prostřednictvím Media Source Extensions (MSE) a Encrypted Media Extensions (EME). Prohlížeče založené na Chromiu mají Widevine CDM vestavěný a vývojář stačí inicializovat relaci EME se správnou konfigurací.
Pro práci s Widevine v prohlížeči je třeba zadat iniciátor licence s typem keySystem `com.widevine.alpha`. Po vytvoření instance MediaKeys prohlížeč automaticky zpracovává požadavky na licence.
Při integraci Widevine je důležité správně zpracovávat chyby licencování, které vznikají při nedostatku přístupových práv, vypršení předplatného nebo nekompatibilitě zařízení. Chyba TYPE_EXPIRED_LICENSE vyžaduje obnovení licence prostřednictvím opakovaného požadavku na server, zatímco TYPE_OUTPUT_NOT_ALLOWED označuje nekompatibilitu video výstupu s DRM politikami.
Doporučuje se implementovat mechanismus opakovaných pokusů s exponenciálním zpožděním pro dočasné síťové chyby a zobrazovat uživateli srozumitelnou zprávu při trvalém odmítnutí licencování. Protokolování chyb relací DRM pomáhá poskytovatelům obsahu identifikovat problémy se zařízeními a optimalizovat politiky.
Widevine konkuruje FairPlay od Apple a PlayReady od Microsoftu, čímž tvoří tři hlavní DRM řešení na trhu mobilních platforem. Každá technologie má své výhody a omezení spojená s ekosystémem platformy.
| Vlastnost | Widevine | FairPlay | PlayReady |
|---|---|---|---|
| Vývojář | Apple | Microsoft | |
| Hlavní platforma | Android, Chrome | iOS, tvOS, Safari | Windows, Xbox, UWP |
| Maximální úroveň | L1 (4K) | Ekvivalent L1 (4K) | SL3000 (4K) |
| Hardwarová ochrana | TEE | Secure Enclave | TPM + TEE |
Výběr DRM závisí na cílových platformách aplikace. Pro Android-first projekty je Widevine přirozenou volbou, protože je předinstalován na všech certifikovaných zařízeních s Google Mobile Services a nevyžaduje dodatečný licenční poplatek.
Pro multiplatformní projekty se často používá multi-DRM přístup s licenčními agregátory jako Axinom, EZDRM a Vualto, které poskytují jednotné API pro práci se všemi třemi DRM systémy. To snižuje složitost integrace a centralizuje správu licencí.
Často kladené otázky
Widevine — technologie DRM od Google, určená k ochraně digitálního video obsahu před neoprávněným kopírováním. Používají ji streamovací služby k šifrování videa a správě přístupu k němu prostřednictvím licenčního systému.
Widevine podporuje tři úrovně zabezpečení: L1 s hardwarovým šifrováním v TEE, L2 s hybridním přístupem a L3 s plně softwarovou implementací. L1 umožňuje přehrávání obsahu ve 4K, L3 je omezen na kvalitu 720p.
Úroveň Widevine na Androidu lze zkontrolovat prostřednictvím třídy MediaDrm dotazem na vlastnost securityLevel. K tomu se vytvoří instance MediaDrm s UUID Widevine a zavolá se getPropertyString, nebo se použijí aplikace třetích stran jako DRM Info.
Widevine byl vyvinut Googlem pro Android a Chrome, zatímco FairPlay pro iOS, tvOS a Safari. Oba podporují hardwarové šifrování a 4K, ale Widevine je rozšířenější na zařízeních s Androidem, zatímco FairPlay je de facto standardem v ekosystému Apple.
Pro používání Widevine v mobilní aplikaci není vyžadována samostatná licence — technologie je vestavěna do certifikovaných zařízení s Androidem a Chrome. Poplatek je účtován pouze poskytovatelům obsahu za používání licenčního serveru.
Shrnutí
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í.
Přečtěte si také