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 извршава све криптографске операције софтверски у обичном корисничком простору. Ово је најмање безбедан режим у којем се кључеви могу издвојити из RAM меморије уређаја.
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-а у мобилне апликације врши се путем стандардних MediaDrm (Android) и AVContentKeySession (iOS) API-ја. У већини случајева, програмер не мора директно да ради са 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 са Widevine UUID-ом и позива getPropertyString, или се користе апликације трећих страна попут DRM Info.
Widevine је развио Google за Android и Chrome, а FairPlay — за iOS, tvOS и Safari. Оба подржавају хардверско шифровање и 4K, али је Widevine шире распрострањен на Android уређајима, док је FairPlay де факто стандард у Apple екосистему.
За коришћење Widevine-а у мобилној апликацији није потребна посебна лиценца — технологија је уграђена у сертификоване Android уређаје и Chrome. Накнада се наплаћује само провајдерима садржаја за коришћење сервера лиценци.
Резиме
Развићемо мобилну апликацију под кључ
IT Sectr креира iOS и Android апликације за стартапе и предузећа од 2017. године. Саветоваћемо вас и предложити најбоље решење.
Прочитајте такође