Widevine est une technologie DRM développée par Google pour protéger le contenu vidéo contre la copie non autorisée sur les appareils mobiles, les Smart TV et les plateformes web. Le chiffrement du contenu est effectué via le module CDM, qui est pris en charge sur 4 milliards d'appareils dans le monde. La technologie Widevine assure la compatibilité avec Android, iOS, Chrome et Smart TV, permettant aux services de streaming de protéger le contenu premium sur n'importe quelle plateforme.
Points clés
Widevine est une technologie DRM propriétaire acquise par Google en 2010 et devenue le standard de facto pour la protection du contenu vidéo dans l'écosystème Android. Elle est utilisée par les principaux services de streaming, dont Netflix, Amazon Prime Video, Disney+ et Hulu, pour empêcher la copie et la distribution non autorisées du contenu.
Widevine prend en charge le chiffrement AES-128 CBC à l'aide de clés de contenu qui sont transmises uniquement aux appareils autorisés via un canal de licence sécurisé. Le système offre une protection de bout en bout, du chiffrement sur le serveur au décodage sur l'appareil de l'utilisateur.
Widevine Technologies a été fondée en 1999 et a d'abord développé des solutions de protection de contenu pour les plateformes de télévision par câble. Après son acquisition par Google en 2010, la technologie a été adaptée pour les plateformes mobiles et intégrée au système d'exploitation Android à partir de la version 4.4 KitKat. Depuis 2015, Widevine est un composant obligatoire de la certification Google Mobile Services.
En 2018, Google a présenté Widevine Modular DRM, qui a permis aux fabricants d'appareils de mettre en œuvre différents niveaux de protection par matériel sans modifier le code du système d'exploitation. Aujourd'hui, Widevine Modular est pris en charge sur plus de 4 milliards d'appareils et constitue le principal mécanisme DRM sur Android.
L'architecture de Widevine se compose de trois composants clés : le Content Decryption Module (CDM), le serveur de licences et l'outil de chiffrement de contenu. Le CDM effectue le déchiffrement côté client et interagit avec le Trusted Execution Environment (TEE) matériel pour le stockage sécurisé des clés.
Le serveur de licences Google gère l'émission des clés en fonction des politiques du fournisseur de contenu, qui définissent des restrictions sur le temps, le nombre d'appareils et la qualité de lecture. L'outil de chiffrement prépare le contenu côté fournisseur, en l'empaquetant au format MPEG-DASH ou HLS avec le chiffrement CENC.
Le processus de protection commence à l'étape d'empaquetage du contenu, lorsque le fichier multimédia est chiffré à l'aide d'une clé de contenu sur le serveur du fournisseur. Le flux chiffré est transmis à l'appareil de l'utilisateur via CDN, où le CDM demande une licence au serveur de licences.
Le serveur de licences vérifie l'authenticité de l'appareil et le droit d'accès au contenu. Si la vérification réussit, le serveur émet une licence avec une clé que le CDM utilise pour le déchiffrement. La licence peut contenir des restrictions sur le temps de visionnage et la résolution.
L'échange de licences dans Widevine est implémenté via le protocole EME (Encrypted Media Extensions) dans les navigateurs ou via SDK sur les plateformes mobiles. La demande de licence est générée par le CDM et envoyée au serveur de licences via HTTPS, assurant la protection contre l'interception des clés en transit.
Le serveur traite la demande et retourne une licence qui est également chiffrée et ne peut être déchiffrée que par le CDM de l'appareil. La liaison matérielle de la clé à un appareil spécifique empêche son transfert vers d'autres plateformes.
Widevine utilise les normes Common Encryption (CENC) définies dans l'ISO/IEC 23001-7, garantissant la compatibilité avec les formats MPEG-DASH et HLS. Le chiffrement AES-128 en mode CTR ou CBC est utilisé pour protéger les flux multimédia.
Pour la dérivation de clés, HKDF (HMAC-based Key Derivation Function) est utilisé, permettant de générer des clés uniques pour chaque segment de contenu. La prise en charge de HLS dans Widevine a été ajoutée avec la version Modular 2.0, élargissant la compatibilité avec les plateformes 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 définit trois niveaux de sécurité qui diffèrent par la manière dont les opérations cryptographiques sont effectuées et le contenu est traité. Le niveau L1 offre une protection maximale, L3 une protection minimale et L2 occupe une position intermédiaire.
| Niveau | Type de protection | Exigences de l'appareil | Résolution maximale |
|---|---|---|---|
| L1 | Matérielle | TEE au niveau du SoC | 4K Ultra HD |
| L2 | Hybride | TEE pour les clés, logiciel pour la vidéo | 1080p |
| L3 | Logicielle | CDM logiciel uniquement | 720p |
Le niveau L1 nécessite un Trusted Execution Environment (TEE) au niveau matériel, où toutes les opérations cryptographiques sont effectuées. Les clés de contenu ne quittent jamais le TEE, empêchant leur extraction même si le système d'exploitation principal est compromis.
Les appareils certifiés L1 peuvent lire le contenu en qualité 4K et HDR, car le flux vidéo déchiffré est envoyé directement à une sortie vidéo protégée sans accès des processus utilisateur.
Le niveau L3 effectue toutes les opérations cryptographiques par logiciel dans l'espace utilisateur normal. C'est le mode le moins sécurisé, où les clés peuvent être extraites de la RAM de l'appareil.
Widevine L3 limite la qualité de lecture à 720p, ce qui le rend adapté à la visualisation sur les appareils d'entrée de gamme ou les navigateurs de bureau sans protection matérielle.
fun getSecurityLevel(): String {
val mediaDrm = MediaDrm(UUID.fromString(
"edef8ba9-79d6-4ace-a3c8-27dcd51d21ed"
))
val level = mediaDrm.getPropertyString(
"securityLevel"
)
return level.ifEmpty { "L3" }
}
L'intégration de Widevine dans les applications mobiles s'effectue via les API standard MediaDrm (Android) et AVContentKeySession (iOS). Dans la plupart des cas, le développeur n'a pas besoin de travailler directement avec DRM — les bibliothèques de lecteurs comme ExoPlayer et AVPlayer gèrent les licences automatiquement.
Sur Android, Widevine est intégré via la classe MediaDrm, qui fournit un accès direct au CDM. Pour les applications de streaming, il est recommandé d'utiliser ExoPlayer avec le module DrmSessionManager, qui gère automatiquement les demandes de licence.
Lors de l'initialisation du lecteur, vous devez spécifier l'UUID du schéma Widevine (`edef8ba9-79d6-4ace-a3c8-27dcd51d21ed`) et l'URL du serveur de licences fournie par le fournisseur de contenu. ExoPlayer gère automatiquement le cycle de demande et de renouvellement des licences.
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()
Sur les plateformes web, Widevine fonctionne via Media Source Extensions (MSE) et Encrypted Media Extensions (EME). Les navigateurs basés sur Chromium ont Widevine CDM intégré, et le développeur n'a qu'à initialiser une session EME avec la bonne configuration.
Pour utiliser Widevine dans un navigateur, vous devez spécifier un initiateur de licence avec le type keySystem `com.widevine.alpha`. Après avoir créé une instance MediaKeys, le navigateur gère automatiquement les demandes de licence.
Lors de l'intégration de Widevine, il est important de gérer correctement les erreurs de licence qui surviennent en raison d'un manque de droits d'accès, d'une expiration d'abonnement ou d'une incompatibilité de l'appareil. L'erreur TYPE_EXPIRED_LICENSE nécessite une mise à jour de la licence via une nouvelle demande au serveur, tandis que TYPE_OUTPUT_NOT_ALLOWED indique une incompatibilité de la sortie vidéo avec les politiques DRM.
Il est recommandé de mettre en œuvre un mécanisme de nouvelles tentatives avec backoff exponentiel pour les erreurs réseau temporaires et d'afficher un message clair à l'utilisateur en cas d'échec permanent de licence. La journalisation des erreurs de sessions DRM aide les fournisseurs de contenu à identifier les problèmes d'appareils et à optimiser les politiques.
Widevine concurrence FairPlay d'Apple et PlayReady de Microsoft, formant les trois principales solutions DRM sur le marché des plateformes mobiles. Chaque technologie a ses propres avantages et limitations liés à l'écosystème de la plateforme.
| Caractéristique | Widevine | FairPlay | PlayReady |
|---|---|---|---|
| Développeur | Apple | Microsoft | |
| Plateforme principale | Android, Chrome | iOS, tvOS, Safari | Windows, Xbox, UWP |
| Niveau maximum | L1 (4K) | Équivalent à L1 (4K) | SL3000 (4K) |
| Protection matérielle | TEE | Secure Enclave | TPM + TEE |
Le choix du DRM dépend des plateformes cibles de l'application. Pour les projets axés sur Android, Widevine est le choix naturel car il est préinstallé sur tous les appareils certifiés avec Google Mobile Services et ne nécessite pas de frais de licence supplémentaires.
Pour les projets multiplateformes, une approche multi-DRM est souvent utilisée avec des agrégateurs de licences comme Axinom, EZDRM et Vualto, qui fournissent une API unifiée pour travailler avec les trois systèmes DRM. Cela réduit la complexité d'intégration et centralise la gestion des licences.
Questions fréquentes
Widevine est une technologie DRM de Google conçue pour protéger le contenu vidéo numérique contre la copie non autorisée. Elle est utilisée par les services de streaming pour chiffrer la vidéo et gérer l'accès via un système de licences.
Widevine prend en charge trois niveaux de sécurité : L1 avec chiffrement matériel dans TEE, L2 avec une approche hybride et L3 avec une implémentation entièrement logicielle. L1 permet la lecture de contenu en 4K, L3 est limité à la qualité 720p.
Vous pouvez vérifier le niveau Widevine sur Android via la classe MediaDrm en demandant la propriété securityLevel. Pour cela, créez une instance MediaDrm avec l'UUID Widevine et appelez getPropertyString, ou utilisez des applications tierces comme DRM Info.
Widevine est développé par Google pour Android et Chrome, tandis que FairPlay est pour iOS, tvOS et Safari. Les deux prennent en charge le chiffrement matériel et la 4K, mais Widevine est plus répandu sur les appareils Android, tandis que FairPlay est le standard de facto dans l'écosystème Apple.
Pour utiliser Widevine dans une application mobile, aucune licence séparée n'est nécessaire — la technologie est intégrée dans les appareils Android certifiés et Chrome. Des frais ne sont facturés qu'aux fournisseurs de contenu pour l'utilisation du serveur de licences.
Résumé
Nous développerons une application mobile clé en main
IT Sectr crée des applications iOS et Android pour les startups et les entreprises depuis 2017. Nous vous conseillerons et vous proposerons la meilleure solution.
Lisez aussi