Widevine — to technologia DRM opracowana przez Google do ochrony treści wideo przed nieautoryzowanym kopiowaniem na urządzeniach mobilnych, Smart TV i platformach internetowych. Szyfrowanie treści odbywa się za pomocą modułu CDM, który jest obsługiwany na 4 miliardach urządzeń na całym świecie. Technologia Widevine zapewnia kompatybilność z Androidem, iOS, Chrome i Smart TV, umożliwiając serwisom streamingowym ochronę premium treści na dowolnych platformach.
Najważniejsze
Widevine — to zastrzeżona technologia DRM zakupiona przez Google w 2010 roku, która stała się standardem de facto w ochronie treści wideo w ekosystemie Androida. Jest używana przez największe serwisy streamingowe, w tym Netflix, Amazon Prime Video, Disney+ i Hulu, w celu zapobiegania nieautoryzowanemu kopiowaniu i rozpowszechnianiu treści.
Widevine obsługuje szyfrowanie zgodnie ze standardem AES-128 CBC przy użyciu kluczy treści, które są przesyłane tylko do autoryzowanych urządzeń za pośrednictwem bezpiecznego kanału licencjonowania. System zapewnia kompleksową ochronę od momentu szyfrowania na serwerze do dekodowania na urządzeniu użytkownika.
Firma Widevine Technologies została założona w 1999 roku i początkowo opracowywała rozwiązania do ochrony treści na platformach telewizji kablowej. Po przejęciu przez Google w 2010 roku technologia została dostosowana do platform mobilnych i zintegrowana z systemem Android od wersji 4.4 KitKat. Od 2015 roku Widevine stał się obowiązkowym komponentem certyfikacji Google Mobile Services.
W 2018 roku Google wprowadziło Widevine Modular DRM, który umożliwił producentom urządzeń implementację różnych poziomów ochrony sprzętowo bez zmiany kodu systemu operacyjnego. Obecnie Widevine Modular jest obsługiwany na ponad 4 miliardach urządzeń i jest głównym mechanizmem DRM na Androidzie.
Architektura Widevine składa się z trzech kluczowych komponentów: Content Decryption Module (CDM), serwera licencji i narzędzia do szyfrowania treści. CDM wykonuje deszyfrowanie po stronie klienta i współpracuje ze sprzętowym Trusted Execution Environment (TEE) w celu bezpiecznego przechowywania kluczy.
Serwer licencji Google zarządza wydawaniem kluczy na podstawie polityk dostawcy treści, które określają ograniczenia czasowe, liczbę urządzeń i jakość odtwarzania. Narzędzie szyfrujące przygotowuje treści po stronie dostawcy, pakując je w formacie MPEG-DASH lub HLS z szyfrowaniem CENC.
Proces ochrony rozpoczyna się od etapu pakowania treści, gdy plik multimedialny jest szyfrowany przy użyciu klucza treści na serwerze dostawcy. Zaszyfrowany strumień jest przesyłany na urządzenie użytkownika przez CDN, gdzie CDM żąda licencji od serwera licencji.
Serwer licencji sprawdza autentyczność urządzenia i prawo dostępu do treści. Jeśli weryfikacja przebiegnie pomyślnie, serwer wydaje licencję z kluczem, którego CDM używa do deszyfrowania. Licencja może zawierać ograniczenia dotyczące czasu oglądania i rozdzielczości.
Wymiana licencji w Widevine jest realizowana za pomocą protokołu EME (Encrypted Media Extensions) w przeglądarkach lub przez SDK na platformach mobilnych. Żądanie licencji jest generowane przez CDM i wysyłane na serwer licencji przez HTTPS, co zapewnia ochronę przed przechwyceniem kluczy podczas transmisji.
Serwer przetwarza żądanie i zwraca licencję, która jest również zaszyfrowana i może być odszyfrowana tylko przez CDM urządzenia. Wiązanie sprzętowe klucza z konkretnym urządzeniem zapobiega jego przeniesieniu na inne platformy.
Widevine używa standardów Common Encryption (CENC) zdefiniowanych w ISO/IEC 23001-7, co zapewnia zgodność z formatami MPEG-DASH i HLS. Szyfrowanie AES-128 w trybie CTR lub CBC jest stosowane do ochrony strumieni multimedialnych.
Do wyprowadzania kluczy używana jest funkcja HKDF (HMAC-based Key Derivation Function), która umożliwia generowanie unikalnych kluczy dla każdego segmentu treści. Obsługa HLS w Widevine została dodana od wersji Modular 2.0, co rozszerzyło zgodność z 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 definiuje trzy poziomy bezpieczeństwa, które różnią się sposobem wykonywania operacji kryptograficznych i przetwarzania treści. Poziom L1 zapewnia maksymalną ochronę, L3 — minimalną, L2 zajmuje pozycję pośrednią.
| Poziom | Rodzaj ochrony | Wymagania sprzętowe | Maksymalna rozdzielczość |
|---|---|---|---|
| L1 | Sprzętowa | TEE na poziomie SoC | 4K Ultra HD |
| L2 | Hybrydowa | TEE dla kluczy, soft dla wideo | 1080p |
| L3 | Programowa | Tylko programowy CDM | 720p |
Poziom L1 wymaga obecności Trusted Execution Environment (TEE) na poziomie sprzętowym, gdzie wykonywane są wszystkie operacje kryptograficzne. Klucze treści nigdy nie opuszczają TEE, co wyklucza ich wydobycie nawet przy kompromitacji głównego systemu operacyjnego.
Urządzenia z certyfikacją L1 mogą odtwarzać treści w jakości 4K i HDR, ponieważ odszyfrowany strumień wideo jest przesyłany bezpośrednio do zabezpieczonego wyjścia wideo bez dostępu ze strony procesów użytkownika.
Poziom L3 wykonuje wszystkie operacje kryptograficzne programowo w zwykłej przestrzeni użytkownika. Jest to najmniej bezpieczny tryb, w którym klucze mogą być wydobyte z pamięci RAM urządzenia.
Widevine L3 ogranicza jakość odtwarzania do 720p, co czyni go odpowiednim do oglądania na starszych urządzeniach lub przeglądarkach desktopowych bez ochrony sprzętowej.
fun getSecurityLevel(): String {
val mediaDrm = MediaDrm(UUID.fromString(
"edef8ba9-79d6-4ace-a3c8-27dcd51d21ed"
))
val level = mediaDrm.getPropertyString(
"securityLevel"
)
return level.ifEmpty { "L3" }
}
Integracja Widevine w aplikacjach mobilnych odbywa się za pomocą standardowych API MediaDrm (Android) i AVContentKeySession (iOS). W większości przypadków programista nie musi bezpośrednio pracować z DRM — biblioteki odtwarzaczy, takie jak ExoPlayer i AVPlayer, obsługują licencjonowanie automatycznie.
Na Androidzie Widevine integruje się za pomocą klasy MediaDrm, która zapewnia bezpośredni dostęp do CDM. W przypadku aplikacji streamingowych zaleca się używanie ExoPlayera z modułem DrmSessionManager, który automatycznie zarządza żądaniami licencji.
Podczas inicjalizacji odtwarzacza należy podać UUID schematu Widevine (`edef8ba9-79d6-4ace-a3c8-27dcd51d21ed`) oraz URL serwera licencji dostarczonego przez dostawcę treści. ExoPlayer samodzielnie obsługuje cykl żądania i odświeżania licencji.
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 platformach internetowych Widevine działa za pośrednictwem Media Source Extensions (MSE) i Encrypted Media Extensions (EME). Przeglądarki oparte na Chromium obsługują Widevine CDM wbudowany, a programista musi jedynie zainicjalizować sesję EME z odpowiednią konfiguracją.
Aby korzystać z Widevine w przeglądarce, należy określić inicjator licencji z typem keySystem `com.widevine.alpha`. Po utworzeniu instancji MediaKeys przeglądarka automatycznie obsługuje żądania licencji.
Podczas integracji Widevine ważne jest prawidłowe obsługiwanie błędów licencjonowania, które występują przy braku uprawnień dostępu, wygaśnięciu subskrypcji lub niekompatybilności urządzenia. Błąd TYPE_EXPIRED_LICENSE wymaga odnowienia licencji poprzez ponowne żądanie do serwera, a TYPE_OUTPUT_NOT_ALLOWED wskazuje na niezgodność wyjścia wideo z politykami DRM.
Zaleca się implementację mechanizmu ponownych prób z wykładniczym opóźnieniem w przypadku tymczasowych błędów sieciowych oraz wyświetlanie użytkownikowi zrozumiałego komunikatu przy stałych odmowach licencjonowania. Logowanie błędów sesji DRM pomaga dostawcom treści identyfikować problemy z urządzeniami i optymalizować polityki.
Widevine konkuruje z FairPlay od Apple i PlayReady od Microsoftu, tworząc trzy główne rozwiązania DRM na rynku platform mobilnych. Każda technologia ma swoje zalety i ograniczenia związane z ekosystemem platformy.
| Cecha | Widevine | FairPlay | PlayReady |
|---|---|---|---|
| Producent | Apple | Microsoft | |
| Główna platforma | Android, Chrome | iOS, tvOS, Safari | Windows, Xbox, UWP |
| Maksymalny poziom | L1 (4K) | Odpowiednik L1 (4K) | SL3000 (4K) |
| Ochrona sprzętowa | TEE | Secure Enclave | TPM + TEE |
Wybór DRM zależy od docelowych platform aplikacji. Dla projektów Android-first Widevine jest naturalnym wyborem, ponieważ jest preinstalowany na wszystkich certyfikowanych urządzeniach z Google Mobile Services i nie wymaga dodatkowej opłaty licencyjnej.
W przypadku projektów wieloplatformowych często stosuje się podejście multi-DRM z wykorzystaniem agregatorów licencji, takich jak Axinom, EZDRM i Vualto, które zapewniają jednolite API do pracy ze wszystkimi trzema systemami DRM. Zmniejsza to złożoność integracji i centralizuje zarządzanie licencjami.
Często zadawane pytania
Widevine — to technologia DRM od Google, przeznaczona do ochrony cyfrowych treści wideo przed nieautoryzowanym kopiowaniem. Jest używana przez serwisy streamingowe do szyfrowania wideo i zarządzania dostępem do niego za pomocą systemu licencjonowania.
Widevine obsługuje trzy poziomy bezpieczeństwa: L1 ze sprzętowym szyfrowaniem w TEE, L2 z podejściem hybrydowym i L3 z w pełni programową realizacją. L1 umożliwia odtwarzanie treści w 4K, L3 jest ograniczone do jakości 720p.
Poziom Widevine na Androidzie można sprawdzić za pomocą klasy MediaDrm, odczytując właściwość securityLevel. W tym celu tworzy się instancję MediaDrm z UUID Widevine i wywołuje getPropertyString, lub korzysta się z aplikacji zewnętrznych takich jak DRM Info.
Widevine został opracowany przez Google dla Androida i Chrome, a FairPlay — dla iOS, tvOS i Safari. Oba obsługują sprzętowe szyfrowanie i 4K, ale Widevine jest szerzej rozpowszechniony na urządzeniach z Androidem, a FairPlay jest standardem de facto w ekosystemie Apple.
Do używania Widevine w aplikacji mobilnej osobna licencja nie jest wymagana — technologia jest wbudowana w certyfikowane urządzenia z Androidem i Chrome. Opłata jest pobierana tylko od dostawców treści za korzystanie z serwera licencji.
Podsumowanie
Opracujemy aplikację mobilną pod klucz
IT Sectr tworzy aplikacje na iOS i Androida dla startupów i firm od 2017 roku. Doradzimy Ci i zaproponujemy najlepsze rozwiązanie.
Przeczytaj również