DRM în aplicațiile mobile: baze, scheme de protecție și principiul de funcționare

Autor: IT Sectr Publicat: 2026-05-24 Timp de citire: 11 min

DRM (Digital Rights Management) — un set de tehnologii de protecție a conținutului digital împotriva copierii și distribuirii neautorizate. În aplicațiile mobile, DRM este utilizat pentru criptarea video, audio și cărților electronice, asigurând respectarea acordurilor de licență între deținătorii de drepturi și consumatori. Potrivit Google Widevine Documentation, 2026, DRM este integrat în majoritatea serviciilor de streaming — Netflix, Spotify, Apple TV+ — și este obligatoriu pentru distribuția legală a conținutului premium.

Principalele

  • DRM (Digital Rights Management) — tehnologii de protecție a drepturilor de autor, care limitează copierea și distribuirea conținutului digital.
  • Trei scheme principale: Widevine (Google), FairPlay (Apple), PlayReady (Microsoft) — domină pe platformele mobile.
  • Widevine funcționează pe Android și iOS prin CDM, suportă trei niveluri de securitate: L1, L2, L3.
  • FairPlay de la Apple utilizează serverul KSM pentru generarea cheilor și este integrat în AVFoundation pe iOS și macOS.
  • Decriptarea DRM are loc la nivelul playerului media — dezvoltatorul primește fluxul video gata pregătit prin ExoPlayer sau AVPlayer.

Ce este DRM?

DRM — este un ansamblu de metode criptografice și software care controlează accesul la conținutul digital. Spre deosebire de criptarea simplă, DRM include un sistem de licențiere: conținutul este criptat, iar pentru vizualizare este necesară o cheie care este eliberată numai după verificarea drepturilor utilizatorului.

Sarcina principală a DRM este prevenirea pirateriei și asigurarea respectării restricțiilor regionale. Fără DRM, deținătorii de conținut (studiourile de film, casele de discuri) nu licențiază conținutul lor pentru platformele de streaming. Potrivit Motion Picture Association (2025), utilizarea DRM a redus distribuția ilegală a filmelor în streaming cu 62% față de era ripurilor DVD.

În dezvoltarea mobilă, DRM este integrat la nivelul playerului media: dezvoltatorul utilizează ExoPlayer (Android), AVPlayer (iOS) sau Shaka Player (Web), care suportă decriptarea încorporată a fluxului criptat. Dezvoltatorul nu trebuie să implementeze criptografia — este suficient să integreze SDK-ul pentru licențiere.

DRM și CENC (Common Encryption)

Standardul CENC (Common Encryption — ISO/IEC 23001-7) permite utilizarea unui singur fișier media criptat pentru toate sistemele DRM. Conținutul este criptat o singură dată, iar cheile sunt distribuite prin diferite servere de licențe. Acest lucru este critic pentru serviciile multi-platformă: Netflix criptează filmul o dată și îl livrează pe Android (Widevine), iOS (FairPlay) și Windows (PlayReady) fără recodificare.

CENC utilizează criptarea CBC cu chei diferite pentru pistele audio și video. Fiecare cheie este stocată în formă criptată în manifestul MPD (MPEG-DASH) sau M3U8 (HLS). Identificatorul de conținut (KID) leagă fluxul criptat de licența de pe server — fără o licență validă, cheia nu este decriptată.

Cum funcționează DRM în aplicațiile mobile

Procesul de redare DRM constă în patru etape: încărcarea manifestului, obținerea licenței, decriptarea conținutului și afișarea. Fiecare etapă este executată de diferite componente ale sistemului — playerul media, modulul CDM și serverul de licențe.

  • Încărcarea manifestului — playerul primește MPD (DASH) sau M3U8 (HLS) cu metadate despre segmentele criptate, schema de criptare și URL-ul serverului de licențe.
  • Solicitarea licenței — playerul transmite identificatorul de conținut (KID) către modulul Content Decryption Module (CDM), care formează o solicitare către serverul de licențe.
  • Obținerea cheii — serverul verifică drepturile utilizatorului (abonament, regiune, dispozitiv) și returnează cheia criptată cu cheia publică a dispozitivului.
  • Decriptarea fluxului — CDM decriptează cheia cu cheia privată a dispozitivului și o transmite playerului pentru decriptarea segmentelor video în timp real.

Content Decryption Module (CDM)

