ISO/IEC 23001:数字版权管理的加密标准(三)

媒体数据加密

在这里插入图片描述

字段语义

这段话是关于常见加密方案中使用的样本组和样本辅助信息的语义。其中,以下字段具有以下含义:

    • isProtected是轨道或样本组中样本保护状态的标识符。该标志可以取以下值:
      • 0x0:未受保护;
      • 0x1:受保护(由方案类型框中的scheme_type字段发出信号,例如对于scheme_type为“cenc”的情况,轨道默认使用“cenc”方案进行AES-CTR加密);
        • 0x02-0xFF:保留。
    • Per_Sample_IV_Size是InitializationVector字段的字节数。支持以下值:
      • 如果isProtected标志为0x0(未受保护)或使用常量IV,则为0;
      • 8指定64位Initialization Vectors;
      • 16指定128位Initialization Vectors。
    • constant_IV_size是constant_IV字段的字节数。支持以下值:
      • 8指定64位Initialization Vectors;
      • 16指定128位Initialization Vectors。
    • KID是唯一标识解密相关样本所需的密钥的密钥标识符,以便KID足以识别用于加密内容的密钥的单独存储的许可证。这允许在文件或轨道中识别多个加密密钥。在受保护的轨道中未受保护的样本应通过具有isProtected标志为0x0、Per_Sample_IV_Size为0x0和KID值为0x0来识别。强烈建议使用UUID [2]作为KID,以满足跨所有应用程序的唯一性要求。
    • InitializationVector指定解密样本所需的Initialization Vector(IV)。对于isProtected标志为0x0,不需要Initialization Vectors,辅助信息应具有大小为0,即不存在。对于isProtected标志为0x1:
      • IV应使用Per_Sample IVs或Constant IVs提供。
      • 如果Per_Sample_IV_Size字段为16,则InitializationVector指定整个128位IV值;
      • 如果Per_Sample_IV_Size字段为8,则其值被复制到Initialization Vector的字节0到7中,Initialization Vector的字节8到15设置为零。
    • subsample_count指定此样本中存在的Subsample加密条目数。如果存在,则此字段应大于0。
    • BytesOfClearData指定此Subsample加密条目开头的清晰数据字节数。注意,如果此Subsample不存在清晰字节,则此值可能为零。
    • BytesOfProtectedData指定在清晰数据后面的受保护数据字节数。注意,如果此Subsample不存在受保护字节,则此值可能为零。Subsample加密条目不得包括在BytesOfClearData字段和BytesOfProtectedData字段中都为零的条目。样本中所有BytesOfClearData和BytesOfProtectedData的总长度应等于样本的长度。Subsample加密条目应尽可能紧凑地表示。例如,使用{15 clear,0 protected},{17 clear,500 protected}的两个条目,而不是使用{32 clear,500 protected}的一个条目。如果使用基于模式的加密,则该模式适用于受保护的字节范围BytesOfProtectedData;否则,所有受保护的字节都将被加密。
    • crypt_byte_block除非启用基于模式的加密,否则应为零。
    • skip_byte_block除非启用基于模式的加密,否则应为零。

初始化向量

每个样本的初始化向量(IV)值应该是一个常量IV,位于样本条目或样本组描述中,或者应该在每个受保护样本的样本辅助信息中被逐个信令并定位。有关如何形成和存储初始化向量的详细信息,请参见上一节。建议应用程序在序列的第一个初始化向量中生成一个随机数。

其中,对于每个样本(sample),可以选择使用8字节或16字节的IV。对于8字节的IV,推荐使用随机起始值,并在后续样本中逐个递增最高8字节,以确保每个16字节的IV和CTR计数器值组合都是唯一的。如果超过了最大8字节值,则8字节IV可以从最大值(0xFFFFFFFFFFFFFFFF)回滚到最小值(0x0)。

对于16字节的IV,可以选择使用前一个样本的加密块计数器加上前一个样本的IV来生成后续样本的IV。对于CBC模式的IV,可以随机生成或按顺序生成,不需要每个样本或子样本都是唯一的。存储每个样本的唯一IV可以增加加密熵,并为每个样本提供随机访问和错误恢复。CTR模式需要为每个共享密钥的加密块提供唯一的计数器值。

