DRM nelle app mobili: fondamenti, schemi di protezione e principio di funzionamento

Autore: IT Sectr Pubblicato: 2026-05-24 Tempo di lettura: 11 min

DRM (Digital Rights Management) è un insieme di tecnologie per proteggere i contenuti digitali dalla copia e distribuzione non autorizzate. Nelle applicazioni mobili, il DRM viene utilizzato per crittografare video, audio e libri elettronici, garantendo il rispetto degli accordi di licenza tra titolari dei diritti e consumatori. Secondo Google Widevine Documentation, 2026, il DRM è integrato nella maggior parte dei servizi di streaming — Netflix, Spotify, Apple TV+ — ed è obbligatorio per la distribuzione legale di contenuti premium.

Punti chiave

  • DRM (Digital Rights Management) — tecnologie che proteggono il diritto d'autore limitando la copia e la distribuzione di contenuti digitali.
  • Tre schemi principali: Widevine (Google), FairPlay (Apple), PlayReady (Microsoft) — dominano le piattaforme mobili.
  • Widevine funziona su Android e iOS tramite CDM, supportando tre livelli di sicurezza: L1, L2, L3.
  • FairPlay di Apple utilizza il server KSM per la generazione delle chiavi ed è integrato in AVFoundation su iOS e macOS.
  • La decodifica DRM avviene a livello di lettore multimediale — lo sviluppatore riceve un flusso video pronto tramite ExoPlayer o AVPlayer.

Cos'è il DRM?

DRM è un insieme di metodi crittografici e software che controllano l'accesso ai contenuti digitali. A differenza della semplice crittografia, il DRM include un sistema di licenze: il contenuto è crittografato e per visualizzarlo è necessaria una chiave che viene rilasciata solo dopo la verifica dei diritti dell'utente.

L'obiettivo principale del DRM è prevenire la pirateria e garantire il rispetto delle restrizioni regionali. Senza DRM, i proprietari di contenuti (studi cinematografici, etichette discografiche) non concedono in licenza i propri contenuti per le piattaforme di streaming. Secondo la Motion Picture Association (2025), l'uso del DRM ha ridotto la distribuzione illegale di film in streaming del 62% rispetto all'era dei DVD-rip.

Nello sviluppo mobile, il DRM è integrato a livello di lettore multimediale: lo sviluppatore utilizza ExoPlayer (Android), AVPlayer (iOS) o Shaka Player (Web), che supportano la decodifica integrata del flusso crittografato. Lo sviluppatore non deve implementare la crittografia — basta integrare un SDK per la gestione delle licenze.

DRM e CENC (Common Encryption)

Lo standard CENC (Common Encryption — ISO/IEC 23001-7) consente di utilizzare un unico file multimediale crittografato per tutti i sistemi DRM. Il contenuto viene crittografato una volta e le chiavi vengono distribuite tramite diversi server di licenze. Questo è fondamentale per i servizi multipiattaforma: Netflix crittografa un film una volta e lo distribuisce ad Android (Widevine), iOS (FairPlay) e Windows (PlayReady) senza necessità di ricodifica.

CENC utilizza la crittografia CBC con chiavi diverse per le tracce audio e video. Ogni chiave viene memorizzata crittografata nel manifesto MPD (MPEG-DASH) o M3U8 (HLS). L'identificatore del contenuto (KID) collega il flusso crittografato alla licenza sul server — senza una licenza valida, la chiave non può essere decodificata.

Come funziona il DRM nelle applicazioni mobili

Il processo di riproduzione DRM si compone di quattro fasi: caricamento del manifesto, ottenimento della licenza, decodifica del contenuto e visualizzazione. Ogni fase è eseguita da diversi componenti del sistema — il lettore multimediale, il modulo CDM e il server di licenze.

  • Caricamento del manifesto — il lettore riceve MPD (DASH) o M3U8 (HLS) con metadati sui segmenti crittografati, lo schema di crittografia e l'URL del server di licenze.
  • Richiesta di licenza — il lettore passa l'identificatore del contenuto (KID) al Modulo di Decodifica del Contenuto (CDM), che genera una richiesta al server di licenze.
  • Ottenimento della chiave — il server verifica i diritti dell'utente (abbonamento, regione, dispositivo) e restituisce una chiave crittografata con la chiave pubblica del dispositivo.
  • Decodifica del flusso — il CDM decodifica la chiave utilizzando la chiave privata del dispositivo e la passa al lettore multimediale per la decodifica in tempo reale dei segmenti video.

Modulo di Decodifica del Contenuto (CDM)

