APP下载

视频内容加密封装技术研究

2015-07-02郭晓霞

电视技术 2015年8期
关键词:密钥加密编码

郭晓霞,王 磊,沈 阳

(国家新闻出版广电总局 广播科学研究院,北京 100866)

视频内容加密封装技术研究

郭晓霞,王 磊,沈 阳

(国家新闻出版广电总局 广播科学研究院,北京 100866)

基于HTTP的动态自适应流媒体技术面向多种智能终端提供视频服务是目前互联网视频服务的主流模式,内容加密封装是互联网视频数字版权保护的关键技术之一。对主流互联网视频格式的封装方法、加密方法进行分析,并提出基于网络提取层的视频内容加密方案,为互联网视频服务提供商实现视频内容保护提供技术支撑。

内容加密;数字版权管理;互联网视频;HLS;MPEG-DASH;CENC

目前,采用基于HTTP的动态自适应流媒体技术面向智能手机、平板电脑、智能电视机顶盒以及PC等提供多屏互动的视频服务已经成为互联网视频服务的主流模式。互联网视频服务的广泛开展,亟需有效的技术手段抑制网络视频盗版问题,保障互联网视频服务运营可管可控。内容加密封装是互联网视频内容版权保护的关键技术之一,互联网视频的加密内容封装格式,加密后的内容应包含内容标识及获取许可证所必须的信息。根据不同的应用场景,需要定义不同的加密内容封装格式,目前主流的加密封装格式包括基于ISO基础媒体文件格式的通用加密格式(CENC)、基于HTTP动态自适应流媒体协议(MPEG DASH)的加密内容封装格式、Ap⁃ple公司的加密内容格式(HLS)。

1 视频封装格式概述

目前主流的视频压缩编码格式是H.264/AVC,H.264/ AVC是ITU-T VCEG和ISO/IEC MPEG共同开发的视频处理标准,ITU-T作为标准建议H.264,ISO/IEC作为国际标准14496-10(MPEG-4第10部分)高级视频编码(AVC)。H.264的算法在概念上可以分为两层:视频编码层(Video Coding Layer,VCL)和网络提取层(Network Abstraction Layer,NAL),NAL层为视频内容提供了与网络无关的统一接口,支持多种网络情况下的传输。

视频信号以H.264编码压缩到NAL单元中,NAL层之上是根据不同的内容封装格式或传输格式对NAL单元的打包。例如视频流可以被打包到PES包中,PES包又被封装成188 byte大小TS包作为TS流输出;视频流也可以被打包成Sample,然后增加头部信息等封装成MP4文件,如图1所示。

图1 视频内容格式

因此对于视频内容的加密,可以有多种选择。例如对VCL层视频编码数据的加密,如对编码的DCT系数进行加密,对熵编码的数据进行加密等;在编码层对NAL层不同类型的帧选择性加密,如HLS的NAL层加密;在视频封装层对数据进行加密,如对TS包进行加密(HLS的全文加密),或对MP4文件的sample进行加密(基于14496-12基本文件格式的CENC加密和PDCF打包格式);解决方案层的加密,如MPEG-DASH加密。

视频加密方案的具体选择需要结合视频来源的内容格式来考虑,如果视频来源是ES基本码流,则选择在编码层对NAL单元加密可以提供与上层封装及切片无关的加密方案;如果视频来源是已经封装好的内容格式,例如TS包或MP4文件,则应该根据具体的封装格式选择相应的加密方案(后文在叙述中较多使用了标准中的代码描述)。

2 DASH加密

2.1 DASH概述

基于HTTP的动态自适应流媒体DASH以媒体流模式提交媒体内容,其控制只依赖于客户端。客户端通过HTTP协议从标准的Web服务器请求数据,服务器不需要做适应于DASH的配置。23009-1中定义了从标准HTTP服务器到HTTP客户端间媒体内容分发和缓存所需的格式,主要包括MPD和媒体分片格式。MPEG-DASH的加密格式在23009-4中描述[1-2]。

2.2 MPD文件

媒体内容编码和提交版本,以及适合的描述形成媒体表述(MPD文件),MPD文件层次机构如图2所示。

图2 DASH基础段加密

