Widevine — це технологія DRM, розроблена Google для захисту відеоконтенту від несанкціонованого копіювання на мобільних пристроях, Smart TV та веб-платформах. Шифрування контенту виконується через модуль CDM, який підтримується на 4 мільярдах пристроїв по всьому світу. Технологія Widevine забезпечує сумісність з Android, iOS, Chrome та Smart TV, дозволяючи сервісам стрімінгу захищати преміум-контент на будь-яких платформах.
Головне
Widevine — це пропрієтарна технологія DRM, придбана Google у 2010 році, яка стала стандартом де-факто для захисту відеоконтенту в екосистемі Android. Вона використовується найбільшими стрімінговими сервісами, включаючи Netflix, Amazon Prime Video, Disney+ та Hulu, для запобігання несанкціонованому копіюванню та розповсюдженню контенту.
Widevine підтримує шифрування AES-128 CBC з використанням ключів контенту, які передаються лише авторизованим пристроям через захищений канал ліцензування. Система забезпечує наскрізний захист від моменту шифрування на сервері до декодування на пристрої користувача.
Компанія Widevine Technologies була заснована в 1999 році і спочатку розробляла рішення для захисту контенту на кабельних телевізійних платформах. Після придбання Google у 2010 році технологія була адаптована для мобільних платформ та інтегрована в ОС Android починаючи з версії 4.4 KitKat. З 2015 року Widevine став обов'язковим компонентом сертифікації Google Mobile Services.
У 2018 році Google представила Widevine Modular DRM, яка дозволила виробникам пристроїв реалізовувати різні рівні захисту апаратно без зміни коду ОС. Сьогодні Widevine Modular підтримується на більш ніж 4 мільярдах пристроїв і є основним DRM-механізмом на Android.
Архітектура Widevine складається з трьох ключових компонентів: Content Decryption Module (CDM), сервера ліцензій та засобу шифрування контенту. CDM виконує дешифрування на стороні клієнта та взаємодіє з апаратним Trusted Execution Environment (TEE) для безпечного зберігання ключів.
Сервер ліцензій Google керує видачею ключів на основі політик контент-провайдера, які визначають обмеження за часом, кількістю пристроїв та якістю відтворення. Інструмент шифрування готує контент на стороні провайдера, упаковуючи його у формат MPEG-DASH або HLS з шифруванням CENC.
Процес захисту починається з етапу упаковки контенту, коли медіафайл шифрується з використанням ключа контенту на сервері провайдера. Зашифрований потік передається на пристрій користувача через CDN, де CDM запитує ліцензію у сервера ліцензій.
Сервер ліцензій перевіряє автентичність пристрою та право доступу до контенту. Якщо перевірка проходить успішно, сервер видає ліцензію з ключем, який CDM використовує для розшифрування. Ліцензія може містити обмеження за часом перегляду та роздільною здатністю.
Обмін ліцензіями в Widevine реалізований через протокол EME (Encrypted Media Extensions) у браузерах або через SDK на мобільних платформах. Запит ліцензії формується CDM і надсилається на сервер ліцензій через HTTPS, що забезпечує захист від перехоплення ключів під час передачі.
Сервер обробляє запит і повертає ліцензію, яка також зашифрована і може бути розшифрована лише CDM пристрою. Апаратне прив'язування ключа до конкретного пристрою запобігає його перенесенню на інші платформи.
Widevine використовує стандарти Common Encryption (CENC), визначені в ISO/IEC 23001-7, що забезпечує сумісність з форматами MPEG-DASH та HLS. Шифрування AES-128 в режимі CTR або CBC застосовується для захисту медіапотоків.
Для ключової деривації використовується HKDF (HMAC-based Key Derivation Function), що дозволяє генерувати унікальні ключі для кожного сегмента контенту. Підтримка HLS у Widevine додана з версії Modular 2.0, що розширило сумісність з платформами 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 визначає три рівні безпеки, які різняться за способом виконання криптографічних операцій та обробки контенту. Рівень L1 забезпечує максимальний захист, L3 — мінімальний, L2 займає проміжне положення.
| Рівень | Тип захисту | Вимоги до пристрою | Максимальна роздільна здатність |
|---|---|---|---|
| L1 | Апаратна | TEE на рівні SoC | 4K Ultra HD |
| L2 | Гібридна | TEE для ключів, софт для відео | 1080p |
| L3 | Програмна | Лише програмний CDM | 720p |
Рівень L1 вимагає наявності Trusted Execution Environment (TEE) на апаратному рівні, де виконуються всі криптографічні операції. Ключі контенту ніколи не залишають TEE, що виключає їх вилучення навіть при компрометації основної ОС.
Пристрої з сертифікацією L1 можуть відтворювати контент у якості 4K та HDR, оскільки розшифрований відеопотік передається безпосередньо на захищений відеовихід без доступу з боку користувацьких процесів.
Рівень L3 виконує всі криптографічні операції програмно у звичайному користувацькому просторі. Це найменш безпечний режим, при якому ключі можуть бути вилучені з оперативної пам'яті пристрою.
Widevine L3 обмежує якість відтворення до 720p, що робить його придатним для перегляду на молодших пристроях або десктопних браузерах без апаратного захисту.
fun getSecurityLevel(): String {
val mediaDrm = MediaDrm(UUID.fromString(
"edef8ba9-79d6-4ace-a3c8-27dcd51d21ed"
))
val level = mediaDrm.getPropertyString(
"securityLevel"
)
return level.ifEmpty { "L3" }
}
Інтеграція Widevine в мобільні додатки виконується через стандартні API MediaDrm (Android) та AVContentKeySession (iOS). У більшості випадків розробнику не потрібно безпосередньо працювати з DRM — бібліотеки плеєрів, такі як ExoPlayer та AVPlayer, обробляють ліцензування автоматично.
На Android Widevine інтегрується через клас MediaDrm, який надає прямий доступ до CDM. Для стрімінгових додатків рекомендується використовувати ExoPlayer з модулем DrmSessionManager, який автоматично керує запитами ліцензій.
При ініціалізації плеєра необхідно вказати UUID схеми Widevine (`edef8ba9-79d6-4ace-a3c8-27dcd51d21ed`) та URL сервера ліцензій, який надає контент-провайдер. ExoPlayer самостійно обробляє цикл запиту та оновлення ліцензій.
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()
На веб-платформах Widevine працює через Media Source Extensions (MSE) та Encrypted Media Extensions (EME). Браузери на основі Chromium підтримують Widevine CDM вбудовано, і розробнику достатньо ініціалізувати сесію EME з правильною конфігурацією.
Для роботи з Widevine в браузері необхідно вказати ініціатор ліцензії з типом keySystem `com.widevine.alpha`. Після створення екземпляра MediaKeys браузер автоматично обробляє запити ліцензій.
При інтеграції Widevine важливо коректно обробляти помилки ліцензування, які виникають при відсутності прав доступу, закінченні підписки або несумісності пристрою. Помилка TYPE_EXPIRED_LICENSE вимагає оновлення ліцензії через повторний запит до сервера, а TYPE_OUTPUT_NOT_ALLOWED вказує на несумісність відеовиходу з політиками DRM.
Рекомендується реалізувати механізм повторних спроб з експоненційною затримкою при тимчасових мережевих помилках і показувати користувачу зрозуміле повідомлення при постійних відмовах ліцензування. Логування помилок DRM-сесій допомагає контент-провайдерам виявляти проблеми з пристроями та оптимізувати політики.
Widevine конкурує з FairPlay від Apple та PlayReady від Microsoft, формуючи три основні DRM-рішення на ринку мобільних платформ. Кожна технологія має свої переваги та обмеження, пов'язані з екосистемою платформи.
| Характеристика | Widevine | FairPlay | PlayReady |
|---|---|---|---|
| Розробник | Apple | Microsoft | |
| Основна платформа | Android, Chrome | iOS, tvOS, Safari | Windows, Xbox, UWP |
| Максимальний рівень | L1 (4K) | Еквівалент L1 (4K) | SL3000 (4K) |
| Апаратний захист | TEE | Secure Enclave | TPM + TEE |
Вибір DRM залежить від цільових платформ додатку. Для Android-first проєктів Widevine є природним вибором, оскільки він попередньо встановлений на всіх сертифікованих пристроях з Google Mobile Services і не вимагає додаткової ліцензійної плати.
Для крос-платформенних проєктів часто використовується мульти-DRM підхід з використанням агрегаторів ліцензій, таких як Axinom, EZDRM та Vualto, які надають єдиний API для роботи з усіма трьома DRM-системами. Це знижує складність інтеграції та централізує управління ліцензіями.
Часто задавані питання
Widevine — це технологія DRM від Google, призначена для захисту цифрового відеоконтенту від несанкціонованого копіювання. Вона використовується стрімінговими сервісами для шифрування відео та управління доступом до нього через систему ліцензування.
Widevine підтримує три рівні безпеки: L1 з апаратним шифруванням в TEE, L2 з гібридним підходом та L3 з повністю програмною реалізацією. L1 дозволяє відтворювати контент у 4K, L3 обмежений якістю 720p.
Перевірити рівень Widevine на Android можна через клас MediaDrm, запитавши властивість securityLevel. Для цього створюється екземпляр MediaDrm з UUID Widevine і викликається getPropertyString, або використовуються сторонні додатки типу DRM Info.
Widevine розроблений Google для Android та Chrome, а FairPlay — для iOS, tvOS та Safari. Обидва підтримують апаратне шифрування та 4K, але Widevine ширше розповсюджений на Android-пристроях, а FairPlay є стандартом де-факто в екосистемі Apple.
Для використання Widevine в мобільному додатку окрема ліцензія не потрібна — технологія вбудована в сертифіковані пристрої Android та Chrome. Плата стягується лише з контент-провайдерів за використання сервера ліцензій.
Підсумки
Ми розробимо мобільний застосунок під ключ
IT Sectr створює застосунки для iOS та Android для стартапів і бізнесу з 2017 року. Ми проконсультуємо вас і запропонуємо найкраще рішення.