DRM у мобилним апликацијама: основе, шеме заштите и принцип рада

Аутор: IT Sectr Објављено: 2026-05-24 Време читања: 11 мин

DRM (Digital Rights Management) — скуп технологија заштите дигиталног садржаја од неовлашћеног копирања и дистрибуције. У мобилним апликацијама DRM се користи за шифровање видеа, аудија и електронских књига, обезбеђујући поштовање лиценцних уговора између власника права и потрошача. Према подацима Google Widevine Documentation, 2026, DRM је уграђен у већину стриминг сервиса — Netflix, Spotify, Apple TV+ — и обавезан је за легалну дистрибуцију премијум садржаја.

Најважније

  • DRM (Digital Rights Management) — технологије заштите ауторских права, које ограничавају копирање и дистрибуцију дигиталног садржаја.
  • Три главне шеме: Widevine (Google), FairPlay (Apple), PlayReady (Microsoft) — доминирају на мобилним платформама.
  • Widevine ради на Android и iOS преко CDM-а и подржава три нивоа безбедности: L1, L2, L3.
  • FairPlay компаније Apple користи KSM сервер за генерисање кључева и уграђен је у AVFoundation на iOS и macOS.
  • DRM дешифровање се дешава на нивоу медиа плејера — програмер добија готов видео стрим преко ExoPlayer или AVPlayer-а.

Шта је DRM?

DRM — скуп криптографских и софтверских метода који контролишу приступ дигиталном садржају. За разлику од једноставног шифровања, DRM укључује систем лиценцирања: садржај је шифрован и за његово гледање је потребан кључ, који се издаје тек након провере права корисника.

Основни задатак DRM-а је да спречи пиратерију и обезбеди поштовање регионалних ограничења. Без DRM-а власници садржаја (филмски студији, издавачке куће) не би лиценцирали свој садржај за стриминг платформе. Према подацима Motion Picture Association (2025), коришћење DRM-а смањило је нелегалну дистрибуцију филмова у стримингу за 62% у поређењу са ером DVD рипова.

У мобилном развоју DRM се уграђује на нивоу медиа плејера: програмер користи ExoPlayer (Android), AVPlayer (iOS) или Shaka Player (Web), који подржавају уграђено дешифровање шифрованог стрима. Програмер не мора да имплементира криптографију — довољно је да интегрише SDK за лиценцирање.

DRM и CENC (Common Encryption)

Стандард CENC (Common Encryption — ISO/IEC 23001-7) омогућава коришћење једног шифрованог медија фајла за све DRM системе. Садржај се шифрује једном, а кључеви се дистрибуирају преко различитих сервера лиценци. Ово је критично важно за мултиплатформске сервисе: Netflix шифрује филм једном и испоручује га на Android (Widevine), iOS (FairPlay) и Windows (PlayReady) без прекодирања.

CENC користи CBC шифровање са различитим кључевима за аудио и видео записе. Сваки кључ се чува у шифрованом облику у манифесту MPD (MPEG-DASH) или M3U8 (HLS). Идентификатор садржаја (KID) повезује шифровани стрим са лиценцом на серверу — без важеће лиценце кључ се не дешифрује.

Како функционише DRM у мобилним апликацијама

Процес DRM репродукције састоји се од четири фазе: учитавање манифеста, добијање лиценце, дешифровање садржаја и приказивање. Сваку фазу извршавају различите компоненте система — медиа плејер, CDM модул и сервер лиценци.

  • Учитавање манифеста — плејер добија MPD (DASH) или M3U8 (HLS) са метаподацима о шифрованим сегментима, шеми шифровања и URL адреси сервера лиценци.
  • Захтев за лиценцу — плејер прослеђује идентификатор садржаја (KID) у Content Decryption Module (CDM), који формира захтев ка серверу лиценци.
  • Добијање кључа — сервер проверава права корисника (претплата, регион, уређај) и враћа кључ, шифрован јавним кључем уређаја.
  • Дешифровање стрима — CDM дешифрује кључ помоћу приватног кључа уређаја и прослеђује га медиа плејеру за дешифровање видео сегмената у реалном времену.

