SPEKEAPIv2 - Contrato de criptografia - Especificação do Secure Packager and Encoder Key Exchange API

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

SPEKEAPIv2 - Contrato de criptografia

O contrato de criptografia define quais chaves de conteúdo estão protegendo quais faixas dentro de um determinado streamset, com base nas características das faixas.

O uso de várias chaves de conteúdo para faixas diferentes em um streamset, apesar de ser uma prática recomendada do setor, não é obrigatório, mas recomendado: pelo menos duas chaves de conteúdo diferentes, uma para faixas de áudio e outra para faixas de vídeo. É possível usar uma única chave de conteúdo para criptografar várias faixas, mas precisa ser explicitamente sinalizado no CPIX documento enviado pelo criptografador ao provedor da chave. De um modo geral, o criptografador sempre descreve com precisão quantas chaves de conteúdo são necessárias e como elas são usadas para criptografar as várias faixas de mídia.

Princípios

O contrato de criptografia está localizado na <cpix:ContentKeyUsageRuleList> seção do CPIX documento. Nesta seção, cada chave de conteúdo definida na <cpix:ContentKeyList> seção corresponde a um <cpix:ContentKeyUsageRule> elemento específico, que deve incluir:

  • um ContentKeyUsageRule@intendedTrackType atributo que pode referenciar um ou mais subcomponentes, separados pelo sinal '+' se vários subcomponentes forem usados. O valor de ContentKeyUsageRule@intendedTrackType deve ser exclusivo em um contrato de criptografia e não pode ser usado em múltiplos elementos ContentKeyUsageRule.

  • Um ou mais elementos <cpix:AudioFilter> ou elemento <cpix:VideoFilter> secundário, dependendo do valor do ContentKeyUsageRule@intendedTrackType atributo.

As regras que regem esse relacionamento são as seguintes:

  • Quando todas as faixas de áudio e vídeo do streamset precisarem ser protegidas com uma chave de conteúdo exclusiva, a string 'ALL' deve ser usada como valor do atributo ContentKeyUsageRule@intendedTrackType. O exemplo 1 mostra esse caso de uso. Nesta situação, elementos <cpix:AudioFilter /> e <cpix:VideoFilter /> secundários sem nenhum atributo devem ser incluídos. Qualquer outra combinação de <cpix:AudioFilter> e/ou <cpix:VideoFilter> elementos é inválida nesse contexto específico.

  • Para todos os outros casos de uso, o valor do atributo ContentKeyUsageRule@intendedTrackType pode ser definido livremente, e o número de elementos <cpix:AudioFilter /> e <cpix:VideoFilter /> secundários devem corresponder ao número de subcomponentes agregados por meio do sinal “+”. Os exemplos 2/3/4/5/6/7/9/10 ilustram esse requisito, quando um único subcomponente está presente no valor do atributo ContentKeyUsageRule@intendedTrackType. O exemplo 8 ilustra isso quando vários subcomponentes são usados: ContentKeyUsageRule@intendedTrackType="SD+HD" é descrito por dois elementos <cpix:VideoFilter> secundários distintos com valores de atributos diferentes e ContentKeyUsageRule@intendedTrackType="HDR+HFR+UHD" é descrito por três elementos <cpix:VideoFilter> secundários distintos com valores de atributos diferentes.

Filtros

CPIXdefine vários elementos e atributos de filtragem, mas SPEKE suporta somente um subconjunto deles. A tabela a seguir resume essas diferenças:

CPIXtipo de filtro SPEKESuporte geral Atributos de filtro suportados por SPEKE Atributos de filtro não suportados pelo SPEKE

<clix : >VideoFilter

Sim

minPixels,maxPixels, hdr,minFps, maxFps (atributos opcionais)

wcg

<clix : >AudioFilter

Sim

minChannels, maxChannels (atributos opcionais)

<clix : >KeyPeriodFilter

Sim

periodId (atributo obrigatório)

<clix : >BitrateFilter

Não

N/D

N/D

