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, 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 г. Ще ви консултираме и ще предложим най-доброто решение.
Прочетете също