1)媒体内容由单独或多个时间上连续的媒体内容时期(periods)组成。

2)每个period都由一个或多个媒体内容组件组成,例如不同语言的音频组件和视频组件。媒体内容组件由媒体内容组件类型标识,例如音频或视频。

3)每个媒体内容组件可能有几个不同的编码版本,即媒体流。每个媒体流继承媒体内容的属性,包括媒体内容peri⁃od、编码参数、编码率等。

4)段可以被分为子段,每个子段包含若干个完整单元,客户端可以发起请求来请求子段。

DASH中不同媒体内容组件的所有编码版本共享相同的时间线。媒体内容里的单元被定位到全局通用的时间线,同步不同的媒体单元,便于相同媒体组件在不同编码版本之间切换。

客户端可以在一个Adaptation Set的不同Representation之间切换。切换过程为:首先播放到这个Representation的段或子段的结尾,然后播放新的Representation的下一个段或子段。

2.3 数据加密

ISO/IEC 23009-4定义了DASH的内容保护框架,用于获取媒体段的解密方法以及解密参数。MPD文件提供加密接口,定义key/IV的获取方式,并支持多个加密系统加密同一份内容。

1)加密方式

DASH段加密有两种方式:基础段加密方式和基于许可证的DRM方式。

(1)基础段加密

DASH中基础的段加密方式采用AES-CBC算法实现,使用HTTP(S)实现密钥传输。DASH的客户端能够识别出每个段的KEY和IV,并发起请求获取KEY实现媒体段的解密,如图2所示。

(2)DRM系统加密

DASH支持基于许可证的DRM系统。在这种方式中,客户端获取许可证,通过许可证获取KEYID,并通过KEY和MPD中包含的加密信息实现媒体段的解密。每个DRM系统可以采用该系统的许可证和KEYID的映射方式。

2)段加密

DASH中媒体分块如果是加密的,其加密相关信息通过ContentProtection来指定。

内容加密方法定义:通过SegmentEncryption@schemeI⁃dUri指定,DASH规定客户端应该强制支持AES-128 CBC加密,可选支持AES-128 GCM加密。

Key/IV的获取:MPD优先从License元素获取key/IV信息,如果License元素不存在,则从CryptoPeriod和CryptoTime⁃line获取key/IV信息。

许可证获取:对于基于许可证的内容保护系统,通过Li⁃cense元素可获取许可证URL,DASH支持相同内容的多个内容保护系统加密。

密码有效期:每个加密段都同一个密码有效期关联,同一个密码有效期的加密段使用相同的key/IV,密码有效期的持续时间以段的数目为量度。

3)命名空间定义

MPD文件的开始处增加命名空间定义。内容保护的描述在命名空间urn:mpeg:dash:schema:mpd:2011中定义。Seg⁃mentEncryption,CryptoPeriod和 CryptoTimeline在命名空间urn:mpeg:dash:schema:sea:2013中定义。

4)内容保护元素定义

(1)ContentProtection

DASH中媒体分块如果是加密的,其加密相关信息通过ContentProtection来指定,相关描述见表1。DASH中Content⁃Protection的@schemeIdUri属性应为urn:mpeg:dash:sea:enc: 2013。

表1 ContentProtection属性说明

@schemeIdUri:23009-4中规定@schemeIdUri属性为urn: mpeg:dash:sea:enc:2013。GY/T 277—2014中增加扩展@sche⁃meIdUri的值为ChinaDRM申请的唯一编号。

(2)SegmentEncryption

SegmentEncryption描述应用在所有密码有效期的段加密属性,相关描述见表2。

表2 SegmentEncryption属性说明

(3)License

License元素作用于整个密码有效期,ContentProtection内可以有一个以上的License元素。如果License缺省,则加密参数由cryptoPeriod和cryptoTimeline指定,相关描述见表3。

表3 License属性说明

(4)CryptoPeriod通用属性

CryptoPeriod指加密参数的持续时间。CryptoPeriod代表一个单独的密码有效期,CryptoTimeline代表多个类似的CryptoPeriod,相关描述见表4。

表4 CryptoPeriod通用属性说明

(5)CryptoPeriod