一些方案使用常量IV作为默认值或映射到样本组的一组样本的IV。对于分段文件,常量IV通常需要一个样本组盒子和一个包含样本组IV的样本组描述盒子。

AES-CTR mode counter operation

这种加密方式使用了美国国家标准与技术研究院(NIST)发布的高级加密标准(AES),使用128位密钥进行计数器模式(AES-CTR)加密。AES-128 CTR模式是一种16字节块密码,可以加密任意大小的字节流,无需填充或留下明显的余数。计数器模式通过使用AES块加密算法对计数器块进行加密,使用KID指定的密钥,然后将结果与要加密或解密的数据进行异或运算。CTR模式计数器块应该由每个样本的IV构建,并按照下面和9.2中描述的方式递增。

当指定8字节的Per_Sample_IV_Size时,16字节IV的最低有效8字节(第8到15字节)应该设置为零,并用作64位块计数器,每加密一个16字节的密文块,该计数器就会递增1。当指定16字节的Per_Sample_IV_Size时,最低有效的8字节(64位计数器)达到最大值(0xFFFFFFFFFFFFFFFF)时,递增它应该将8字节块计数器重置为零(第8到15字节),而不影响计数器的其他8字节(第0到7字节)。

在每个样本中,加密数据应该是一个逻辑连续的16字节块的字节序列,而不管由子样本加密或模式加密标识的物理交错的明文数据。只有样本中的最后一个密文块可以是部分密文块(少于16字节)。计数器应该在每个加密的密文块后递增一次,并在下一个样本中使用存储在样本辅助信息中的InitializationVector重新启动。

CENC && CENS

CENC(Content Encryption and Decryption)和CENS(Content Encryption but Not Storage)是两种不同的加密算法。

CENC是一种用于保护媒体内容的加密算法,它将媒体内容加密后存储,并在播放时进行解密。CENC使用一种称为“密钥容器”的机制,该容器包含多个密钥,每个密钥用于加密不同的媒体片段。这种方式使得媒体内容可以在不同的设备上播放,因为设备可以根据自身的能力选择合适的密钥进行解密。

CENS是一种用于保护数据的加密算法,它将数据加密后存储,但不提供解密功能。相反,解密密钥由外部系统或服务提供,并在需要时通过安全通道传输给解密方。CENS通常用于保护敏感数据,如用户密码、信用卡信息等,以防止数据泄露。

Full sample encryption

1-General

除了NAL结构化视频,所有加密媒体类型都可以使用完全样本加密,而NAL结构化视频必须使用子样本加密。

2-使用AES-CTR模式进行全样本加密

AES-CTR模式加密应使用每个样本唯一的IV,并加密样本中的所有字节。

在AES CTR(Counter)模式中,iv(Initialization Vector,初始化向量)是一个固定长度的随机数,用于初始化加密算法的计数器。iv的长度通常与加密算法的块大小相同。
iv的作用是确保每次加密的结果都是唯一的,即使相同的明文也会得到不同的密文。这是因为iv会与计数器进行异或操作,从而改变计数器的初始值。这样做的目的是为了防止明文中的重复模式在密文中被暴露出来。
在使用AES CTR模式进行加密时,iv需要保密,但不需要保密得像密钥那样严格。iv可以与密文一起传输,只要确保每次加密使用的iv都是唯一的即可。在解密时,接收方需要使用相同的iv来初始化计数器,以便正确地解密密文。
需要注意的是,iv在使用过程中不能重复使用,否则会导致密文的安全性受到威胁。因此,在每次加密时,iv都需要是随机生成的,并且不能在同一个密钥下重复使用。
IV是用于初始化计数器的值,而不是计数器本身的值。计数器是一个递增的值,每次加密一个块时都会自动递增。因此,IV只需要在加密第一个块时使用,后续的块会使用递增后的计数器值作为IV。

图片

