Cifrar un bloque de cada diez (CENC cbcs)

Define el tamaño de un fragmento de vídeo y cuántos bytes de la cabecera quedan en claro. La página lo cifra tal como lo hace Common Encryption, con un bloque de cada diez en cbcs o todos los bytes en cenc, marca qué bloques son texto cifrado y suma lo que eso supone para un flujo completo y para el dispositivo que debe descifrarlo.

Cargando simulación interactiva...

Lección

La teoría — Cifrar un bloque de cada diez (CENC cbcs)

Common Encryption (ISO/IEC 23001-7) permite que un solo conjunto de archivos cifrados sirva para varios sistemas DRM. Cifra las muestras multimedia con AES-128 y mantiene su estructura legible: cada fragmento de vídeo codificado se divide en una parte en claro, la longitud de la unidad NAL, la cabecera y la cabecera del fragmento, y un rango protegido a continuación. El esquema cenc ejecuta AES en modo contador sobre cada byte de ese rango. El esquema cbcs ejecuta AES en modo CBC sobre un patrón de bloques enteros de 16 bytes, uno cifrado y nueve en claro, repetido hasta el final del rango, y cualquier bloque parcial final se mantiene en claro.

Qué significa cada símbolo

L
el fragmento, una unidad NAL de fragmento codificado, en bytes
h
la cabecera en claro: prefijo de longitud, cabecera NAL y cabecera del fragmento, que el cifrado de submuestras deja legibles
B
bloques enteros de 16 bytes en el rango protegido P = L − h; cbcs cifra ⌈B/10⌉ de ellos
Supone
Un único tamaño de fragmento para todo el flujo. Un codificador real escribe fragmentos grandes para las imágenes que sirven de predicción y pequeños para el resto, por lo que las cifras individuales se aplican fragmento a fragmento y las del flujo describen uno de fragmentos idénticos. La cabecera en claro es de 32 bytes por defecto porque es la única longitud fijada por una especificación: el SAMPLE-AES de Apple deja en claro el byte de tipo NAL y los 31 bytes posteriores. Un empaquetador CENC deja en claro exactamente las cabeceras, que varían entre fragmentos. Los conjuntos de parámetros, los mensajes SEI y las cajas MP4 que envuelven las muestras van en claro y se omiten, por lo que la proporción cifrada de un archivo real es algo menor. El audio es AAC-LC a 48 kHz, 1024 muestras por trama, y está cifrado; un servicio que deja su audio en claro también lo resta del trabajo.
Falla cuando
Como forma de ocultar cualquier cosa que no sean las imágenes. Las cabeceras en claro están ahí para leerse, y revelan el tipo de cada fragmento, el tamaño de cada trama y la sincronización de todo el flujo a cualquiera que tenga el archivo, ya disponga de la clave o no.

Un bloque de cada diez no es un byte de cada diez 🖖

Pulsa Un segmento de 48 bytes: una tercera parte es texto cifrado. El patrón comienza por el bloque cifrado, de modo que un intervalo protegido de B bloques completos contiene ⌈B/10⌉ bloques cifrados, mientras que un intervalo de un solo bloque contiene uno. Pulsa Un segmento por fila de macrobloques: 306 bytes, 10,46 %. La escala muestra el resto: 16,00 % con 100 bytes y 8,00 % con 200. Con esta cabecera de 32 bytes, todos los tamaños a partir de 10 kB quedan entre el 9,95 % y el 10,11 %. La cabecera sin cifrar y el bloque parcial del final reducen la proporción; redondear B/10 hacia arriba la aumenta. El sistema no hace que ambos efectos se anulen. El panel inferior representa a la vez todos los tamaños: un perfil de dientes de sierra cuyos dientes se reducen conforme crece el segmento. La proporción se estabiliza en una décima parte cuando un bloque de más o de menos deja de ser relevante.

Las nueve décimas partes en claro son ilegibles por dónde está la décima 🖖