CDM — este un modul software sau hardware securizat care execută decriptarea conținutului. Pe Android, CDM este implementat la nivelul API-ului MediaDrm, pe iOS — integrat în AVFoundation prin AVContentKeySession. CDM nu dezvăluie niciodată cheia aplicației — toate operațiile criptografice sunt efectuate în interiorul unui mediu securizat (TEE — Trusted Execution Environment).

Pe dispozitivele cu suport hardware (Secure Level 1), CDM funcționează în interiorul TEE — cheia nu ajunge niciodată în memoria principală a dispozitivului. Aceasta este o cerință a studiourilor pentru redarea conținutului în 4K HDR. Pe dispozitivele fără TEE, cheile sunt decriptate software (L3), ceea ce reduce protecția și limitează calitatea maximă la 540p.

Principalele scheme DRM

Pe platformele mobile domină trei sisteme DRM. Fiecare este exclusiv pentru ecosistemul său, dar suportă CENC, ceea ce permite utilizarea unui singur conținut criptat pe toate platformele.

DRMDezvoltatorPlatformăCalitate max.Protecție hardware
WidevineGoogleAndroid, Chrome, Android TV4K HDR (L1)TEE (L1)
FairPlayAppleiOS, iPadOS, macOS, tvOS4K HDR (iOS)Secure Enclave
PlayReadyMicrosoftWindows, Xbox, Windows Phone4K (SL3000)TPM + TEE

Alegerea DRM pentru un serviciu multi-platformă

Pentru un serviciu de streaming care funcționează pe toate platformele, este necesar suportul pentru toate cele trei DRM. O soluție practică — utilizarea unui CDN cu suport multi-DRM (Muvi, Vualto, Axinom), care direcționează automat solicitările de licență către serverul corespunzător în funcție de dispozitivul utilizatorului. Potrivit Streaming Learning Center (2025), 78% dintre serviciile de streaming utilizează abordarea Multi-DRM.

Standardul MPEG-DASH cu CENC simplifică arhitectura: conținutul este criptat o dată cu o cheie comună, iar sistemul DRM este selectat pe client. Serverul de licențe primește o solicitare cu identificatorul dispozitivului și returnează cheia criptată pentru CDM-ul specific. Nicio diferență în conținut pentru diferite platforme — doar un alt server de licențe.

Widevine: niveluri și caracteristici

Widevine — sistemul DRM Google, care este standardul de facto pe Android. Suportă trei niveluri de securitate care determină unde și cum se execută decriptarea conținutului. Nivelul de securitate depinde de capacitățile hardware ale dispozitivului și determină rezoluția maximă a conținutului.

Nivelurile de securitate Widevine

Widevine L1 (hardware) — cel mai securizat nivel. Toate operațiile criptografice sunt efectuate în interiorul Trusted Execution Environment (TEE). Cheia nu părăsește niciodată zona securizată. Dispozitivele cu L1 pot reda conținut până la 4K HDR. Este necesară certificarea Google — o procedură prin care trec dispozitivele flagship.

Widevine L3 (software) — decriptarea are loc în memoria principală a dispozitivului. Cheia poate fi extrasă de un atacator tehnic avansat. Rezoluția este limitată la 540p (960x540) pentru conținutul premium. Toate dispozitivele cu Android suportă L3, chiar dacă nu sunt certificate pentru L1.

Widevine L2 — un nivel intermediar rar, unde decriptarea are loc în TEE, dar randarea — pe o cale neprotejată. Utilizat pe unele Smart TV. Pe dispozitivele mobile practic nu se întâlnește.

Cum să determinați nivelul Widevine pe dispozitiv

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 — protecție hardware"
        "L3" -> "Widevine L3 — protecție software"
        else -> "Widevine $securityLevel"
    }
}

Metoda solicită de la CDM proprietatea securityLevel prin UUID-ul Widevine. Valoarea returnată — un șir L1, L2 sau L3 — indică nivelul curent de protecție al dispozitivului. Această informație este critică pentru serviciile de streaming: dacă dispozitivul are doar L3, conținutul în 4K nu poate fi afișat.

Apple FairPlay: arhitectură și principiu de funcționare

FairPlay — sistemul DRM Apple, integrat în toate platformele ecosistemului: iOS, iPadOS, macOS, tvOS și watchOS. Spre deosebire de Widevine, FairPlay nu are niveluri de securitate — protecția este determinată de dispozitiv. Pe iOS cu Secure Enclave, FairPlay oferă un nivel de protecție comparabil cu Widevine L1.