aes-ctr mode is a block cipher that can encrypt complete 样本,但大小不是16字节的完整样本。加密的块用作演示底层块如何加密样本。块7小于16字节,以演示 ctr 模式可以加密部分加密块,即小于16字节的加密块。每个样本都以唯一的 iv 开始。

3-使用AES-CBC模式的全样本加密

完整的AES-CBC模式应使用AES [FIPS197]中指定的高级加密标准,使用128位密钥以Cipher Block Chaining模式(AES-CBC-128)进行加密,如块密码模式[NIST 800-38A]中所指定的。

每个样本都应使用样本辅助信息中定义的IV进行加密,并存储在样本辅助信息中。加密的NAL结构化视频轨道应使用后面定义的子样本保护。

所有其他类型的加密轨道应使用完整的整块样本加密。

每个样本都应作为连续的密码块链进行加密,以初始化向量(IV)开头,该IV可以由样本辅助信息每个样本指定,也可以由样本组和样本组描述指定为多个样本共用的常量。

根据ISO/IEC 23001的规定,AES-CBC模式要求所有加密的密码块都是16字节,而本部分定义的方案会导致部分块未加密。为了避免添加会改变文件大小的填充,CBC模式不会加密小于16字节的块示例中的第7个块显示为小于16字节,以说明这一点。每个样本的初始向量(IV)会在使用’cbc1’完整样本加密时应用。

子样本加密

1-定义(规范性)

子采样加密将每个样本分成一个或多个连续的子采样。每个子采样包括一个未受保护的部分和一个受保护的部分,其中只有一个部分可以是零字节的长度(通常都是非零值)。

所有子采样的总长度应等于样本本身的大小,并且它们不应重叠(由所有组成样本的子采样的BytesOfClearData +
BytesOfProtectedData确定)。

除了“cbcs”方案外,样本的受保护字节序列应被视为逻辑上连续的16字节密码块链,即使它们被子采样的BytesOfClearData或skip_byte_block分隔开。
在“cbcs”方案中,每个子采样应被视为一个单独的密码块链,以样本相关的初始化向量开始。CTR模式计数器应在每个完整的加密密码块之后递增,忽略子采样边界。

在“cbc1”方案中,CBC模式密码块链接应在将IV应用于样本中的第一个密码块之后连续进行。在使用CTR模式时,除了最后一个密码块可能不是16字节外,所有密码块都应为16字节。当由子采样的受保护数据范围终止时,可以将部分CTR密码块作为样本的最后一个块进行加密。

对于“cenc”和“cens”保护方案,应将受保护数据的字节数调整为16字节的倍数,以避免在子采样末尾出现部分块。应用规范可能禁止部分CTR密码块,并要求子采样块的结束对齐以减少解密的复杂性。

对于“cbc1”保护方案,受保护数据的大小应调整为16字节的倍数,以避免在子采样末尾出现部分块

对于“cbcs”保护方案,子采样末尾的部分块应保持未加密状态

在“cbcs”方案中,CBC模式密码块链接应在每个子采样中连续进行并且IV应用于每个子采样的第一个加密密码块。应用规范可以要求受保护数据从视频切片数据的第一个完整字节开始,以便大小为16字节倍数可能不可行,从而无法避免子采样中的部分块。

图3是一个子采样加密示例,展示了两个样本,每个样本包含两个子采样,每个子采样都有一个每个样本初始化向量和一个逻辑连续的16字节密文块序列,其中穿插着未加密的字节范围。样本1的块2在第二个子样本中继续是可能的,但不建议使用方案“cenc”,而且也不要使用“cens”、“cbc1”和“cbcs”。

一个子样本的加密块与前一个子样本的加密块相关联,并与计数区一起,连续的加密。

第一个样本中的所有加密块都是16字节的,除了最后一个加密块,它可能小于16字节。

为了说明 CTR 模式下,加密块可以小于16字节,而不改变文件大小,我们将一个小于16字节的加密块与一个计数区一起加密。

如果使用 CBC 模式,则会加密一个小于16字节的加密块,并将其与前一个加密块相关联。

