Chiffrer un bloc sur dix (CENC cbcs)

Définissez la taille d'une tranche vidéo et le nombre d'octets d'en-tête qui restent en clair. La page la chiffre selon la norme Common Encryption, avec un bloc sur dix pour cbcs ou chaque octet pour cenc. Elle indique quels blocs sont chiffrés et calcule ce que cela représente pour un flux complet et pour l'appareil qui doit le déchiffrer.

Chargement de la simulation interactive...

Leçon

La théorie — Chiffrer un bloc sur dix (CENC cbcs)

La norme Common Encryption (ISO/IEC 23001-7) permet à un même jeu de fichiers chiffrés de servir plusieurs systèmes DRM. Elle chiffre les échantillons multimédias avec AES-128 et garde leur structure lisible. Chaque tranche vidéo codée est divisée en une partie en clair (la longueur de l'unité NAL, son en-tête et l'en-tête de la tranche) et une plage protégée qui la suit. Le schéma cenc applique AES en mode compteur sur chaque octet de cette plage. Le schéma cbcs applique AES en mode CBC sur un motif de blocs complets de 16 octets : un chiffré et neuf laissés en clair. Ce motif se répète jusqu'à la fin de la plage, et un éventuel bloc partiel à la fin reste en clair.

Ce que signifie chaque symbole

L
la tranche, une unité NAL de tranche codée, en octets
h
l'en-tête en clair : préfixe de longueur, en-tête NAL et en-tête de tranche, que le chiffrement de sous-échantillon laisse lisibles
B
blocs complets de 16 octets dans la plage protégée P = L − h ; cbcs en chiffre ⌈B/10⌉
Suppose
Une seule taille de tranche pour l'ensemble du flux. Un véritable encodeur écrit de grandes tranches pour les images servant de prédiction et de petites pour les autres. Les chiffres par tranche restent valables tranche par tranche, et les chiffres du flux décrivent un flux de tranches égales. L'en-tête en clair fait 32 octets par défaut, car c'est la seule longueur fixée par une spécification : le format SAMPLE-AES d'Apple laisse en clair l'octet de type NAL et les 31 octets qui le suivent. Un empaqueteur CENC laisse en clair exactement les en-têtes, qui varient d'une tranche à l'autre. Les jeux de paramètres, les messages SEI et les boîtes MP4 autour des échantillons sont en clair et exclus du calcul. La part chiffrée d'un vrai fichier est donc légèrement inférieure. L'audio est en AAC-LC à 48 kHz, 1 024 échantillons par trame, et chiffré. Un service qui laisse son audio en clair retire également l'audio du travail.
Ne tient plus quand
Comme moyen de dissimuler autre chose que les images. Les en-têtes en clair sont là pour être lus. Ils révèlent le type de chaque tranche, la taille de chaque image et le minutage du flux complet à quiconque possède le fichier, avec ou sans la clé.

Un bloc sur dix n'équivaut pas à un octet sur dix 🖖

Cliquez sur Une tranche de 48 octets : un tiers de son contenu est chiffré. Le motif commence par le bloc chiffré. Une zone protégée de B blocs entiers en contient donc ⌈B/10⌉ qui sont chiffrés ; si elle ne compte qu’un seul bloc, celui-ci l’est. Cliquez sur Une tranche par rangée de macroblocs : 306 octets, soit 10,46 %. L’échelle indique les autres valeurs : 16,00 % avec 100 octets et 8,00 % avec 200. Avec cet en-tête de 32 octets, toutes les tailles à partir de 10 ko se situent entre 9,95 % et 10,11 %. L’en-tête en clair et le bloc incomplet de la fin réduisent la proportion ; l’arrondi de B/10 à l’entier supérieur l’augmente, sans que le procédé assure la compensation des deux effets. Le panneau inférieur représente toutes les tailles à la fois : les dents de cette courbe en scie s’amenuisent à mesure que la tranche grandit, puis la proportion se stabilise autour d’un dixième lorsqu’un bloc de plus ou de moins cesse d’avoir une incidence notable.

Les neuf dixièmes en clair sont illisibles à cause de la position du dixième 🖖