Content Decryption Module (CDM)

CDM — заштићени софтверски или хардверски модул који врши дешифровање садржаја. На Android-у CDM је имплементиран на нивоу MediaDrm API-ја, а на iOS-у је уграђен у AVFoundation преко AVContentKeySession-а. CDM никада не открива кључ апликацији — све криптографске операције се извршавају унутар заштићеног окружења (TEE — Trusted Execution Environment).

На уређајима са хардверском подршком (Secure Level 1) CDM ради унутар TEE-а — кључ никада не доспева у главну меморију уређаја. То је захтев студија за репродукцију садржаја у 4K HDR. На уређајима без TEE-а кључеви се дешифрују програмски (L3), што смањује заштиту и ограничава максимални квалитет на 540p.

Главне шеме DRM

На мобилним платформама доминирају три DRM система. Сваки је ексклузиван за свој екосистем, али подржава CENC, што омогућава коришћење јединственог шифрованог садржаја на свим платформама.

DRMПрограмерПлатформаМакс. квалитетХардверска заштита
WidevineGoogleAndroid, Chrome, Android TV4K HDR (L1)TEE (L1)
FairPlayAppleiOS, iPadOS, macOS, tvOS4K HDR (iOS)Secure Enclave
PlayReadyMicrosoftWindows, Xbox, Windows Phone4K (SL3000)TPM + TEE

Избор DRM-а за мултиплатформски сервис

За стриминг сервис који ради на свим платформама потребна је подршка за сва три DRM-а. Практично решење је коришћење CDN-а са подршком за мулти-DRM (Muvi, Vualto, Axinom), који аутоматски усмеравају захтеве за лиценцама ка одговарајућем серверу у зависности од уређаја корисника. Према подацима Streaming Learning Center (2025), 78% стриминг сервиса користи Multi-DRM приступ.

Стандард MPEG-DASH са CENC-ом поједностављује архитектуру: садржај се шифрује једном заједничким кључем, а DRM систем се бира на клијенту. Сервер лиценци добија захтев са идентификатором уређаја и враћа кључ, шифрован за одређени CDM. Нема никакве разлике у садржају за различите платформе — само различити сервери лиценци.

Widevine: нивои и карактеристике

Widevine — DRM систем компаније Google, који је де факто стандард на Android-у. Подржава три нивоа безбедности, који одређују где и како се врши дешифровање садржаја. Ниво безбедности зависи од хардверских могућности уређаја и одређује максималну резолуцију садржаја.

Нивои безбедности Widevine-а

Widevine L1 (хардверски) — најзаштићенији ниво. Све криптографске операције се извршавају унутар Trusted Execution Environment-а (TEE). Кључ никада не напушта заштићену област. Уређаји са L1 могу да репродукују садржај до 4K HDR. Потребна је Google сертификација — процедура коју пролазе водећи (флагман) уређаји.

Widevine L3 (програмски) — дешифровање се извршава у главној меморији уређаја. Кључ може да извуче технички упућени нападач. Резолуција је ограничена на 540p (960x540) за премијум садржај. Сви Android уређаји подржавају L3, чак и ако нису сертификовани за L1.

Widevine L2 — редак прелазни ниво, где се дешифровање извршава у TEE-у, али је рендеровање на незаштићеном путу. Користи се на неким Smart TV уређајима. На мобилним уређајима се практично не среће.

Како одредити ниво Widevine-а на уређају

kotlin
import android.media.MediaDrm
import android.media.UUID