CryptoPeriod定义一个密码有效期,提供key和IV,同时定义哪些段加密,相关描述见表5。CryptoPeriod唯一对应一个加密起始段,CryptoPeriod可能是有限的时间(即段的数量),也可能是无限制的(到当前Period结束)。

表5 CryptoPeriod属性说明

(6)CryptoTimeline

CryptoTimeline用来定义持续长度的多个CryptoPeriod,相关描述见表6。

表6 CryptoTimeline属性说明

2.4 数据认证

MPD文件提供获取附加认证数据(AAD)接口。认证框架同内容保护框架无关,即认证可应用在加密段,也可以应用在不加密的段。如果认证和加密同时进行,则操作模式应该是“认证,然后加密”,这种方式可确保认证独立于加密,认证数据不随加密参数的改变而改变。

MPD中增加段认证定义的步骤:

1)增加EssentialProperty或SupplementalProperty定义。其中EssentialProperty代表认证是必选的,SupplementalProp⁃erty代表认证可选。

2)EssentialProperty或SupplementalProperty中@schemeI⁃dUri的取值应该为urn:mpeg:dash:sea:auth:2013。

3)EssentialProperty或SupplementalProperty中增加Con⁃tentAuthenticity元素。ContentAuthenticity中定义认证算法,和用来下载认证数据的URL模板。

DASH支持的认证算法包括SHA-256和HMAC-SHA1,见表7。

表7 DASH支持的认证算法

3 ISO媒体内容通用加密方法(CENC)

3.1 CENC概述

通用加密格式CENC是基于ISO/IEC 14496-12的一种加密格式,CENC加密标准在ISO 23001-7及补充文档ISO 23001-7 Amendment1中描述[3-4]。

3.2 加密机制

CENC加密对sample entry做如下替换:

1)在每个track中添加Protection Scheme Information Box('sinf'),标识内容为加密内容。

2)Protection SchemeInformation Box('sinf')中 包 含Scheme Type Box('schm'):定义相应的加密算法,其中scheme_type定义了加密类型,scheme_version定义模式版本。CENC加密方式中,模式类型为scheme_type='cenc',CENC采用AES-CTR算法加密;模式版本为scheme_version= 0x00010000。

3)Protection Scheme Information Box('sinf')中应包含Scheme Information Box('schi')。

4)Scheme Information Box('schi')中包含Track Encryp⁃tion Box('tenc'),描述该track的加密参数。

CENC通用加密格式定义的相关参数包含在如下box中:

1)内容保护系统的方案相关信息,例如许可证和授权获取信息,包含在ProtectionSystemSpecificHeaderBox('pssh')中。

2)用于每个track的加密参数(包括KID、初始化向量、加密标志位),包含在TrackEncryptionBox('tenc')中。

3)用于samples groups的加密参数(包括KID、初始化向量、加密标志位)包含在SampleGroupDescriptionBox('sgpd')中。

4)单独sample的加密参数(包括初始化向量,sub sample加密数据)包含在样本附加信息中,由SampleAuxiliaryInfor⁃mationSizesBox ('saiz')和 SampleAuxiliaryInformationOffsets⁃Box('saio')引用。

3.3 加密方式

CENC定义了两种加密方式:全样本加密和子样本加密。全样本加密把整个sample作为一个完整的单元加密;子样本加密中的sample分为一个或多个subsample,每一个sub⁃sample都由不加密区域和加密区域交替组成,Sample中的所有加密区域被看作一个逻辑上连续的块,计数器值的增加与切换NAL单元无关。

3.4 box定义

1)Protection System Specific Header Box('pssh')

Protection System Specific Header Box('pssh')包含内容保护系统,回放内容必要的信息。封装在数据域中的信息可以提供解密密钥获取方式,对基于许可证授权的内容保护系统,信息头包括许可证服务器或授权中心的URL信息和嵌入的许可证等。通过为每个DRM系统分配一个“pssh”,CENC能够支持一份媒体文件被多个密钥和多个DRM系统播放。

ProtectionSystemSpecificHeaderBox('pssh')的语法如下:

aligned(8)class ProtectionSystemSpecificHeaderBox extends Full⁃Box('pssh',version=0,flags=0)