<clix : >LabelFilter

Não

N/D

N/D

De acordo com a CPIX especificação de VideoFilter, [minPixels,maxPixels] é um intervalo com tudo incluído em ambas as dimensões, enquanto (minFps,maxFps] é inclusivo somente para a maxFps dimensão. Pois AudioFilter, [minChannels,maxChannels] é um intervalo inclusivo em ambas as dimensões.

Situações problemáticas

Há situações em que as informações fornecidas no contrato de criptografia podem ser parciais, ambíguas ou errôneas. Nesses casos, é importante que o criptografador e o provedor da chave se comportem adequadamente e garantam a proteção adequada do conteúdo. A tabela a seguir apresenta o comportamento recomendado nessas situações:

Nessa situação O criptografador deve... O provedor da chave deve...

Nenhuma regra se aplica a uma ou mais faixas no streamset (veja o exemplo 3 abaixo)

O criptografador deve examinar sua configuração (externa à CPIX carga) e verificar se as faixas em questão não exigem criptografia. Se não corresponder à expectativa, o criptografador deve gerar um erro e interromper o processamento.

Não relevante: o provedor da chave não tem conhecimento da estrutura do streamset.

Várias regras se sobrepõem e sugerem várias chaves de conteúdo para criptografar uma faixa específica

O criptografador deve aplicar a última avaliação ContentKeyUsageRule bem-sucedida na ordem do documento.

Não relevante: o provedor da chave não tem conhecimento da estrutura do streamset.

O contrato de criptografia muda em um único ciclo de SPEKE solicitação/resposta

O criptografador deve levantar uma exceção e interromper o processamento, pois o provedor da chave não é responsável pela definição do contrato de criptografia.

Para evitar que essa situação ocorra em primeiro lugar, o provedor da chave não deve modificar um contrato de criptografia recebido na CPIX carga útil da SPEKE solicitação.

Contrato de criptografia malformado: intendedTrackType /Filters, exceção de restrição de cardinalidade, filtros ou atributos não suportados

O criptografador deve gerar uma exceção, interromper o processamento e não enviar a SPEKE solicitação ao provedor da chave, pois isso provavelmente resultaria em proteção de conteúdo incorreta ou deixaria alguns rastros desprotegidos.

O provedor da chave deve gerar uma exceção e retornar um erro de “contrato de criptografia malformado”.

Contrato de criptografia bem formado, mas que viola as restrições dos níveis de DRM segurança: por exemplo, uma única chave de conteúdo sendo solicitada para proteger as faixas de áudio e as faixas de vídeo UHD

Se o criptografador tiver conhecimento das restrições dos níveis de DRM segurança, ele deverá gerar uma exceção, interromper o processamento e não enviar a SPEKE solicitação ao provedor da chave, pois isso provavelmente resultaria em proteção de conteúdo incorreta.

O provedor da chave deve gerar uma exceção e retornar um erro de “Contrato de CPIX criptografia solicitado não suportado”.

Contrato de criptografia ausente

O criptografador não deve enviar CPIX documentos que não contenham nenhum AudioFilter elemento VideoFilter ou.

O provedor da chave deve gerar uma exceção e retornar um erro de “Contrato de CPIX criptografia ausente”.

Exemplos de contratos de criptografia

Exemplo 1: uma chave de conteúdo para todas as faixas de áudio e vídeo

<cpix:ContentKeyUsageRuleList> <cpix:ContentKeyUsageRule kid="98ee5596-cd3e-a20d-163a-e382420c6eff" intendedTrackType="ALL"> <cpix:KeyPeriodFilter periodId="keyPeriod_0909829f-40ff-4625-90fa-75da3e53278f"/> <cpix:AudioFilter /> <cpix:VideoFilter /> </cpix:ContentKeyUsageRule> </cpix:ContentKeyUsageRuleList>

Exemplo 2: uma chave de conteúdo para todas as faixas de vídeo, uma chave de conteúdo para todas as faixas de áudio