fun checkWidevineLevel(): String {
    val widevineUuid = UUID.fromString("edef8ba9-79d6-4ace-a3c8-27dcd51d21ed")
    val mediaDrm = MediaDrm(widevineUuid)

    val securityLevel = mediaDrm.getPropertyString(
        MediaDrm.PROPERTY_SECURITY_LEVEL
    )

    return when (securityLevel) {
        "L1" -> "Widevine L1 — хардверска заштита"
        "L3" -> "Widevine L3 — софтверска заштита"
        else -> "Widevine $securityLevel"
    }
}

Метод захтева од CDM-а својство securityLevel преко Widevine UUID-а. Враћена вредност — ниска L1, L2 или L3, која указује на тренутни ниво заштите уређаја. Ова информација је кључна за стриминг сервисе: ако уређај има само L3, садржај у 4K не сме да се приказује.

Apple FairPlay: архитектура и принцип рада

FairPlay — DRM систем компаније Apple, уграђен у све платформе екосистема: iOS, iPadOS, macOS, tvOS и watchOS. За разлику од Widevine-а, FairPlay нема нивое безбедности — заштиту одређује уређај. На iOS-у са Secure Enclave, FairPlay пружа ниво заштите упоредив са Widevine L1.

FairPlay ради искључиво са протоколом HLS (HTTP Live Streaming). Садржај се пакује у .ts сегменте (MPEG-TS) или .m4s фрагменте (fMP4). Манифест M3U8 садржи тег #EXT-X-KEY са URI адресом сервера лиценци (KSM — Key Server Module) и IV за иницијализацију. При покретању репродукције AVPlayer чита манифест и преко AVContentKeySession-а захтева кључ.

Интеграција FairPlay Streaming-а

swift
import AVFoundation

let contentKeySession = AVContentKeySession(keySystem: fairPlayStreaming)
let player = AVPlayer(playerItem: playerItem)
contentKeySession.setDelegate(self, queue: delegateQueue)

func contentKeySession(
    _ session: AVContentKeySession,
    didProvide keyRequest: AVContentKeyRequest
) {
    let assetId = keyRequest.identifier as! String
    sendLicenseRequest(assetId) { licenseData in
        keyRequest.processContentKeyResponse(
            AVContentKeyResponse(fairPlayStreamingKeyResponseData: licenseData)
        )
    }
}

Делегат AVContentKeySession-а добија захтев за кључ са идентификатором садржаја (assetId). Апликација шаље овај ID на свој сервер лиценци (KSM), који враћа шифровани кључ. Позив processContentKeyResponse прослеђује кључ у CDM за дешифровање. Ако је лиценца неважећа (истекла, неплаћена), сервер враћа грешку 403, и AVPlayer не започиње репродукцију.

Persistent Key Loading за офлајн садржај

FairPlay подржава persistent keys — чување лиценце на уређају за офлајн гледање. Након добијања кључа, апликација позива processContentKeyResponse са флагом allowsPersistableKey. Кључ се чува у Keychain-у и може да се користи без обраћања серверу при поновном гледању. Међутим, рок важења офлајн лиценце је ограничен — обично 7–30 дана, након чега је потребно обнављање.

Офлајн лиценце се чувају у заштићеном iOS складишту — Keychain-у. При покушају хакерства (jalibreak, издвајање дампа) Secure Enclave уништава кључеве. Према подацима Apple-а (2025), технологија persistent keys користи се у Apple TV+, Netflix-у и Disney+ за преузимање садржаја на iPad пре путовања.

Microsoft PlayReady за универзалну заштиту

PlayReady — DRM компаније Microsoft, који се користи на Windows, Xbox и старијим Windows Phone уређајима. Иако се на мобилним уређајима PlayReady среће ређе од Widevine-а и FairPlay-а, важан је за универзална стриминг решења која раде на свим Microsoft платформама. PlayReady подржава и програмску и хардверску заштиту преко TPM-а.

