Cifrar um bloco em dez (CENC cbcs)

Defina o tamanho de uma fatia de vídeo e quantos bytes de cabeçalho permanecem em claro. A página cifra à maneira do Common Encryption, com um bloco em dez no cbcs ou todos os bytes no cenc. Marca que blocos são texto cifrado e soma o que isso significa para um fluxo inteiro e para o dispositivo que tem de o decifrar.

A carregar a simulação interativa...

Lição

A teoria — Cifrar um bloco em dez (CENC cbcs)

Common Encryption (ISO/IEC 23001-7) permite que um conjunto de ficheiros cifrados sirva a vários sistemas DRM. Cifra amostras de media com AES-128 e mantém a sua estrutura legível. Cada fatia de vídeo codificada é dividida numa parte em claro (o comprimento da unidade NAL, o cabeçalho e o cabeçalho da fatia) e num intervalo protegido a seguir. O esquema cenc executa o AES em modo de contador sobre todos os bytes desse intervalo. O esquema cbcs executa o AES em modo CBC sobre um padrão de blocos inteiros de 16 bytes, um cifrado e nove deixados em claro. Isto repete-se até ao fim do intervalo, e um bloco parcial no final permanece em claro.

O que significa cada símbolo

L
a fatia, uma unidade NAL de fatia codificada, em bytes
h
o cabeçalho em claro: prefixo de comprimento, cabeçalho NAL e cabeçalho da fatia, que a cifragem de subamostras deixa legíveis
B
blocos inteiros de 16 bytes no intervalo protegido P = L − h; o cbcs cifra ⌈B/10⌉ deles
Pressupõe
Um único tamanho de fatia para todo o fluxo. Um codificador real escreve fatias grandes para as imagens a partir das quais outras são previstas e pequenas para as restantes. Os números por fatia mantêm-se fatia a fatia, e os números do fluxo descrevem um fluxo de fatias iguais. O cabeçalho em claro tem 32 bytes por omissão, pois esse é o único comprimento que uma especificação fixa: o SAMPLE-AES da Apple deixa em claro o byte de tipo NAL e os 31 bytes seguintes. Um empacotador CENC deixa em claro exatamente os cabeçalhos, que variam de fatia para fatia. Os conjuntos de parâmetros, as mensagens SEI e as caixas MP4 em torno das amostras estão em claro e ficam de fora, pelo que a fração de texto cifrado num ficheiro real é ligeiramente inferior. O áudio é AAC-LC a 48 kHz, 1024 amostras por trama e cifrado. Um serviço que deixe o seu áudio em claro retira igualmente o áudio do trabalho.
Falha quando
Como forma de ocultar qualquer coisa que não as imagens. Os cabeçalhos em claro estão ali para serem lidos. Eles revelam o tipo de cada fatia, o tamanho de cada trama e a temporização de todo o fluxo a qualquer pessoa que possua o ficheiro, tenha ou não a chave.

Um bloco em dez não é um byte em dez 🖖

Prima Uma fatia de 48 bytes: um terço dela é texto cifrado. O padrão começa pelo bloco cifrado; assim, num intervalo protegido de B blocos completos, ⌈B/10⌉ são cifrados, e num intervalo de um só bloco, esse bloco é cifrado. Prima Uma fatia por linha de macroblocos: 306 bytes, 10,46%. Os restantes valores aparecem na escada: 16,00% para 100 bytes e 8,00% para 200. Com este cabeçalho de 32 bytes, todos os tamanhos a partir de 10 kB ficam entre 9,95% e 10,11%. O cabeçalho não cifrado e o bloco incompleto no fim reduzem a proporção; arredondar B/10 por excesso aumenta-a. Nada no esquema faz coincidir os dois efeitos. O painel inferior representa todos os tamanhos ao mesmo tempo: um dente de serra cujos dentes encolhem à medida que a fatia aumenta. A proporção converge para um décimo quando a presença ou ausência de mais um bloco deixa de ter peso.

Os nove décimos em claro são ilegíveis por causa do local onde está o décimo 🖖