{

unsigned int(8)[16]SystemID;

unsigned int(32)DataSize;

unsigned int(8)[DataSize]Data;

}

SystemID:UUID,唯一标识对应的内容保护系统。GY/T 277—2014中规定,将16 byte长度的SystemID的前8 byte设置为“ChinaDRM”,后8 byte保留为0x00。

DataSize:数据域的长度,以字节为单位。

Data:存储内容保护系统的特定数据,例如许可证服务器的URL地址等。

2)Track Encryption Box('tenc')

Track Encryption Box包含整个track的IsEncrypted flag、IV_size以及KID,这3个参数作为track中的sample的加密参数。对于每个track只有一个密钥的文件,Track Encryption Box允许基础加密参数在每个track定义一次,而不需要在每个sample做重复定义。

Track Encryption Box('tenc')的语法如下:

aligned(8)class TrackEncryptionBox extends FullBox('tenc',ver⁃sion=0,flags=0)

{

unsigned int(24)default_IsEncrypted;

unsigned int(8)default_IV_size;

unsigned int(8)[16]default_KID;}

default_IsEncypted:加密标志位,标识track中samples的默认加密状态,可以包含如下取值,0x0表示没有加密,0x1表示采用AES_CTR 128加密。

GY/T 277—2014中将此项扩展为[5]:采用AES_CTR加密时,保护模式信息盒(sinf)中的模式类型盒(schm)中的模式类型scheme_type=‘cenc’;采用AES_CBC加密时,保护模式信息盒(sinf)中的模式类型盒(schm)中的模式类型scheme_type= 'cbc1';采用SM4_CTR加密时,保护模式信息盒(sinf)中的模式类型盒(schm)中的模式类型 scheme_type='sm41';采用SM4_CBC加密时,保护模式信息盒(sinf)中的模式类型盒(schm)中的模式类型 scheme_type='sm42';取 0x000002~0xFFFFFF表示保留。

default_IV_size:默认初始化向量的size,字节为单位,0表示IsEncrypted取值为0x0时,没有加密,8:64或16:128位初始化向量。

default_KID:track中所有sampls的默认加密密钥标识,允许每个文件或track有多个加密密钥。

加密track中的非加密sample将做如下取值:IsEncrypt⁃ed=0x0,IV_size=0x0,KID=0x0。

4 HLS中的内容加密

4.1 HLS概述

HLS是Apple公司推出的动态码率自适应技术,HLS内容格式在HTTP Live Streaming draft-pantos-http-live-stream⁃ing-10中描述[6]。

4.2 加密方式

HTTP Live Streaming中内容加密有两种,一种是对TS切片文件直接加密;另一种是对H.264编码文件中类型为1和5的NAL单元进行加密,其他类型的NAL单元不加密。

4.3 加密机制

HLS中媒体分块如果是加密的,其加密密钥通过M3U8文件中的#EXT-X-KEY来指定,密钥文件由客户端从服务器请求认证获得。一个播放列表可以有一个以上的#EXT-X-KEY,同一个媒体段也可以有多个不同KEYFOR⁃MAT属性值的#EXT-X-KEY。如果播放列表仅有一个#EXT-X-KEY,则密钥文件的生命期从当前#EXT-X-KEY开始到播放列表结束;如果播放列表有两个或以上的#EXT-X-KEY,则密钥文件的生命期从当前#EXT-X-KEY开始到下一个#EXT-X-KEY结束。客户端每次申请密钥文件都会发起一个新的HTTP请求,设置过多的#EXT-X-KEY会增加授权服务器的负担。

#EXT-X-KEY的格式如下:

#EXT-X-KEY:<attribute-list>

属性包括METHOD,URI,IV,KEYFORMAT和KEYFOR⁃MATVERSIONS,属性说明见表8。

表8 属性说明

METHOD属性为NONE时,表示媒体内容未加密,这种情况下不允许出现URI,IV,KEYFORMAT,KEYFORMAT⁃VERSIONS等属性。

METHOD属性为AES-128时,表示媒体内容采用AES-128方式对TS切片文件直接加密,这种情况下URI属性必须出现,IV属性可以出现也可以不出现。