<cpix:ContentKeyUsageRuleList> <cpix:ContentKeyUsageRule kid="98ee5596-cd3e-a20d-163a-e382420c6eff" intendedTrackType="VIDEO"> <cpix:KeyPeriodFilter periodId="keyPeriod_0909829f-40ff-4625-90fa-75da3e53278f"/> <cpix:VideoFilter /> </cpix:ContentKeyUsageRule> <cpix:ContentKeyUsageRule kid="53abdba2-f210-43cb-bc90-f18f9a890a02" intendedTrackType="AUDIO"> <cpix:KeyPeriodFilter periodId="keyPeriod_0909829f-40ff-4625-90fa-75da3e53278f"/> <cpix:AudioFilter /> </cpix:ContentKeyUsageRule> </cpix:ContentKeyUsageRuleList>

Exemplo 3: uma chave de conteúdo para todas as faixas de vídeo e faixas de áudio não criptografadas

<cpix:ContentKeyUsageRuleList> <cpix:ContentKeyUsageRule kid="98ee5596-cd3e-a20d-163a-e382420c6eff" intendedTrackType="VIDEO"> <cpix:KeyPeriodFilter periodId="keyPeriod_0909829f-40ff-4625-90fa-75da3e53278f"/> <cpix:VideoFilter /> </cpix:ContentKeyUsageRule> </cpix:ContentKeyUsageRuleList>

Exemplo 4: várias chaves de conteúdo para diferentes faixas de vídeo (SD/HD), uma chave de conteúdo para todas as faixas de áudio

<cpix:ContentKeyUsageRuleList> <!-- Rule for SD video tracks (up to 1024x576) --> <cpix:ContentKeyUsageRule kid="98ee5596-cd3e-a20d-163a-e382420c6eff" intendedTrackType="SD"> <cpix:KeyPeriodFilter periodId="keyPeriod_0909829f-40ff-4625-90fa-75da3e53278f"/> <cpix:VideoFilter maxPixels="589824" /> </cpix:ContentKeyUsageRule> <!-- Rule for HD video tracks (more than 1024x576) --> <cpix:ContentKeyUsageRule kid="37e3de05-9a3b-4c69-8970-63c17a95e0b7" intendedTrackType="HD"> <cpix:KeyPeriodFilter periodId="keyPeriod_0909829f-40ff-4625-90fa-75da3e53278f"/> <cpix:VideoFilter minPixels="589825" /> </cpix:ContentKeyUsageRule> <!-- Rule for all audio tracks --> <cpix:ContentKeyUsageRule kid="53abdba2-f210-43cb-bc90-f18f9a890a02" intendedTrackType="AUDIO"> <cpix:KeyPeriodFilter periodId="keyPeriod_0909829f-40ff-4625-90fa-75da3e53278f"/> <cpix:AudioFilter /> </cpix:ContentKeyUsageRule> </cpix:ContentKeyUsageRuleList>

Exemplo 5: várias teclas de conteúdo para diferentes faixas de vídeo (SD/HD/UHD), uma chave de conteúdo para todas as faixas de áudio

<cpix:ContentKeyUsageRuleList> <!-- Rule for SD video tracks (up to 1024x576) --> <cpix:ContentKeyUsageRule kid="98ee5596-cd3e-a20d-163a-e382420c6eff" intendedTrackType="SD"> <cpix:KeyPeriodFilter periodId="keyPeriod_0909829f-40ff-4625-90fa-75da3e53278f"/> <cpix:VideoFilter maxPixels="589824" /> </cpix:ContentKeyUsageRule> <!-- Rule for HD video tracks (more than 1024x576, up to 1920x1080) --> <cpix:ContentKeyUsageRule kid="37e3de05-9a3b-4c69-8970-63c17a95e0b7" intendedTrackType="HD"> <cpix:KeyPeriodFilter periodId="keyPeriod_0909829f-40ff-4625-90fa-75da3e53278f"/> <cpix:VideoFilter minPixels="589825" maxPixels="2073600" /> </cpix:ContentKeyUsageRule> <!-- Rule for UHD video tracks (more than 1920x1080) --> <cpix:ContentKeyUsageRule kid="75c6fa78-8b5d-6d75-9653-26f41b78d1a3" intendedTrackType="UHD"> <cpix:KeyPeriodFilter periodId="keyPeriod_0909829f-40ff-4625-90fa-75da3e53278f"/> <cpix:VideoFilter minPixels="2073601" /> </cpix:ContentKeyUsageRule> <!-- Rule for all audio tracks --> <cpix:ContentKeyUsageRule kid="53abdba2-f210-43cb-bc90-f18f9a890a02" intendedTrackType="AUDIO"> <cpix:KeyPeriodFilter periodId="keyPeriod_0909829f-40ff-4625-90fa-75da3e53278f"/> <cpix:AudioFilter /> </cpix:ContentKeyUsageRule> </cpix:ContentKeyUsageRuleList>