2-nal结构化视频轨道的子样本加密

2.1 nal视频样本的结构和子样本的使用(信息性)

网络抽象层(NAL)结构化视频规范定义了可以按顺序组成基本流和访问单元的NAL单元语法元素,这些访问单元可以解码为图像。ISO/IEC 14496-15规定了如何将NAL结构化视频存储在ISO基本媒体文件中,以及如何将每个访问单元作为样本存储在轨道中。每个样本由多个NAL单元组成,每个NAL单元由一个长度字段分隔,指示NAL单元的长度。每个NAL单元包含一个NAL类型头,而视频NAL包含一个切片头。

安全视频处理器通常不会将解密后的视频流数据提供给应用程序,以保护解密后的视频,因此需要访问视频片段头或SEI NAL单元中存储的信息(例如字幕和框架信息)的显示应用程序将无法访问受保护的数据。为了保护视频加密密钥,不应使用相同的密钥加密音频轨道,因为音频通常没有与视频相同的密钥保护级别。

为了对齐加密字节或消除设备中部分密码块解密的需要,一些视频片段数据可能仍然未加密。由于NAL结构化视频通常通过空间和时间预测进行压缩,并且结果熵编码(例如CABAC),因此丢失部分样本仍将使重建图像几乎不可能,并且预测自中的图像也会受到影响。

保护范围可能不足以加密所有视频数据。保护范围的开始可能留下一些视频未加密,以实现保护范围的字节或16字节块连接。保护范围也可以使用‘cens’和‘cbcs’方案部分加密,该方案在保护范围中应用加密和解密模式。

并非所有解码器都设计用于解码包含NAL大小头并缺少解码参数NAL(例如序列参数集(SPS)和图像参数集(PPS)NAL)的ISO媒体格式流(例如“avc1”样本条目格式)。