CDM è un modulo software o hardware protetto che esegue la decodifica del contenuto. Su Android, il CDM è implementato a livello di API MediaDrm; su iOS, è integrato in AVFoundation tramite AVContentKeySession. Il CDM non espone mai la chiave all'applicazione — tutte le operazioni crittografiche vengono eseguite all'interno di un ambiente sicuro (TEE — Trusted Execution Environment).

Sui dispositivi con supporto hardware (Livello di sicurezza 1), il CDM opera all'interno del TEE — la chiave non entra mai nella memoria principale del dispositivo. Questo è un requisito degli studi per la riproduzione di contenuti 4K HDR. Sui dispositivi senza TEE, le chiavi vengono decodificate tramite software (L3), riducendo la sicurezza e limitando la qualità massima a 540p.

Principali schemi DRM

Tre sistemi DRM dominano le piattaforme mobili. Ciascuno è esclusivo per il proprio ecosistema, ma tutti supportano CENC, consentendo di utilizzare un unico flusso di contenuti crittografati su tutte le piattaforme.

DRMSviluppatorePiattaformaQualità massimaProtezione hardware
WidevineGoogleAndroid, Chrome, Android TV4K HDR (L1)TEE (L1)
FairPlayAppleiOS, iPadOS, macOS, tvOS4K HDR (iOS)Secure Enclave
PlayReadyMicrosoftWindows, Xbox, Windows Phone4K (SL3000)TPM + TEE

Scelta del DRM per un servizio multipiattaforma

Per un servizio di streaming che funzioni su tutte le piattaforme, è necessario il supporto di tutti e tre i sistemi DRM. Una soluzione pratica è utilizzare una CDN con supporto multi-DRM (Muvi, Vualto, Axinom), che instrada automaticamente le richieste di licenza al server appropriato in base al dispositivo dell'utente. Secondo Streaming Learning Center (2025), il 78% dei servizi di streaming utilizza l'approccio Multi-DRM.

Lo standard MPEG-DASH con CENC semplifica l'architettura: il contenuto viene crittografato una volta con una chiave condivisa e il sistema DRM viene selezionato lato client. Il server di licenze riceve una richiesta con l'identificatore del dispositivo e restituisce una chiave crittografata per il CDM specifico. Nessuna differenza nel contenuto per diverse piattaforme — solo un server di licenze diverso.

Widevine: livelli e caratteristiche

Widevine è il sistema DRM di Google, lo standard de facto su Android. Supporta tre livelli di sicurezza che determinano dove e come viene eseguita la decodifica del contenuto. Il livello di sicurezza dipende dalle capacità hardware del dispositivo e determina la risoluzione massima del contenuto.

Livelli di sicurezza di Widevine

Widevine L1 (hardware) — il livello più sicuro. Tutte le operazioni crittografiche vengono eseguite all'interno del Trusted Execution Environment (TEE). La chiave non lascia mai l'area sicura. I dispositivi L1 possono riprodurre contenuti fino a 4K HDR. È richiesta la certificazione Google — un processo che i dispositivi di punta seguono.

Widevine L3 (software) — la decodifica viene eseguita nella memoria principale del dispositivo. Un utente malintenzionato tecnicamente competente può estrarre la chiave. La risoluzione è limitata a 540p (960x540) per i contenuti premium. Tutti i dispositivi Android supportano L3, anche se non certificati per L1.

Widevine L2 — un raro livello intermedio in cui la decodifica viene eseguita nel TEE, ma il rendering segue un percorso non protetto. Utilizzato su alcuni Smart TV. Praticamente mai presente sui dispositivi mobili.

Come determinare il livello Widevine su un dispositivo

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

Il metodo interroga il CDM per la proprietà securityLevel tramite l'UUID di Widevine. Il valore restituito è una stringa L1, L2 o L3, che indica il livello di protezione attuale del dispositivo. Questa informazione è fondamentale per i servizi di streaming: se un dispositivo ha solo L3, il contenuto 4K non può essere visualizzato.

Apple FairPlay: architettura e principio di funzionamento

FairPlay è il sistema DRM di Apple, integrato in tutte le piattaforme dell'ecosistema: iOS, iPadOS, macOS, tvOS e watchOS. A differenza di Widevine, FairPlay non ha livelli di sicurezza — la protezione è determinata dal dispositivo. Su iOS con Secure Enclave, FairPlay offre un livello di protezione paragonabile a Widevine L1.