Observa la franja de bloques bajo el fotograma. Sea cual sea el tamaño del segmento, si después de la cabecera sin cifrar hay al menos un bloque completo, el primer byte que la sigue es texto cifrado. A partir de ahí, los bytes sin cifrar aparecen en tramos de 144 como máximo, precedidos siempre por un bloque de 16 bytes que nadie puede leer sin la clave. Los segmentos llevan codificación entrópica. El decodificador lee sus bits en orden y solo averigua dónde termina cada macrobloque al decodificarlo. Por eso no puede saltarse el bloque ilegible y reanudar la lectura en el tramo sin cifrar que viene después: se detiene en cuanto encuentra el primero. En una pista protegida, todos los segmentos codificados reciben este tratamiento, incluidas las imágenes que sirven para predecir las demás. Así, un reproductor sin la clave obtiene cabeceras que puede interpretar, pero no imágenes que pueda mostrar. Las cabeceras se dejan legibles de forma deliberada. La norma ISO/IEC 23001-7 especifica el cifrado de submuestras «para permitir el procesamiento y la edición normales de flujos elementales de vídeo antes del descifrado».

cbcs ahorra nueve décimas partes del trabajo de vídeo y nada del de audio 🖖

Pulsa 360p en un móvil. El vídeo sigue teniendo un 9,98 % de texto cifrado. El audio no tiene unidades NAL que el patrón pueda recorrer, así que se cifra sin él, cada bloque entero de cada trama: el 98,53 % de cada trama AAC. A 1,5 Mbit/s, la banda sonora de 128 kbit/s supone el 7,86 % de los bytes y el 45,69 % del trabajo AES, y en todo el flujo cbcs realiza 5,90 veces menos descifrado que cenc, no diez. Pulsa 1080p, 5 Mbit/s y esa misma banda sonora representa el 20,15 % del trabajo, con un ahorro de 8,20 veces. El propio argumento del estándar a favor del cifrado de patrones es que «reduce la potencia de cálculo requerida por los dispositivos para descifrar las pistas de vídeo», y la palabra que eligió es vídeo.

Problema resuelto al detalle

  1. Lo máximo que puede sobrecifrar un patrón 1:9 3 pasos

    ¿Cuánto por encima de una décima parte puede llegar un fragmento? Pulsa Un fragmento por fila: 306 bytes, un 10,46 % de texto cifrado. La página imprime un fragmento cada vez. Encuentra la mayor proporción que cbcs puede cifrar en cualquier fragmento de al menos 1.000 bytes con una cabecera de 32 bytes, y cómo se reduce ese peor caso a medida que crecen los fragmentos.

    Abre este problema en la herramienta

    1. La proporción es 16⌈B/10⌉/L. Mientras ⌈B/10⌉ se mantenga constante, solo disminuye a medida que L crece, así que los peores tamaños son aquellos donde acaba de empezar un nuevo bloque cifrado: un rango protegido de exactamente 10k + 1 bloques enteros, con k + 1 de ellos cifrados.

    2. En esos tamaños L = h + 16(10k + 1). Divide y separa la décima parte: lo que queda es el exceso sobre el 10 %, un número fijo de bytes sobre L.

    3. Con h = 32 el exceso es de 11,2 bytes sobre L. El primer peor tamaño igual o superior a 1.000 bytes es k = 6: 61 bloques enteros, 7 de ellos cifrados, en un fragmento de 1.008 bytes.

    Respuesta

    112 bytes de 1.008, el 11,11 %, y ninguno de 1.000 bytes o más lo supera. El exceso cae como 1/L: el peor fragmento de 10.000 bytes o más tiene 10.128 bytes con un 10,11 %, el tope de la franja que cita la primera explicación. La fórmula también indica qué cabecera pone fin al sobrecifrado. El exceso es de 16 − (h + 16)/10 bytes, que equivale a cero con h = 144, y un fragmento cuya cabecera en claro sea de 144 bytes o más nunca tendrá más de una décima parte cifrada, independientemente de su tamaño.

Referencias (3)