FairPlay funcționează exclusiv cu protocolul HLS (HTTP Live Streaming). Conținutul este ambalat în segmente .ts (MPEG-TS) sau fragmente .m4s (fMP4). Manifestul M3U8 conține tag-ul #EXT-X-KEY cu URI-ul serverului de licențe (KSM — Key Server Module) și IV-ul de inițializare. La pornirea redării, AVPlayer citește manifestul și solicită cheia prin AVContentKeySession.

Integrarea 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)
        )
    }
}

Delegatul AVContentKeySession primește o solicitare de cheie cu identificatorul de conținut (assetId). Aplicația trimite acest ID la propriul server de licențe (KSM), care returnează cheia criptată. Apelul processContentKeyResponse transmite cheia către CDM pentru decriptare. Dacă licența este invalidă (expirată, neplătită), serverul returnează eroarea 403, iar AVPlayer nu începe redarea.

Persistent Key Loading pentru conținut offline

FairPlay suportă persistent keys — salvarea licenței pe dispozitiv pentru vizualizare offline. După obținerea cheii, aplicația apelează processContentKeyResponse cu flag-ul allowsPersistableKey. Cheia este salvată în Keychain și poate fi utilizată fără a apela la server la vizionarea repetată. Cu toate acestea, perioada de valabilitate a licenței offline este limitată — de obicei 7–30 de zile, după care este necesară reîmprospătarea.

Licențele offline sunt stocate în depozitul securizat iOS — Keychain. La încercarea de spargere (jalibreak, extragerea dump-ului de memorie), Secure Enclave distruge cheile. Potrivit Apple (2025), tehnologia persistent keys este utilizată în Apple TV+, Netflix și Disney+ pentru descărcarea conținutului pe iPad înainte de călătorie.

Microsoft PlayReady pentru protecție universală

PlayReady — DRM de la Microsoft, utilizat pe Windows, Xbox și Windows Phone învechit. Deși pe dispozitivele mobile PlayReady este mai puțin frecvent decât Widevine și FairPlay, este important pentru soluțiile universale de streaming care funcționează pe toate platformele Microsoft. PlayReady suportă atât protecția software, cât și hardware prin TPM.

PlayReady utilizează arhitectura SL (Security Level): SL2000 (software, analog Widevine L3), SL3000 (hardware, analog L1). Pe Xbox Series X, PlayReady SL3000 funcționează prin TEE+TPM — cheile sunt extrase doar în mediul securizat. Aceasta permite redarea 4K Blu-ray pe consolă fără risc de copiere.

Potrivit Microsoft Docs (2026), PlayReady suportă CENC și poate funcționa cu MPEG-DASH prin Media Source Extensions (MSE) în browserele Edge. Pentru aplicații mobile pe Android și iOS, PlayReady este disponibil prin SDK, dar utilizat rar — predominant pentru aplicații corporative și servicii media Microsoft.

PlayReady Native SDK pentru Android

Microsoft oferă PlayReady Native SDK pentru Android și iOS. Integrarea se realizează prin ExoPlayer cu extensia PlayReady: dezvoltatorul adaugă PlayReadyRenderer, care este încorporat în lanțul de decodare. ExoPlayer comută automat între Widevine și PlayReady în funcție de care DRM este specificat în manifestul MPD.

Deși PlayReady se întâlnește rar în aplicațiile mobile, suportul său este obligatoriu pentru serviciile care fac parte din ecosistemul Microsoft — de exemplu, platformele corporative de formare pe SharePoint și Stream. Potrivit Microsoft (2025), PlayReady este utilizat în 23% dintre soluțiile media corporative față de 62% pentru Widevine.

Integrarea DRM în aplicația mobilă

Integrarea DRM în aplicația mobilă nu necesită scrierea de cod criptografic — dezvoltatorul lucrează cu un player care suportă DRM din start. Să analizăm integrarea pe Android prin ExoPlayer cu extensia DRM.

Configurarea ExoPlayer cu suport 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 gestionează sesiunea DRM: creează o sesiune MediaDrm, procesează solicitările de licență și transmite cheile decoderului. Parametrul setMultiSession(true) permite decriptarea simultană a mai multor fluxuri (audio + video) în sesiuni diferite. MediaDrmCallback implementează solicitarea HTTP către serverul de licențe — de obicei POST cu corpul solicitării în format SignedRequest.

MediaDrmCallback pentru solicitarea licenței

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-ul trimite o solicitare POST către serverul de licențe cu UUID-ul Widevine în corp. Serverul verifică autentificarea utilizatorului (token-ul în antet) și returnează cheia criptată. Dacă utilizatorul nu are un abonament activ, serverul returnează 403 Forbidden — ExoPlayer generează o eroare DRM care trebuie gestionată prin onPlayerError.