Exemplo 6: várias teclas de conteúdo para diferentes faixas de vídeo (SD/HD/UHD1/UHD2), uma chave de conteúdo para todas as faixas de áudio

<cpix:ContentKeyUsageRuleList> <!-- Rule for SD video tracks (up to 1024x576) --> <cpix:ContentKeyUsageRule kid="98ee5596-cd3e-a20d-163a-e382420c6eff" intendedTrackType="SD"> <cpix:KeyPeriodFilter periodId="keyPeriod_0909829f-40ff-4625-90fa-75da3e53278f"/> <cpix:VideoFilter maxPixels="589824" /> </cpix:ContentKeyUsageRule> <!-- Rule for HD video tracks (more than 1024x576, up to 1920x1080) --> <cpix:ContentKeyUsageRule kid="37e3de05-9a3b-4c69-8970-63c17a95e0b7" intendedTrackType="HD"> <cpix:KeyPeriodFilter periodId="keyPeriod_0909829f-40ff-4625-90fa-75da3e53278f"/> <cpix:VideoFilter minPixels="589825" maxPixels="2073600" /> </cpix:ContentKeyUsageRule> <!-- Rule for UHD1 video tracks (more than 1920x1080, up to 4096x2160) --> <cpix:ContentKeyUsageRule kid="75c6fa78-8b5d-6d75-9653-26f41b78d1a3" intendedTrackType="UHD1"> <cpix:KeyPeriodFilter periodId="keyPeriod_0909829f-40ff-4625-90fa-75da3e53278f"/> <cpix:VideoFilter minPixels="2073601" maxPixels="8847360" /> </cpix:ContentKeyUsageRule> <!-- Rule for UHD2 video tracks (more than 4096x2160) --> <cpix:ContentKeyUsageRule kid="63d2ec36-6b7c-9f34-4546-97d01f36f7c5" intendedTrackType="UHD2"> <cpix:KeyPeriodFilter periodId="keyPeriod_0909829f-40ff-4625-90fa-75da3e53278f"/> <cpix:VideoFilter minPixels="8847361" /> </cpix:ContentKeyUsageRule> <!-- Rule for all audio tracks --> <cpix:ContentKeyUsageRule kid="53abdba2-f210-43cb-bc90-f18f9a890a02" intendedTrackType="AUDIO"> <cpix:KeyPeriodFilter periodId="keyPeriod_0909829f-40ff-4625-90fa-75da3e53278f"/> <cpix:AudioFilter /> </cpix:ContentKeyUsageRule> </cpix:ContentKeyUsageRuleList>