PlayReady користи архитектуру SL (Security Level): SL2000 (програмска, аналог Widevine L3) и SL3000 (хардверска, аналог L1). На Xbox Series X, PlayReady SL3000 ради преко TEE+TPM-а — кључеви се издвајају само у заштићеном окружењу. Ово омогућава репродукцију 4K Blu-ray-а на конзоли без ризика од копирања.

Према подацима Microsoft Docs (2026), PlayReady подржава CENC и може да ради са MPEG-DASH преко Media Source Extensions (MSE) у Edge прегледачима. За мобилне апликације на Android-у и iOS-у PlayReady је доступан преко SDK-а, али се користи ретко — углавном за корпоративне апликације и Microsoft медија сервисе.

PlayReady Native SDK за Android

Microsoft пружа PlayReady Native SDK за Android и iOS. Интеграција се врши преко ExoPlayer-а са PlayReady екстензијом: програмер додаје PlayReadyRenderer, који се уграђује у ланац декодирања. ExoPlayer аутоматски пребацује између Widevine-а и PlayReady-а у зависности од тога која DRM је наведена у MPD манифесту.

Иако се PlayReady ретко среће у мобилним апликацијама, његова подршка је обавезна за сервисе унутар Microsoft екосистема — на пример, корпоративне платформе за обуку на SharePoint и Stream-у. Према подацима Microsoft-а (2025), PlayReady се користи у 23% корпоративних медија решења, у поређењу са 62% за Widevine.

Интеграција DRM-а у мобилну апликацију

Интеграција DRM-а у мобилну апликацију не захтева писање криптографског кода — програмер ради са плејером који подржава DRM из кутије. Размотримо интеграцију на Android-у преко ExoPlayer-а са DRM екстензијом.

Подешавање ExoPlayer-а са подршком за Widevine

kotlin
val drmSessionManager = DefaultDrmSessionManager.Builder()
    .setUuidAndExoMediaDrmProvider(
        C.WIDEVINE_UUID,
        FrameworkMediaDrm.DEFAULT_PROVIDER
    )
    .setMultiSession(true)
    .build(mediaDrmCallback)

val mediaItem = MediaItem.Builder()
    .setUri(mpdUrl)
    .setDrmConfiguration(
        MediaItem.DrmConfiguration.Builder(C.WIDEVINE_UUID)
            .setLicenseUri(licenseUrl)
            .setLicenseRequestHeaders(headers)
            .build()
    )
    .build()

exoPlayer.setMediaItem(mediaItem)
exoPlayer.prepare()

DefaultDrmSessionManager управља DRM сесијом: креира MediaDrm сесију, обрађује захтеве за лиценцама и прослеђује кључеве декодеру. Параметар setMultiSession(true) омогућава истовремено дешифровање више стримова (аудио + видео) у различитим сесијама. MediaDrmCallback имплементира HTTP захтев ка серверу лиценци — обично POST са телом захтева у SignedRequest формату.

MediaDrmCallback за захтев лиценце

kotlin
val mediaDrmCallback = DefaultDrmSessionManager.MediaDrmCallback {
    url, requestBody ->

    val response = OkHttpClient().newCall(
        Request.Builder()
            .url(url)
            .post(RequestBody.create(requestBody, MediaType.parse("application/octet-stream")))
            .addHeader("Authorization", "Bearer ")
            .build()
    ).execute()

    val responseBytes = response.body?.bytes()
        ?: throw DrmSessionException(Exception("Empty license response"))

    responseBytes
}

Callback шаље POST захтев на сервер лиценци са Widevine UUID у телу. Сервер проверава аутентификацију корисника (токен у заглављу) и враћа шифровани кључ. Ако корисник нема активну претплату, сервер враћа 403 Forbidden — ExoPlayer генерише DRM грешку, коју треба обрадити преко onPlayerError.

Обрада DRM грешака