Gestionarea erorilor DRM

Erorile DRM apar atunci când licența este invalidă, expirată sau dispozitivul nu suportă nivelul de protecție necesar. ExoPlayer transmite eroarea prin Player.Listener.onPlayerError cu codul TYPE_DRM_LICENSE_EXPIRED, TYPE_DRM_UNSUPPORTED sau TYPE_SOURCE. Se recomandă afișarea unui mesaj informativ utilizatorului: „Conținutul nu este disponibil pentru acest dispozitiv” sau „Reîncepeți abonamentul pentru vizionare”.

Potrivit analiticii serviciilor de streaming (2025), până la 8% dintre pornirile eșuate ale redării sunt legate de erori DRM. Dintre acestea, 60% — licențe expirate, 25% — incompatibilitatea dispozitivului și 15% — erori de rețea la solicitarea cheii. Încercarea automată repetată după 5 secunde rezolvă 40% dintre cazurile de erori de rețea.

Întrebări frecvente

Se poate ocoli DRM pe un dispozitiv mobil?

Tehnic posibil pe dispozitivele cu Widevine L3 (protecție software), unde cheia poate fi extrasă din memorie. Pe L1 și FairPlay cu Secure Enclave, ocolirea este extrem de dificilă — este necesar accesul fizic la TEE. Studiourile de conținut se orientează către dispozitivele L1 pentru conținut premium.

De ce Netflix arată calitate scăzută pe Android-ul meu?

Cel mai probabil, dispozitivul nu este certificat pentru Widevine L1 și utilizează L3. Netflix limitează calitatea la 540p pe dispozitivele L3. Verificați nivelul Widevine prin aplicația DRM Info din Google Play. Dispozitivele flagship Samsung, Pixel și OnePlus au de obicei L1.

Care DRM este mai bun pentru un serviciu de streaming?

Utilizați Multi-DRM: Widevine pentru Android, FairPlay pentru Apple, PlayReady pentru Windows. Servicii precum Axinom sau Vualto oferă un API unic pentru toate cele trei DRM. Conținutul este criptat o dată prin CENC, iar selecția DRM are loc automat pe partea clientului.

Cum să implementez vizionarea offline cu DRM?

Pe iOS utilizați persistent keys FairPlay prin AVContentKeySession. Pe Android — Widevine Offline License prin ExoPlayer OfflineLicenseHelper. Cheia este salvată local în Keychain (iOS) sau KeyStore (Android) cu o perioadă de valabilitate limitată — de obicei de la 7 la 30 de zile.

Ce este KID în contextul DRM?

KID (Key ID) — un identificator unic de 16 octeți al cheii de criptare în manifestul CENC. Fiecare KID este legat de un segment specific de conținut (de exemplu, un segment de 10 minute al unui film). Serverul de licențe utilizează KID pentru a găsi cheia corespunzătoare în baza sa de date. Un film poate conține până la 20 de KID-uri diferite pentru diferite părți.

Concluzii

  • DRM (Digital Rights Management) — sistem de protecție criptografică a conținutului digital, obligatoriu pentru streamingul legal.
  • Trei scheme principale: Widevine (Android), FairPlay (iOS), PlayReady (Windows) — utilizează CENC pentru criptarea unitară a conținutului.
  • Widevine L1 (protecție hardware prin TEE) permite 4K HDR, L3 (software) limitat la 540p. Nivelul se verifică prin MediaDrm.getPropertyString.
  • FairPlay funcționează doar cu HLS și utilizează AVContentKeySession pentru solicitarea cheilor prin serverul KSM.
  • Integrarea DRM se realizează prin playerul media: ExoPlayer (Android) cu DefaultDrmSessionManager, AVPlayer (iOS) cu AVContentKeySession.
  • Erorile DRM sunt gestionate prin onPlayerError — licențe expirate, incompatibilitatea dispozitivului și erori de rețea constituie 8% dintre pornirile eșuate.
  • Pentru serviciile multi-platformă se recomandă abordarea Multi-DRM cu un furnizor CDN și criptarea unitară CENC a conținutului.

Vom dezvolta o aplicație mobilă la cheie

IT Sectr creează aplicații iOS și Android pentru startup-uri și afaceri din 2017. Vă vom consilia și vă vom propune cea mai bună soluție.

Discutați proiectul

Citiți și