FairPlay funziona esclusivamente con il protocollo HLS (HTTP Live Streaming). Il contenuto viene impacchettato in segmenti .ts (MPEG-TS) o frammenti .m4s (fMP4). Il manifesto M3U8 contiene il tag #EXT-X-KEY con l'URI del server di licenze (KSM — Key Server Module) e il IV di inizializzazione. All'avvio della riproduzione, AVPlayer legge il manifesto e richiede la chiave tramite AVContentKeySession.

Integrazione di 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)
        )
    }
}

Il delegato di AVContentKeySession riceve una richiesta di chiave con l'identificatore del contenuto (assetId). L'applicazione invia questo ID al proprio server di licenze (KSM), che restituisce la chiave crittografata. La chiamata processContentKeyResponse passa la chiave al CDM per la decodifica. Se la licenza non è valida (scaduta, non pagata), il server restituisce un errore 403 e AVPlayer non avvia la riproduzione.

Caricamento di chiavi persistenti per contenuti offline

FairPlay supporta le chiavi persistenti — il salvataggio della licenza sul dispositivo per la visualizzazione offline. Dopo aver ricevuto la chiave, l'applicazione chiama processContentKeyResponse con il flag allowsPersistableKey. La chiave viene memorizzata nel Keychain e può essere utilizzata senza contattare il server durante le riproduzioni successive. Tuttavia, la licenza offline ha un periodo di validità limitato — generalmente 7-30 giorni, dopo il quale è necessario il rinnovo.

Le licenze offline sono memorizzate nell'archivio protetto di iOS — il Keychain. In caso di tentativo di jailbreak o estrazione di dump, Secure Enclave distrugge le chiavi. Secondo Apple (2025), la tecnologia delle chiavi persistenti viene utilizzata in Apple TV+, Netflix e Disney+ per scaricare contenuti su un iPad prima di un viaggio.

Microsoft PlayReady per la protezione universale

PlayReady è il DRM di Microsoft, utilizzato su Windows, Xbox e Windows Phone legacy. Sebbene PlayReady sia meno comune sui dispositivi mobili rispetto a Widevine e FairPlay, è importante per soluzioni di streaming universali che funzionano su tutte le piattaforme Microsoft. PlayReady supporta sia la protezione software che hardware tramite TPM.

PlayReady utilizza l'architettura SL (Security Level): SL2000 (software, simile a Widevine L3), SL3000 (hardware, simile a L1). Su Xbox Series X, PlayReady SL3000 funziona tramite TEE+TPM — le chiavi vengono estratte solo in un ambiente protetto. Ciò consente di riprodurre 4K Blu-ray sulla console senza rischio di copia.

Secondo Microsoft Docs (2026), PlayReady supporta CENC e può funzionare con MPEG-DASH tramite Media Source Extensions (MSE) nei browser Edge. Per le applicazioni mobili su Android e iOS, PlayReady è disponibile tramite SDK ma è usato raramente — principalmente per applicazioni aziendali e servizi multimediali Microsoft.

PlayReady Native SDK per Android

Microsoft fornisce il PlayReady Native SDK per Android e iOS. L'integrazione viene eseguita tramite ExoPlayer con l'estensione PlayReady: lo sviluppatore aggiunge PlayReadyRenderer, che viene incorporato nella catena di decodifica. ExoPlayer passa automaticamente tra Widevine e PlayReady a seconda del DRM specificato nel manifesto MPD.

Sebbene PlayReady sia raramente utilizzato nelle applicazioni mobili, il suo supporto è obbligatorio per i servizi all'interno dell'ecosistema Microsoft — ad esempio, piattaforme di formazione aziendale su SharePoint e Stream. Secondo Microsoft (2025), PlayReady è utilizzato nel 23% delle soluzioni multimediali aziendali contro il 62% di Widevine.

Integrazione del DRM in un'applicazione mobile

Integrare il DRM in un'applicazione mobile non richiede la scrittura di codice crittografico — lo sviluppatore lavora con un lettore che supporta il DRM nativamente. Vediamo l'integrazione su Android tramite ExoPlayer con l'estensione DRM.

Configurazione di ExoPlayer con supporto 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 gestisce la sessione DRM: crea una sessione MediaDrm, gestisce le richieste di licenza e passa le chiavi al decoder. Il parametro setMultiSession(true) consente di decodificare più flussi (audio + video) simultaneamente in sessioni diverse. MediaDrmCallback implementa la richiesta HTTP al server di licenze — solitamente un POST con corpo SignedRequest.

MediaDrmCallback per richiesta di licenza

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
}