Observez la bande de blocs sous l’image. Quelle que soit la taille de la tranche, dès lors qu’un bloc entier suit l’en-tête en clair, le premier octet qui vient après cet en-tête est chiffré. Les octets en clair se succèdent ensuite par séries de 144 au plus, chacune précédée d’un bloc de 16 octets illisible sans la clé. Une tranche est soumise à un codage entropique. Le décodeur lit ses bits dans l’ordre et ne détermine la fin d’un macrobloc qu’en le décodant. Il ne peut donc pas sauter le bloc illisible et reprendre dans la série en clair qui suit : il s’arrête au premier bloc chiffré. Dans une piste protégée, toutes les tranches codées sont traitées ainsi, y compris celles des images servant à prédire les autres. Un lecteur dépourvu de la clé peut alors analyser les en-têtes, mais pas afficher les images. Ce choix de laisser les en-têtes lisibles est délibéré. La norme ISO/IEC 23001-7 prévoit le chiffrement de sous-échantillons « afin de permettre le traitement et le montage normaux des flux vidéo élémentaires avant leur déchiffrement ».

cbcs économise neuf dixièmes du travail sur la vidéo et rien sur l'audio 🖖

Cliquez sur 360p sur un téléphone. La vidéo reste chiffrée à 9,98 %. L'audio n'a pas d'unités NAL permettant d'appliquer un motif. Il est donc chiffré sans motif, à chaque bloc complet de chaque trame : 98,53 % de chaque trame AAC. À 1,5 Mbit/s, la piste audio de 128 kbit/s représente 7,86 % des octets et 45,69 % du travail AES. Sur l'ensemble du flux, cbcs effectue 5,90 fois moins de déchiffrement que cenc, et non dix. Cliquez sur 1080p, 5 Mbit/s et cette même piste représente 20,15 % du travail, avec une économie de 8,20 fois. L'argument de la norme en faveur du chiffrement par motif est qu'il « réduit la puissance de calcul requise par les appareils pour déchiffrer les pistes vidéo ». Le terme choisi est bien vidéo.

Problème entièrement résolu

  1. Le maximum qu'un motif 1:9 peut surchiffrer 3 étapes

    Jusqu'où une tranche peut-elle dépasser un dixième ? Cliquez sur Une tranche par ligne : 306 octets, 10,46 % de texte chiffré. La page affiche une tranche à la fois. Trouvez la plus grande part que cbcs puisse chiffrer dans une tranche d'au moins 1 000 octets avec un en-tête de 32 octets, et observez comment ce pire cas diminue à mesure que les tranches s'allongent.

    Ouvrez ce problème dans l'outil

    1. La part est de 16⌈B/10⌉/L. Tant que ⌈B/10⌉ reste constant, elle ne fait que baisser à mesure que L augmente. Les pires tailles sont donc celles où un nouveau bloc chiffré vient de commencer : une plage protégée d'exactement 10k + 1 blocs complets, dont k + 1 sont chiffrés.

    2. À ces tailles, L = h + 16(10k + 1). Divisez, et séparez le dixième : ce qui reste est l'excédent au-delà de 10 %, un nombre fixe d'octets sur L.

    3. Avec h = 32, l'excédent est de 11,2 octets sur L. La première pire taille à partir de 1 000 octets correspond à k = 6 : 61 blocs complets, dont 7 chiffrés, dans une tranche de 1 008 octets.

    Réponse

    112 octets sur 1 008, soit 11,11 %. Aucune taille de 1 000 octets ou plus ne fait pire. L'excédent baisse en 1/L : la pire tranche de 10 000 octets ou plus fait 10 128 octets à 10,11 %, soit le haut de la fourchette citée dans le premier aperçu. La formule indique aussi quel en-tête met fin au surchiffrement. L'excédent est de 16 − (h + 16)/10 octets. Il tombe à zéro pour h = 144. Ainsi, une tranche dont l'en-tête en clair atteint ou dépasse 144 octets ne voit jamais plus d'un dixième de son contenu chiffré, quelle que soit sa taille.

Références (3)