Exemplo 7: várias teclas de conteúdo para diferentes faixas de vídeo (SD///HD1/HD2UHD1/UHD2), uma chave de conteúdo para todas as faixas de áudio

<cpix:ContentKeyUsageRuleList> <!-- Rule for SD video tracks (up to 1024x576) --> <cpix:ContentKeyUsageRule kid="98ee5596-cd3e-a20d-163a-e382420c6eff" intendedTrackType="SD"> <cpix:KeyPeriodFilter periodId="keyPeriod_0909829f-40ff-4625-90fa-75da3e53278f"/> <cpix:VideoFilter maxPixels="589824" /> </cpix:ContentKeyUsageRule> <!-- Rule for HD1 video tracks (more than 1024x576, up to 1280x720) --> <cpix:ContentKeyUsageRule kid="37e3de05-9a3b-4c69-8970-63c17a95e0b7" intendedTrackType="HD1"> <cpix:KeyPeriodFilter periodId="keyPeriod_0909829f-40ff-4625-90fa-75da3e53278f"/> <cpix:VideoFilter minPixels="589825" maxPixels="921600" /> </cpix:ContentKeyUsageRule> <!-- Rule for HD2 video tracks (more than 1280x720, up to 1920x1080) --> <cpix:ContentKeyUsageRule kid="cda406d8-9d87-4f76-92da-31110e756176" intendedTrackType="HD2"> <cpix:KeyPeriodFilter periodId="keyPeriod_0909829f-40ff-4625-90fa-75da3e53278f"/> <cpix:VideoFilter minPixels="921601" maxPixels="2073600" /> </cpix:ContentKeyUsageRule> <!-- Rule for UHD1 video tracks (more than 1920x1080, up to 4096x2160) --> <cpix:ContentKeyUsageRule kid="75c6fa78-8b5d-6d75-9653-26f41b78d1a3" intendedTrackType="UHD1"> <cpix:KeyPeriodFilter periodId="keyPeriod_0909829f-40ff-4625-90fa-75da3e53278f"/> <cpix:VideoFilter minPixels="2073601" maxPixels="8847360" /> </cpix:ContentKeyUsageRule> <!-- Rule for UHD2 video tracks (more than 4096x2160) --> <cpix:ContentKeyUsageRule kid="63d2ec36-6b7c-9f34-4546-97d01f36f7c5" intendedTrackType="UHD2"> <cpix:KeyPeriodFilter periodId="keyPeriod_0909829f-40ff-4625-90fa-75da3e53278f"/> <cpix:VideoFilter minPixels="8847361" /> </cpix:ContentKeyUsageRule> <!-- Rule for all audio tracks --> <cpix:ContentKeyUsageRule kid="53abdba2-f210-43cb-bc90-f18f9a890a02" intendedTrackType="AUDIO"> <cpix:KeyPeriodFilter periodId="keyPeriod_0909829f-40ff-4625-90fa-75da3e53278f"/> <cpix:AudioFilter /> </cpix:ContentKeyUsageRule> </cpix:ContentKeyUsageRuleList>

Exemplo 8: várias chaves de conteúdo para diferentes faixas de vídeo (baseadas em múltiplos tipos de atributos), uma chave de conteúdo para todas as faixas de áudio

<cpix:ContentKeyUsageRuleList> <!-- Rule for SD and HD video tracks--> <cpix:ContentKeyUsageRule kid="98ee5596-cd3e-a20d-163a-e382420c6eff" intendedTrackType="SD+HD"> <cpix:KeyPeriodFilter periodId="keyPeriod_0909829f-40ff-4625-90fa-75da3e53278f"/> <cpix:VideoFilter maxPixels="442368" maxFps="30" hdr="false"/> <cpix:VideoFilter minPixels="442369" maxPixels="2073600" maxFps="30" hdr="false"/> </cpix:ContentKeyUsageRule> <!-- Rule for HDR, HFR and UHD video tracks--> <cpix:ContentKeyUsageRule kid="37e3de05-9a3b-4c69-8970-63c17a95e0b7" intendedTrackType="HDR+HFR+UHD"> <cpix:KeyPeriodFilter periodId="keyPeriod_0909829f-40ff-4625-90fa-75da3e53278f"/> <cpix:VideoFilter hdr="true" /> <cpix:VideoFilter minFps="30" /> <cpix:VideoFilter minPixels="20736001" /> </cpix:ContentKeyUsageRule> <!-- Rule for all audio tracks--> <cpix:ContentKeyUsageRule kid="53abdba2-f210-43cb-bc90-f18f9a890a02" intendedTrackType="AUDIO"> <cpix:KeyPeriodFilter periodId="keyPeriod_0909829f-40ff-4625-90fa-75da3e53278f"/> <cpix:AudioFilter /> </cpix:ContentKeyUsageRule> </cpix:ContentKeyUsageRuleList>

Exemplo 9: uma chave de conteúdo para todas as faixas de vídeo, várias chaves de conteúdo para faixas de áudio estéreo e multicanal

<cpix:ContentKeyUsageRuleList> <!-- Rule for video tracks--> <cpix:ContentKeyUsageRule kid="98ee5596-cd3e-a20d-163a-e382420c6eff" intendedTrackType="VIDEO"> <cpix:KeyPeriodFilter periodId="keyPeriod_0909829f-40ff-4625-90fa-75da3e53278f"/> <cpix:VideoFilter /> </cpix:ContentKeyUsageRule> <!-- Rule for stereo audio tracks--> <cpix:ContentKeyUsageRule kid="53abdba2-f210-43cb-bc90-f18f9a890a02" intendedTrackType="STEREO_AUDIO"> <cpix:KeyPeriodFilter periodId="keyPeriod_0909829f-40ff-4625-90fa-75da3e53278f"/> <cpix:AudioFilter maxChannels="2"/> </cpix:ContentKeyUsageRule> <!-- Rule for multichannel audio tracks--> <cpix:ContentKeyUsageRule kid="7ae8e96f-309e-42c3-a510-24023d923373" intendedTrackType="MULTICHANNEL_AUDIO"> <cpix:KeyPeriodFilter periodId="keyPeriod_0909829f-40ff-4625-90fa-75da3e53278f"/> <AudioFilter minChannels="3"/> </cpix:ContentKeyUsageRule> </cpix:ContentKeyUsageRuleList>

Exemplo 10: uma chave de conteúdo para todas as faixas de vídeo, várias chaves de conteúdo para estéreo e dois tipos de faixas de áudio multicanal

<cpix:ContentKeyUsageRuleList> <!-- Rule for video tracks--> <cpix:ContentKeyUsageRule kid="98ee5596-cd3e-a20d-163a-e382420c6eff" intendedTrackType="VIDEO"> <cpix:KeyPeriodFilter periodId="keyPeriod_0909829f-40ff-4625-90fa-75da3e53278f"/> <cpix:VideoFilter /> </cpix:ContentKeyUsageRule> <!-- Rule for stereo audio tracks--> <cpix:ContentKeyUsageRule kid="53abdba2-f210-43cb-bc90-f18f9a890a02" intendedTrackType="STEREO_AUDIO"> <cpix:KeyPeriodFilter periodId="keyPeriod_0909829f-40ff-4625-90fa-75da3e53278f"/> <cpix:AudioFilter maxChannels="2"/> </cpix:ContentKeyUsageRule> <!-- Rule for multichannel audio tracks (3 to 6 channels)--> <cpix:ContentKeyUsageRule kid="7ae8e96f-309e-42c3-a510-24023d923373" intendedTrackType="MULTICHANNEL_AUDIO_3_6"> <cpix:KeyPeriodFilter periodId="keyPeriod_0909829f-40ff-4625-90fa-75da3e53278f"/> <cpix:AudioFilter minChannels="3" maxChannels="6"/> </cpix:ContentKeyUsageRule> <!-- Rule for multichannel audio tracks (7 channels and more)--> <cpix:ContentKeyUsageRule kid="81eb3761-55ff-4d22-a31d-94f01bbfd8ba" intendedTrackType="MULTICHANNEL_AUDIO_7"> <cpix:KeyPeriodFilter periodId="keyPeriod_0909829f-40ff-4625-90fa-75da3e53278f"/> <cpix:AudioFilter minChannels="7"/> </cpix:ContentKeyUsageRule> </cpix:ContentKeyUsageRuleList>