Il callback invia una richiesta POST al server di licenze con l'UUID di Widevine nel corpo. Il server verifica l'autenticazione dell'utente (token nell'intestazione) e restituisce la chiave crittografata. Se l'utente non ha un abbonamento attivo, il server restituisce 403 Forbidden — ExoPlayer genera un errore DRM, che deve essere gestito tramite onPlayerError.

Gestione degli errori DRM

Gli errori DRM si verificano quando una licenza non è valida, è scaduta o il dispositivo non supporta il livello di protezione richiesto. ExoPlayer passa l'errore tramite Player.Listener.onPlayerError con codici TYPE_DRM_LICENSE_EXPIRED, TYPE_DRM_UNSUPPORTED o TYPE_SOURCE. Si consiglia di mostrare all'utente un messaggio informativo: “Il contenuto non è disponibile per questo dispositivo” o “Rinnova il tuo abbonamento per visualizzare.”

Secondo le analisi dei servizi di streaming (2025), fino all'8% degli avvii di riproduzione falliti sono correlati a errori DRM. Di questi, il 60% sono licenze scadute, il 25% incompatibilità del dispositivo e il 15% errori di rete durante la richiesta della chiave. Un tentativo automatico dopo 5 secondi risolve il 40% dei casi di errore di rete.

Domande frequenti

È possibile aggirare il DRM su un dispositivo mobile?

Tecnicamente possibile su dispositivi con Widevine L3 (protezione software), dove la chiave può essere estratta dalla memoria. Su L1 e FairPlay con Secure Enclave, l'aggiramento è estremamente difficile — è necessario l'accesso fisico al TEE. Gli studi di contenuti si rivolgono a dispositivi L1 per i contenuti premium.

Perché Netflix mostra una bassa qualità sul mio Android?

Molto probabilmente, il dispositivo non è certificato per Widevine L1 e utilizza L3. Netflix limita la qualità a 540p sui dispositivi L3. Verificare il livello Widevine tramite l'app DRM Info dal Google Play. I dispositivi di punta di Samsung, Pixel e OnePlus di solito hanno L1.

Quale DRM è migliore per un servizio di streaming?

Utilizza Multi-DRM: Widevine per Android, FairPlay per Apple, PlayReady per Windows. Servizi come Axinom o Vualto forniscono un'API unificata per tutti e tre i sistemi DRM. Il contenuto viene crittografato una volta tramite CENC e la selezione del DRM avviene automaticamente lato client.

Come implementare la visualizzazione offline con DRM?

Su iOS, utilizza le chiavi persistenti di FairPlay tramite AVContentKeySession. Su Android, utilizza la licenza offline Widevine tramite ExoPlayer OfflineLicenseHelper. La chiave viene memorizzata localmente nel Keychain (iOS) o KeyStore (Android) con un periodo di validità limitato — generalmente da 7 a 30 giorni.

Cos'è KID nel contesto del DRM?

KID (Key ID) — un identificatore univoco di 16 byte della chiave di crittografia nel manifesto CENC. Ogni KID è legato a uno specifico segmento di contenuto (ad esempio, un segmento di 10 minuti di un film). Il server di licenze utilizza il KID per cercare la chiave corrispondente nel proprio database. Un singolo film può contenere fino a 20 KID diversi per parti diverse.

Riepilogo

  • DRM (Digital Rights Management) — sistema di protezione crittografica dei contenuti digitali, obbligatorio per lo streaming legale.
  • Tre schemi principali: Widevine (Android), FairPlay (iOS), PlayReady (Windows) — utilizzano CENC per la crittografia unificata dei contenuti.
  • Widevine L1 (protezione hardware tramite TEE) consente 4K HDR, L3 (software) è limitato a 540p. Il livello viene verificato tramite MediaDrm.getPropertyString.
  • FairPlay funziona solo con HLS e utilizza AVContentKeySession per richiedere chiavi al server KSM.
  • L'integrazione DRM avviene tramite lettore multimediale: ExoPlayer (Android) con DefaultDrmSessionManager, AVPlayer (iOS) con AVContentKeySession.
  • Gli errori DRM vengono gestiti tramite onPlayerError — licenze scadute, incompatibilità del dispositivo e guasti di rete rappresentano l'8% degli avvii falliti.
  • Per i servizi multipiattaforma, si consiglia un approccio Multi-DRM con un provider CDN e crittografia CENC unificata dei contenuti.

Svilupperemo un'applicazione mobile chiavi in mano

IT Sectr crea applicazioni iOS e Android per startup e aziende dal 2017. Ti consulteremo e ti proporremo la soluzione migliore.

Discuti il progetto

Leggi anche