METHOD属性为SAMPLE-AES时,表示对媒体段的部分或全部ES流加密,ES可以为音频、视频或其他样本,每一种ES的具体加密方式依赖于媒体编码,这种情况下IV属性可以出现也可以不出现。

IV为十六进制整数,代表加密初始向量。采用AES-128方式加密时,如果IV属性存在,则必须使用IV作为初始向量实现加密;如果IV属性不存在,使用媒体段的序列码作为初始向量实现加密。

KEYFORMAT标识密钥在密钥文件中的存储方式。默认是“identity”。GY/T 277—2014中增加扩展,如果KEY⁃FORMAT='chinadrm',表示URI中给出的ChinaDRM规定的获取许可证的相关信息,包括许可证服务器地址和内容标识。

1)TS层加密

如果属性METHOD的值为AES-128,并且播放列表中包含#EXT-X-I-FRAMES-ONLY标签(只包含I帧流),则整个媒体段使用AES-128 CBC加密。

如果属性METHOD的值为AES-128,并且播放列表中不包含#EXT-X-I-FRAMES-ONLY标签,则CBC不能跨越媒体段,每个媒体段单独使用AES-128 CBC加密,从而实现整个媒体段全部内容的加密。

上述的两种加密方式,对TS切片文件直接加密,这种加密方式在切片时实现,需要在网络电视台及CDN系统编码器中集成加密功能,实施复杂度大,成本高。

2)ES流加密

METHOD属性为SAMPLE-AES时,表示媒体在内容打包封装之前对ES流加密。ES层的加密对每个包含16 byte整数倍的数据块以AES-128 CBC方式加密。对于视频数据,媒体段从第一个16 byte数据块开始,每间隔10的整倍数的16 byte的数据块加密(即1,16,26,…),对于音频数据,所有的16 byte数据块都必须加密。

SAMPLE-AES加密方式加密后的ES流不受上层封装及切片的影响,因此可以在不影响网络电视台现有系统及CDN部署的情况下实现对视频内容的加密,满足网络电视台等对视频内容保护的要求。

(1)视频流的加密

ES类型为视频流时,H.264编码文件中类型为1和5的NAL单元必须加密,其他类型的NAL单元不加密,加密NAL单元的数据格式如下:

Encrypted_NAL-Unit(){

NAL_unit_type_byte //1 byte

unencrypted_leader //31 bytes

while(bytes_remaining()>16){

protected_block_one_in_ten //16 bytes

}

unencrypted_trailer //1-16 bytes

}

加密的NAL单元需要增加预防二义性的前缀,该前缀是未加密的。NAL单元中第1个字节的NAL_unit_type和随后的31个字节是不加密的,其后是加密的数据段,数据段的长度必须是16的整数倍(因此长度小于48 byte的NAL单元是不被加密的),被保护的数据段采用10%跳跃加密,即每16 byte的加密数据块,跟随9个16 byte不加密的数据块,以此类推。加密H.264流时,类型为1或5并且长度大于48 byte的NAL单元必须基于上述方式加密,加密完成后为这些加密单元加上前缀码;解密H.264流时,类型为1和5,且长度大于48 byte的NAL单元需要解密,首先移除前缀码,然后按上述方式定位加密数据并解密。

(2)音频流的加密

ES类型为AAC音频帧时,包含ADTS头的音频帧为加密帧。AAC的加密帧不需要增加预防二义性的前缀,AAC帧中7~9 byte的ADTS头,以及之后的首个16 byte不加密,其后是加密数据段,加密数据段的长度应该为16的整数倍,余下的0~15 byte不加密。AAC音频数据加密格式如下:

Encrypted_AAC_Frame(){

ADTS_Header //7 byte or 9 byte

unencrypted_leader //16 byte

while(bytes_remaining()>=16){

protected_block //16 byte

}

unencrypted_trailer //0~15 byte

}

ES类型为AC-3音频帧时,全部的音频帧都加密。AC-3的加密帧不需要增加预防二义性的前缀,AC-3帧中的首个16 byte不加密,其后是加密数据段,加密数据段的长度应该为16的整数倍,余下的0~15 byte不加密。AC-3数据加密格式如下:

Encrypted_AC3_Frame(){

unencrypted_leader //16 byte

while(bytes_remaining()>=16){

protected_block //16 byte

}

unencrypted_trailer //0~15 byte

}

5 视频加密方案

提出的视频内容加密方案是在NAL单元层对视频内容进行加密。H.264编码的视频流是由连续的NAL单元组成。每个NAL单元包含标志位表示该NAL单元数据类型,常见的NAL单元数据类型见表9。

表9 NAL单元类型

选择NAL类型为1和5的帧进行加密,加密后重新封装为新的NAL单元,其余NAL单元保持不变,如图3所示。

图3 基于NAL层的加密方案

加密后NAL单元描述为:

aligned(8)class CrypNAL{

bit(1)forbidden_zero_bit;

bit(2)NAL_ref_idc;bit(5)NAL_unit_type;

unsigned int(8*IV_length)IV;

unsigned int(8*key_indicator_length)key_indicator;

unsigned int(8)data[];

}

forbidden_zero_bit:长度为1 bit,定义为0;H.264规范声明为1时说明有比特流错误或为错误语法。

NAL_ref_idc:长度为2 bit;00表示该NALU不是用来构造I帧预测的参考帧,这种NALU可以丢弃而不影响参考帧的完整性;非00用来保持参考帧的完整性。

NAL_unit_type:长度为5 bit;加密后的NAL单元类型采用自定义的值,加密前 NAL_unit_type=1,则加密后NAL_unit_type=25;加密前 NAL_unit_type=5,则加密后NAL_unit_type=26。

IV:为初始向量,在AES-128 CTR模式[114-115]下,该值用来计算counter的值。

Key_indicator:内容加密密钥标示,用以标示该NAL单元由哪个内容加密密钥进行加密。

6 总结

互联网视频服务的开展,亟需有效的数字版权管理技术支撑,保护运营各方的合法权益,保障互联网视频服务运营的可管可控。内容加密封装是互联网视频内容版权保护的关键技术之一,本文研究了主流互联网视频格式的内容加密封装技术,并在此基础上提出适应多码率、多格式、多切片加密封装需求的内容加密方案,为开展多元化、灵活的互联网视频服务提供有效的技术支撑。

[1] Internet-draft,HTTP live streaming:draft-pantos-http-live-strea ming[S].2012.

[2]GY/T 277—2014,互联网电视数字版权管理技术规范[S].2014.

[3]ISO 14496-12,信息技术——音视频对象编码第12部分:ISO基础媒体文件格式[S].2005.

[5]ISO 23001-7,信息技术——MPEG系统技术第7部分:ISO基本媒体文件格式文件通用加密[S].2012.

[6]ISO 23009-1,信息技术——基于HTTP的动态自适应流媒体(DASH)第1部分:媒体展现描述与分段格式[S].2012.

[7]ISO 23009-4信息技术——基于HTTP的动态自适应流媒体(DASH)第4部分:分段加密与认证[S].2013.

责任编辑:许 盈

Research on Content Encryption

GUO Xiaoxia,WANG Lei,SHEN Yang
(Academy of Broadcasting Science,SARFT,Beijing 100866,China)

Content encryption package is one of the key technology of digital rights management for Internet TV The encryption method for mainstream internet video is studied,an encryption scheme is proposd based on NAL layer, technical support of video content protection for internet video provider is provided.

content encryption;DRM;Internet TV;HLS;MPEG-DASH;CENC

TP37

B

10.16280/j.videoe.2015.08.007

2014-09-23

【本文献信息】郭晓霞,王磊,沈阳.视频内容加密封装技术研究[J].电视技术,2015,39(8).

猜你喜欢

密钥加密编码
探索企业创新密钥
基于SAR-SIFT和快速稀疏编码的合成孔径雷达图像配准
密码系统中密钥的状态与保护*
《全元诗》未编码疑难字考辨十五则
子带编码在图像压缩编码中的应用
一种基于熵的混沌加密小波变换水印算法
Genome and healthcare
一种对称密钥的密钥管理方法及系统
基于ECC的智能家居密钥管理机制的实现
认证加密的研究进展