DRM грешке настају када је лиценца неважећа, истекла, или уређај не подржава потребан ниво заштите. ExoPlayer прослеђује грешку преко Player.Listener.onPlayerError са кодом TYPE_DRM_LICENSE_EXPIRED, TYPE_DRM_UNSUPPORTED или TYPE_SOURCE. Препоручује се да се кориснику прикаже информативна порука: „Садржај није доступан за овај уређај“ или „Обновите претплату за гледање“.

Према подацима аналитике стриминг сервиса (2025), до 8% неуспешних покретања репродукције повезано је са DRM грешкама. Од тога 60% чине истекле лиценце, 25% некомпатибилност уређаја и 15% мрежне грешке при захтеву кључа. Аутоматски поновни покушај након 5 секунди решава 40% случајева мрежних грешака.

Често постављана питања

Да ли је могуће заобићи DRM на мобилном уређају?

Технички је могуће на уређајима са Widevine L3 (програмска заштита), где кључ може да се извуче из меморије. На L1 и FairPlay-у са Secure Enclave заобилажење је изузетно сложено — потребан је физички приступ TEE-у. Студији садржаја се оријентишу на L1 уређаје за премијум садржај.

Зашто Netflix приказује низак квалитет на мом Android-у?

Највероватније уређај није сертификован за Widevine L1 и користи L3. Netflix ограничава квалитет на 540p на L3 уређајима. Проверите ниво Widevine-а преко апликација DRM Info из Google Play-а. Водећи уређаји Samsung, Pixel и OnePlus обично имају L1.

Који DRM је најбољи за стриминг сервис?

Користите Multi-DRM: Widevine за Android, FairPlay за Apple, PlayReady за Windows. Сервиси попут Axinom-а или Vualto-а пружају јединствени API за сва три DRM-а. Садржај се шифрује једном преко CENC-а, а избор DRM-а се дешава аутоматски на страни клијента.

Како реализовати офлајн гледање са DRM-ом?

На iOS-у користите persistent keys FairPlay-а преко AVContentKeySession-а. На Android-у — Widevine Offline License преко ExoPlayer OfflineLicenseHelper-а. Кључ се чува локално у Keychain-у (iOS) или KeyStore-у (Android) са ограниченим роком важења — обично од 7 до 30 дана.

Шта је KID у контексту DRM-а?

KID (Key ID) — јединствени 16-бајтни идентификатор кључа шифровања у CENC манифесту. Сваки KID је везан за одређени део садржаја (на пример, 10-минутни сегмент филма). Сервер лиценци користи KID за проналажење одговарајућег кључа у својој бази података. Један филм може да садржи до 20 различитих KID-ова за различите делове.

Закључак

  • DRM (Digital Rights Management) — систем криптографске заштите дигиталног садржаја, обавезан за легални стриминг.
  • Три главне шеме: Widevine (Android), FairPlay (iOS), PlayReady (Windows) — користе CENC за јединствено шифровање садржаја.
  • Widevine L1 (хардверска заштита преко TEE-а) омогућава 4K HDR, L3 (програмска) је ограничен на 540p. Ниво се проверава преко MediaDrm.getPropertyString-а.
  • FairPlay ради само са HLS-ом и користи AVContentKeySession за захтев кључева преко KSM сервера.
  • Интеграција DRM-а се врши преко медиа плејера: ExoPlayer (Android) са DefaultDrmSessionManager-ом, AVPlayer (iOS) са AVContentKeySession-ом.
  • DRM грешке се обрађују преко onPlayerError-а — истекле лиценце, некомпатибилност уређаја и мрежни кварови чине 8% неуспешних покретања.
  • За мултиплатформске сервисе препоручује се Multi-DRM приступ са CDN провајдером и јединственим CENC шифровањем садржаја.

Развићемо мобилну апликацију под кључ

IT Sectr креира iOS и Android апликације за стартапе и предузећа од 2017. године. Саветоваћемо вас и предложити најбоље решење.

Разговарајте о пројекту

Прочитајте такође