一些解码器设计用于解码ISO / IEC 14496-10:2014附录B字节流格式中的视频基本流,其中包含以起始码为分隔符的NAL单元和在流中的每个访问点后跟随的SPS / PPS参数NAL(可能需要将常见加密的ISO媒体基本流重新格式化为字节流格式以进行解码。

还可能需要重新格式化常见加密的基本流,以便使用像RTP这样的网络协议分组NAL单元或重新打包ISO媒体和MPEG-2传输流容器之间的常见加密基本流。将非视频NAL单元和所有NAL大小和类型头保留未加密允许重新格式化基本流而无需解密。完全样本加密防止在解密样本之前重新格式化视频流和信息访问。

但是,如果NAL头和除视频类型以外的完整NAL保留未加密,则应用程序可以通过将未加密的NAL大小头替换为与NAL类型头中指示的NAL类型匹配的起始码,并在每个访问单元分隔符NAL之后插入PPS / SPS NAL单元,将ISO媒体视频样本(例如“avc1”,“avc3”,“hev1”等)转换为ISO / IEC 14496-10:2014附录B字节流。

由于NAL起始码在常见加密中始终未加密,因此加密数据中的任何起始码都是无效的,并且可以被处理器忽略。 ISO基本媒体文件解析器忽略所有起始码。加密前和解密后的NAL包括符合NAL结构化视频规范的仿真预防,因此解码器可以可靠地检测到起始码。

常见加密规定了NAL结构化视频的子采样加密,仅加密视频数据,并将其他NAL类型,所有NAL大小和类型头以及视频切片头保留未加密。加密器应注意NAL结构,但解密器可能是视频格式不可知的,并简单地解密存储在样本辅助信息中的子采样信息指示的字节范围。

仅加密视频切片数据允许应用程序访问SEI NAL中的信息以及视频切片头中的图像信息。访问视频NAL切片头信息可能对演示应用程序管理图像缓冲区,层,瓦片,并行切片解码等至关重要,通过在安全视频解密之前读取切片头信息。

2.2子样本加密应用于nal结构化视频(规范)

NAL结构化视频样本必须完全由一个或多个连续的子样本覆盖。视频NAL中的切片数据可以由多个子样本覆盖,以创建多个清晰和受保护的范围,或者覆盖受保护的切片数据,该数据大于单个BytesOfProtectedData字段的最大大小,每个子样本的BytesOfClearData大小均为零。

多个未受保护的NAL应由单个子样本清晰范围覆盖,但是大的清晰范围可以由多个子样本覆盖,其中BytesOfProtectedData大小为零。对于使用“avc1”样本描述流格式的AVC视频,每个NAL单元的NAL lengthSizeMinusOne字段和nal_unit_type字段(长度后的第一个字节)必须未加密,仅应加密切片NAL中的视频数据。

注意1:在ISO/IEC 23001的第一版中,加密的切片头未被禁止,但被应用规范禁止。对于“avc1”,将切片头保留为未加密的“SHOULD”要求允许具有加密切片头的可能的旧内容符合此新版本。

但是,新内容不应加密切片头,否则可能无法在安全视频解码器中正确解码。注意2:长度字段的大小是可变长度的。它可以是1、2或4个字节长,并在AVCDecoderConfigurationRecord的样本条目中指定为lengthSizeMinusOne字段。对于其他NAL结构化视频样本描述流格式(例如“avc3”、“hvc1”、“hev1”等),仅应保护视频切片数据。

为避免疑义:视频NAL切片、大小和类型头必须未加密,其他NAL类型必须未加密。每个NAL可能有多个子样本,每个子样本可能有多个NAL,例如当多个未加密的NAL包含在一个清晰字节范围内以实现高效表示时。

可以使用每个视频NAL的多个子样本来实现部分视频加密,这些子样本指示每个视频切片的多个清晰和受保护字节范围;但是,应使用模式加密(例如使用“cens”和“cbcs”方案)以更有效地表示部分加密。

2.3 应用于视频nal的AES-CTR模式的子样本加密

图6详细说明了所使用的IV、清晰数据的区域、受保护数据的区域以及AL单元和样本边界。该图适用于“cenc”和“cens”保护方案。

AES-CTR模式是一种分块密码,可以加密部分密码块。密码块用来说明每个样本之间的密码块链。示例中的最后一个密码块(Block 6)在样本1和样本2中都少于16字节,以说明CTR模式允许加密部分密码块。

另外,注意样本1的密码块2在下一个子样本中继续,形成一个16字节的密码块和一个计数器值。这个示例展示了与每个视频NAL单元大小匹配的子样本,但这并不是ISO/IEC 23001的一般约束。

保护方案"cens"可能会在"加密数据"范围内应用一种加密和明文密码块的模式。

2.4使用应用于视频nal的“cbc1”AES-CBC模式的子样本加密

注AES-CBC模式“cbc1”方案以每个样本IV开始每个样本,然后形成16字节密码块,而不考虑跨子样本字节OfClearData。清除数据的大小适当,以便最后每个子样本中的块为16字节(本例中的块2和6)。

2.5使用应用于视频nal的“cbcs”AES-CBC的子样本加密

AES-CBC模式下的“cbcs”方案。在这个方案中,每个子样本(一段需要加密的数据)都以一个固定的初始化向量(IV)开始,然后对完整的16字节密文块进行加密,最后留下任何不足16字节的部分未加密。

保护模式由一系列加密的密文块序列和跳过的明文块组成,以BytesOfProtectedData范围的结束为终止。如果范围内的最后一个块是不完整的,则不加密它。

AES-CBC是一种对称加密算法,其中CBC表示密码块链接模式(Cipher Block Chaining)。在CBC模式中,每个明文块都会与前一个密文块进行异或操作,然后再进行加密。这种链接方式可以增加密码的随机性和安全性。
CBCS(Cipher Block Chaining with Segmenting)和CBC1(Cipher Block Chaining with One-bit Ciphertext Stealing)是对CBC模式的改进和扩展。

  1. CBCS:CBCS是对CBC模式的改进,它引入了分段加密的概念。在CBCS中,明文被分成多个段,每个段都会与前一个段的密文块进行异或操作,然后再进行加密。这样可以提高加密的效率和安全性。
  1. CBC1:CBC1是对CBC模式的扩展,它解决了最后一个明文块长度不足一个块大小时的问题。在CBC1中,最后一个明文块会被填充到一个完整的块大小,然后进行加密。加密后的密文块会与前一个密文块进行异或操作,然后截取出最后一个明文块的部分作为最终的密文块。这种方式可以保证最后一个明文块的完整性和安全性。

总结来说,CBCS是对CBC模式的改进,引入了分段加密的概念;而CBC1是对CBC模式的扩展,解决了最后一个明文块长度不足一个块大小时的问题。这些改进和扩展都旨在提高加密算法的效率和安全性。

CBC和CBCS都是加密算法中的一种模式,其中CBC是Cipher Block Chaining的缩写,CBCS是Cipher Block Chaining with Cipher Text Stealing的缩写。
它们的主要区别在于加密和解密的方式不同。在CBC模式中,每个明文块都会与前一个密文块进行异或运算,然后再进行加密。而在CBCS模式中,最后一个明文块可能不是完整的块,因此需要使用一种称为“密文抢夺”的技术来处理。
具体来说,CBCS模式中,最后一个明文块被分成两个部分,其中一部分与前一个密文块进行异或运算,然后进行加密,另一部分则被保留下来。在解密时,需要将最后一个密文块解密后,再将其与保留下来的明文块部分进行异或运算,得到完整的明文块。
因此,CBCS模式相对于CBC模式来说,更适合于处理不完整的明文块。

CBC1(Cipher Block Chaining 1)模式:
CBC1模式是对CBC模式的改进,旨在解决CBC模式的并行性问题。
CBC1模式将明文分成固定长度的块,并使用前一个密文块与当前明文块进行异或运算,然后再进行加密。与CBC模式不同的是,CBC1模式使用了两个初始向量(IV),一个作为第一个密文块的输入,另一个作为第二个密文块的输入。
CBC1模式的加密和解密可以并行进行,因为每个密文块的加密只依赖于前两个明文块的加密结果。这提高了加密和解密的效率。

模式加密

1-定义

模式加密利用加密和明文(“跳过”)16字节块的模式,覆盖了子采样的受保护范围。注意,子采样仅用于保护视频切片数据,而将NAL大小、NAL类型、视频切片头和其他NAL类型保留为明文。当版本1的Track Encryption Box(‘tenc’)中的字段default_crypt_byte_block和default_skip_byte_block为非零数时,应用模式加密。

该模式应包括由字段default_crypt_byte_block或crypt_byte_block(如果在样本组描述中存在)指示的加密密码块数,后跟由字段default_skip_byte_block或skip_byte_block(如果在样本组描述中存在)指示的未加密样本数据块数。

如果子采样中的最后一个块模式不完整,则应跟随部分模式,直到被BytesOfProtectedData大小截断,任何部分的crypt_byte_block都应保留为未加密状态。

当使用AES-CTR模式时,IV应用于每个样本的第一个加密密码块。当使用AES-CBC模式时,IV应用于每个子采样的第一个加密密码块。

2-应用于视频nal单元的模式加密示例

模式加密是由垂直的黑白线表示的一种加密密码块的模式,后面跟着明文块。该模式跨越由BytesOfProtectedData指定的子采样保护范围,并大致跨越片头后的视频数据。

字节或块对齐可能需要使BytesOfProtectedData的起始位置不在片数据的第一个位,而是在其后的一些位或字节。

在“cens”方案中,多个子采样可以映射到单个NAL,多个明文NAL可以映射到单个子采样,但在“cbcs”方案中,每个VCL NAL可能需要一个单独的子采样。

全块全样本加密

在整块全样本加密中,整个样本都受到保护。每个样本从偏移量0开始加密(没有未加密的前导),一直加密到最后一个16字节边界,留下任何尾随的0-15字节未加密。初始化向量(IV)在每个样本中都会重置。

猜你喜欢

转载自blog.csdn.net/weixin_45264425/article/details/133198108