Dans cette section, nous allons aborder deux stratégies de chiffrement différentes vos supports multimédias, et quelques exemples pratiques de leur utilisation avec FFmpeg et Shaka Packager. Les deux stratégies de chiffrement dont nous allons parler sont Effacer la clé et à l'aide d'un service comme Google Widevine. Ces deux stratégies sont une forme de stratégie gestion des droits (DRM) afin de contrôler ce que les utilisateurs peuvent faire avec vos contenus multimédias. Toutefois, l'une est intrinsèquement moins sécurisée que l'autre en raison de la façon dont les clés sont transmises pour l'authentification et c'est pourquoi un service DRM pourrait être plus judicieux.
Les principaux services DRM pour le Web sont Google Widevine et Microsoft PlayReady et Apple FairPlay, mais nous ne les aborderons pas toutes dans cet article. En revanche, si vous ciblez tous les navigateurs récents, d'utiliser les trois services DRM.
La conversion et le chiffrement sont effectués à l'aide des applications suivantes:
Effacer le chiffrement de la clé
Tout d'abord, vous devez savoir ce qu'est la touche claire et ce qu'elle ne l'est pas avant l'utilisent. Lorsque vous ne souhaitez pas utiliser un service DRM existant et estimez le cryptage de base de votre contenu multimédia est une option viable, vous pouvez utiliser Clear Key. Toutefois, gardez à l'esprit que ce type de chiffrement n'offre pas le même niveau de sécurité que l'utilisation de l'un des services DRM. En effet, la paire clé-valeur non chiffrées sous une autre clé, contrairement aux clés chiffrées qui sont générées de déchiffrement stockée sur un serveur de licences. En outre, l'option "Effacer la clé" envoie la paire clé-valeur sous forme de texte brut. Ainsi, pendant que vous chiffrez votre média, déchiffrer ce n'est pas un secret.
Créer une clé
Vous pouvez utiliser la même méthode afin de créer une clé pour DASH et HLS. Pour ce faire, utilisez OpenSSL. La commande suivante permet de créer une clé de chiffrement composée de 16 valeurs hexadécimales.
openssl rand -hex 16 > media.key
Créer un vecteur d'initialisation
Nous pouvons ensuite générer un vecteur d'initialisation (IV).
openssl rand -hex 16
6143b5373a51cb46209cfed0d747da66
Chiffrer avec une clé d'effacement
L'exemple suivant utilise Shaka Packager avec des clés brutes, où keys
et
Les key_ids
sont fournis directement à Shaka Packager. Lisez la documentation pour
d'autres exemples.
Pour l'option key
, utilisez la clé créée précédemment et stockée dans le media.key
.
. Toutefois, lorsque vous le saisissez dans la ligne de commande, assurez-vous de l'avoir supprimé
d'espace. Pour l'option key_id
, répétez la valeur media.id
ou utilisez la valeur IV.
généré ci-dessus.
packager \
input=glocken.mp4,stream=audio,output=glockena.m4a \
input=glocken.mp4,stream=video,output=glockenv.mp4 \
--enable_fixed_key_encryption \
--keys label=audio:key=INSERT_AUDIO_KEY_HERE:key_id=INSERT_AUDIO_KEY_ID_HERE,label=video:key=INSERT_VIDEO_KEY_HERE:key_id=INSERT_VIDEO_KEY_ID_HERE
Créer un fichier d'informations sur la clé
Pour le chiffrement HLS, vous avez besoin d'un fichier d'informations de clé en plus d'un fichier de clé. A
le fichier d'informations clés est un fichier
texte au format ci-dessous. Il doit comporter
extension .keyinfo
. Exemple : encrypt.keyinfo
.
key URI
key file path
private key
L'URI de la clé correspond à l'emplacement où media.key
(créé ci-dessus sera
sur votre serveur. Le chemin d'accès au fichier de clé correspond à son emplacement par rapport à la clé
fichier d'informations. Enfin, la clé privée correspond au contenu de media.key
.
lui-même, ou le vecteur
d’initialisation que vous avez créé précédemment. Exemple :
https://example.com/keys/media.key
/path/to/media.key
6143b5373a51cb46209cfed0d747da66
Chiffrer pour HLS
packager \
'input=input.mp4,stream=video,segment_template=output$Number$.ts,playlist_name=video_playlist.m3u8' \
'input=input.mp4,stream=audio,segment_template=output_audio$Number$.ts,playlist_name=audio_playlist.m3u8,hls_group_id=audio,hls_name=ENGLISH' \
--hls_master_playlist_output="master_playlist.m3u8" \
--hls_base_url="http://localhost:5000/"
Cette commande accepte une clé comportant 16 ou 32 caractères.
ffmpeg -i myvideo.mov -c:v libx264 -c:a aac -hls_key_info_file encrypt.keyinfo myvideo.m3u8
Chiffrement Widevine
Vous savez maintenant ce qu'est le chiffrement de clé claire et quand l'utiliser. Mais dans quels cas utiliser un service DRM pour renforcer la sécurité ? C'est là que Widevine, ou un autre service, sera utilisé pour chiffrer et déchiffrer de manière sécurisée votre contenu multimédia. Widevine prend en charge MPEG-DASH et HLS. Il s'agit d'une DRM de Google. Widevine est utilisé par les navigateurs Web Google Chrome et Firefox les navigateurs, Android MediaDRM, Android TV et les autres appareils électroniques grand public qui utilisent Encrypted Media Extensions et Media Source Extensions, qui permettent à Widevine de déchiffrer du contenu.
Chiffrer avec Widevine
La plupart des exemples de cet article utilisaient le chiffrement de clé claire. Cependant, pour Widevine, doit remplacer les options suivantes.
--enable_fixed_key_encryption \
--enable_fixed_key_decryption \
--keys label=:key=INSERT_KEY_HERE:key_id=INSERT_KEY_ID_HERE
Tout ce qui se trouve dans la commande de démultiplexeur (demux), à l'exception du nom de vos fichiers et
L'option --content-id
doit être copiée exactement à partir de l'exemple. --content-id
a 16 ans
soit 32 chiffres hexadécimaux aléatoires. Utilisez les clés fournies ici à la place des vôtres. Lisez le shaka
Documentation de l'empaqueteur sur l'utilisation du serveur de clés Widevine pour plus d'exemples.
Démux (séparer) l'audio et la vidéo, chiffrer les nouveaux fichiers et générer description de la présentation multimédia (MPD).
packager \ input=tmp_glocken.mp4,stream=video,output=glocken_video.mp4 \ input=tmp_glocken.mp4,stream=audio,output=glocken_audio.m4a \ --enable_widevine_encryption \ --key_server_url "https://license.uat.widevine.com/cenc/getcontentkey/widevine_test" \ --content_id "fd385d9f9a14bb09" \ --signer "widevine_test" \ --aes_signing_key "1ae8ccd0e7985cc0b6203a55855a1034afc252980e970ca90e5202689f947ab9" \ --aes_signing_iv "d58ce954203b7c9a9a9d467f59839249"
Remux (combine) les flux audio et vidéo. Si vous utilisez une vidéo vous n'aurez peut-être pas besoin de le faire.
ffmpeg -i glocken_video.mp4 -i glocken_audio.m4a -c copy glocke.mp4
Séquence de conversion de média
Cette section présente l'ordre des commandes nécessaires pour passer d'un fichier .mov
brut à
les éléments chiffrés empaquetés
pour DASH ou HLS. Dans le but d'avoir un objectif
nous convertissons un fichier source
à un débit de 8 Mbit/s avec une résolution
1080p (1 920 x 1 080). Ajustez ces valeurs selon vos besoins.
DASH/WebM
Convertissez le type de fichier et le codec.
Pour cette commande, vous pouvez utiliser
liborbis
oulibopus
pour le codec audio.ffmpeg -i glocken.mov -c:v libvpx-vp9 -c:a libvorbis -b:v 8M -vf setsar=1:1 -f webm tmp_glocken.webm
Créez une clé de chiffrement de clé claire.
openssl rand -hex 16 > media.key
Démux (séparer) l'audio et la vidéo, chiffrer les nouveaux fichiers et générer description de la présentation multimédia (MPD).
packager \ input=tmp_glocken.webm,stream=video,output=glocken_video.webm \ input=tmp_glocken.webm,stream=audio,output=glocken_audio.webm \ --enable_fixed_key_encryption \ --enable_fixed_key_decryption \ --keys label=:key=INSERT_KEY_HERE:key_id=INSERT_KEY_ID_HERE \ --mpd_output glocken_webm_vod.mpd
Remux (combine) les flux audio et vidéo. Si vous utilisez une vidéo vous n'aurez peut-être pas besoin de le faire.
ffmpeg -i glocken_video.webm -i glocken_audio.webm -c copy glocken.webm
DASH/MP4
Convertissez le type de fichier, le codec vidéo et le débit.
ffmpeg -i glocken.mov -c:v libx264 -c:a aac -b:v 8M -strict -2 tmp_glocken.mp4
Créez une clé de chiffrement de clé claire.
openssl rand -hex 16 > media.key
Démux (séparer) l'audio et la vidéo, chiffrer les nouveaux fichiers et générer description de la présentation multimédia (MPD).
packager \ input=tmp_glocken.mp4,stream=video,output=glocken_video.mp4 \ input=tmp_glocken.mp4,stream=audio,output=glocken_audio.m4a \ --enable_fixed_key_encryption \ --enable_fixed_key_decryption \ --keys label=:key=INSERT_KEY_HERE:key_id=INSERT_KEY_ID_HERE \ --mpd_output glocken_mp4_vod.mpd
Remux (combine) les flux audio et vidéo. Si vous utilisez une vidéo vous n'aurez peut-être pas besoin de le faire.
ffmpeg -i glocken_video.mp4 -i glocken_audio.m4a -c copy glocken.mp4
HLS/MP4
HLS n'est compatible qu'avec le format MP4. Vous devez donc d'abord convertir le fichier en conteneur MP4, les codecs compatibles.
Convertissez le type de fichier, le codec vidéo et le débit.
ffmpeg -i glocken.mov -c:v libx264 -c:a aac -b:v 8M -strict -2 glocken.mp4
Créez une clé de chiffrement de clé claire.
openssl rand -hex 16 > media.key
Créer un fichier d'informations clés
packager \ 'input=glocken.mp4,stream=video,segment_template=output$Number$.ts,playlist_name=video_playlist.m3u8' \ 'input=glocken.mp4,stream=audio,segment_template=output_audio$Number$.ts,playlist_name=audio_playlist.m3u8,hls_group_id=audio,hls_name=ENGLISH' \ --hls_master_playlist_output="master_playlist.m3u8" \ --hls_base_url="http://localhost:5000/" \ --enable_fixed_key_encryption \ --enable_fixed_key_decryption \ --keys label=:key=INSERT_KEY_HERE:key_id=INSERT_KEY_ID_HERE
Cela a été beaucoup à assimiler, mais j'espère que vous pourrez maintenant chiffrer vos contenus multimédias en toute confiance. Nous allons maintenant vous montrer comment ajouter des contenus multimédias à sur votre site.