Observe a faixa de blocos sob o quadro. Seja qual for o tamanho da fatia, desde que ao cabeçalho não cifrado se siga um bloco completo, o primeiro byte depois do cabeçalho pertence ao texto cifrado. A partir daí, os bytes não cifrados surgem em sequências de, no máximo, 144, cada uma precedida por um bloco de 16 bytes que ninguém sem a chave consegue ler. Uma fatia é codificada por entropia. O descodificador lê os bits pela ordem em que aparecem e só descobre onde termina um macrobloco ao descodificá-lo. Não pode saltar o bloco ilegível e retomar a leitura na sequência não cifrada seguinte: para no primeiro bloco cifrado. Numa faixa protegida, todas as fatias codificadas recebem este tratamento, incluindo as imagens de referência usadas para prever as restantes. Um leitor sem a chave recebe cabeçalhos que consegue analisar e imagens que não consegue reconstruir. Manter esses cabeçalhos legíveis é uma opção deliberada. A norma ISO/IEC 23001-7 especifica a cifragem por subamostras "para permitir o processamento e a edição normais de fluxos elementares de vídeo antes da decifragem".

O cbcs poupa nove décimos do trabalho do vídeo e nenhum do áudio 🖖

Prima 360p num telemóvel. O vídeo continua a ser 9,98% texto cifrado. O áudio não tem unidades NAL para um padrão percorrer, pelo que é cifrado sem um, em todos os blocos inteiros de cada trama: 98,53% de cada trama AAC. A 1,5 Mbit/s, a banda sonora de 128 kbit/s representa 7,86% dos bytes e 45,69% do trabalho AES. Em todo o fluxo, o cbcs decifra 5,90 vezes menos do que o cenc, e não dez. Prima 1080p, 5 Mbit/s e a mesma banda sonora assume 20,15% do trabalho, com uma poupança de 8,20 vezes. O próprio argumento da norma a favor da cifragem por padrões é que esta "reduz o poder computacional exigido aos dispositivos para decifrar pistas de vídeo", e a palavra que escolheu foi vídeo.

Problema resolvido na íntegra

  1. O máximo que um padrão 1:9 pode cifrar em excesso 3 passos

    Até que ponto acima de um décimo pode uma fatia ir? Prima Uma fatia por linha MB: 306 bytes, 10,46% texto cifrado. A página imprime uma fatia de cada vez. Descubra a maior fração que o cbcs pode cifrar numa fatia de pelo menos 1.000 bytes com um cabeçalho de 32 bytes, e como esse pior cenário encolhe à medida que as fatias crescem.

    Abrir este problema na ferramenta

    1. A fração é 16⌈B/10⌉/L. Enquanto ⌈B/10⌉ se mantém, esta apenas diminui à medida que L cresce. Os piores tamanhos são aqueles em que um novo bloco cifrado acabou de começar: um intervalo protegido de exatamente 10k + 1 blocos inteiros, com k + 1 deles cifrados.

    2. Nesses tamanhos L = h + 16(10k + 1). Divida, e separe o décimo: o que resta é o excesso acima de 10%, um número fixo de bytes sobre L.

    3. Com h = 32 o excesso é de 11,2 bytes sobre L. O primeiro pior tamanho aos ou acima dos 1.000 bytes é k = 6: 61 blocos inteiros, 7 deles cifrados, numa fatia de 1.008 bytes.

    Resposta

    112 bytes em 1.008, 11,11%. Nada com 1.000 bytes ou mais faz pior. O excesso cai como 1/L: a pior fatia de 10.000 bytes ou mais tem 10.128 bytes com 10,11%, o topo da faixa que a primeira perspetiva cita. A fórmula indica igualmente qual o cabeçalho que põe fim à cifragem excessiva. O excesso é 16 − (h + 16)/10 bytes, o que é zero em h = 144. Uma fatia cujo cabeçalho em claro tenha 144 bytes ou mais nunca tem mais de um décimo de si mesma cifrada, em qualquer tamanho.

Referências (3)