您的位置  > 互联网

HLS普通加密方案加密算法云点播视频加密系统

本文档介绍HLS普通加密。 由于无法防止部分浏览器插件和灰色工具的破解,因此不再推荐使用。 强烈建议您使用HLS私有加密。

针对视频行业对版权保护的需求,云点播提出了基础级的DRM(数字版权管理)解决方案,使用HLS的普通AES加密技术对视频内容进行加密,确保您的内容安全。

HLS普通加密方案

加密演算法

云点播系统目前支持HLS中指定的加密方案(HLS普通AES加密技术),使用AES-128对视频内容本身进行加密。

播放器兼容性

云点播视频加密解决方案可支持所有HLS播放器。

局限性

仅支持2017版本接口:用于发起加密任务并查询加密结果。

新版本接口不支持HLS普通加密。

术语介绍

密钥管理服务(Key,简称KMS)

安全管理服务,主要负责数据密钥的生产、加密和解密。 例如腾讯云的密钥管理服务。

数据密钥(简称DK)

由KMS系统生成的密钥,用于对称加解密。

加密数据密钥(简称EDK)

经过KMS系统加密的DK可以用于公开分发。 将EDK换成DK,需要调用KMS的解密接口。

整体结构

视频加密过程是通过转码操作实现的,不会产生新的。 与一般转码场景相比,视频加密转码的主要区别在于:

加密转码,传输的视频被加密。

加密转码完成后,如果通过点播播放器播放视频,将无法获取源文件播放地址。

准备

设置密钥管理服务 (KMS)

密钥管理服务主要用于管理视频密钥。 视频加密过程需要与KMS系统交互。 步骤包括:

1. 生成用于视频加密的数据密钥,这是架构图中的步骤II。 此步骤将返回 DK 和 EDK。 后续步骤中,可以访问DK的角色包括:云点播转码服务、App后台以及通过合法身份验证的终端用户。 EDK可以分发给任何用户,但通过EDK获取DK的步骤需要App后端进行身份验证。

2、根据EDK获取DK进行数据播放,即架构图中的第4步。 App后端通过用户身份认证后,需要调用KMS相关接口,使用EDK获取DK,即架构图中的第5步。

为了最大限度降低开发者的接入成本,Cloud On 集成了KMS服务,并提供最简单的调用接口。 整个视频加密方案中,App后端与KMS服务之间唯一的交互就是获取解密密钥(架构图中的步骤5)。

构建身份验证和密钥分发服务

对于加密视频,只有经过App后端认证的客户端才能获取DK。 因此,最终客户获取密钥的行为必须涉及App后端进行认证。 服务的主要业务逻辑是:

1. 针对客户端请求携带EDK换取DK的情况(即架构图中的步骤4),验证请求者的身份。

2、如果身份认证通过,则去KMS系统获取对应的DK(即架构图中的步骤5)并返回给客户端。

建议

由于EDK对应的DK始终是固定的,因此App后端可以缓存(甚至永久保存)EDK与DK的对应关系,以减少对KMS系统的调用次数(即减少中步骤5的调用次数)架构图)。

App后端响应客户端,通过添加HTTP缓存控制参数(如Cache-)来减少客户端去App后端获取DK的次数(即减少架构中第4步的调用次数)图表)。

如果您需要支持浏览器播放,为了避免跨域问题,请确保“认证与密钥分发服务”和“视频播放页面”使用的域名相同(例如域名视频播放页面的名称是,那么密钥分发服务的域名也需要是)。

配置视频加密模板

为了保证云点播后端能够正确进行加密操作,您需要配置视频加密模板。 详细信息请参见HLS通用加密模板。

业务流程

视频上传

现有视频文件可以通过服务器上传、客户端上传、控制台上传、录音上传、URL拉取上传等方式上传到云点播平台。

视频加密

视频加密的主要步骤如下:

1、App后台发起视频加密

目前您可以通过界面发起视频加密。 目前仅支持 HLS 文件加密。

下面这个例子的意思是:

对视频文件进行转码,转码目标输出模板为210、220、230、240。禁止从低码率转换到高码率。

转码过程使用加密模板10进行加密。

事件通知方式为:整个事件完成后发起事件通知。

https://vod.api.qcloud.com/v2/index.php?Action=ProcessFile
&transcode.definition.0=210
&transcode.definition.1=220
&transcode.definition.3=230
&transcode.definition.4=240
&transcode.drm.definition=10
&notifyMode=Finish
&COMMON_PARAMS

2、从点播平台获取加密密钥

云点播平台根据调用方指定的加密参数模板,读取密钥获取方式以及最终用户获取解密密钥的URL(如),然后从指定的KMS系统。

3、点播平台发起视频加密转码

云点播转码平台在对视频进行加密时,不仅会根据指定的加密算法和密钥对目标输出文件进行加密,还会将获取解密密钥的URL写入到视频文件中。 例如,对于HLS,URL会被写入M3U8文件的EXT-X-KEY标签中,但在写入之前,转码平台会在URL中添加三个参数:

:加密文件的ID。

:固定为,表示腾讯云点播内置KMS。

edk:DK对应的EDK。

添加上述参数后,转码目标视频文件写入的URL可以为

https://getkey.example.com?fileId=123456&keySource=VodBuildInKMS&edk=abcdef

该URL也是客户端在视频播放过程中获取解密密钥时最终访问的URL。

4、点播平台发起加密完成回调

当包含加密操作的任务流状态发生变化(或完成)后,点播平台将发起任务流状态变化通知。

媒体资产管理

视频加密操作完成后,可以通过该接口获取视频的加密信息。

该接口将返回视频ID所有转码规范的视频播放地址,包括源文件的播放地址。 由于源文件没有加密,因此App服务器可以过滤掉源文件的播放地址,只提供加密视频的播放地址。 给客户。

获取到的源文件参数为0,可以根据该值过滤源文件的视频播放地址。

视频播放概述

只有具有合法身份认证的客户才会收到视频解密密钥。 因此,如何在播放过程中验证用户的身份信息就成为了关键因素。

播放过程中,播放器会访问M3U8文件中EXT-X-KEY标签标识的URL来获取密钥。 本步骤中,播放器需要携带观看者的身份认证信息。 此时,有两种方式可以将这些信息传递给App认证服务:

1、通过参数将用户身份信息附加到URL中,提供App的认证服务。 该解决方案适用于所有 HLS 播放器。 具体解决方案请参见:传递身份认证信息。

2. 将用户身份信息传递给App的认证服务。 该方案安全性较高,但仅适用于访问EXT-X-KEY标签标识的URL时携带的播放器。 具体解决方案请参见:传递身份认证信息。

视频播放解决方案1

视频播放方案一:通过身份认证信息传递,该方案适用于任何支持HLS的播放器。

1.登录并分发Token进行身份验证

只有具有合法身份认证的客户才会收到视频解密密钥。 因此,在播放视频之前,客户端必须登录,App服务器会向客户端发送一个包含身份认证信息的签名,我们称之为Token。

2、获取包含Key防盗签名的多码率播放地址

加密转码API的回调通知或者API可以获取加密视频的多码率播放地址。 客户端获得多码率播放地址后,需要在播放地址中添加用户身份信息。 对于任何播放URL,添加用户身份信息的方法都是添加.token。 URL 中文件名之前。

例如,用户身份信息标识为; 某码率的播放地址为:

http://example.vod2.myqcloud.com/path/to/a/video.m3u8

那么最终的URL就是:

http://example.vod2.myqcloud.com/path/to/a/voddrm.token.ABC123.video.m3u8

3.获取视频内容(加密)

当播放器按照上一步描述的流程访问带有用户身份信息的URL时,云点播后端会自动将Token信息附加到原始M3U8文件的EXT-X-KEY标签标识的URL中。

例如某码率的加密视频URL为:

http://example.vod2.myqcloud.com/path/to/a/video.m3u8

在该文件中,EXT-X-KEY标签标识的获取视频解密密钥的URL为:

https://getkey.example.com?fileId=123456&keySource=VodBuildInKMS&edk=abcdef

那么当播放器访问携带Token信息的播放地址时,即:

http://example.vod2.myqcloud.com/path/to/a/voddrm.token.ABC123.video.m3u8

用于获取由 EXT-X-KEY 标签标识的视频解密密钥的 URL 将替换为:

https://getkey.example.com?fileId=123456&keySource=VodBuildInKMS&edk=abcdef&token=ABC123

此时,当玩家获得解密密钥DK时,就会带上步骤1中分配的Token。

4.获取视频解密密钥(带身份验证)

当播放器获取视频索引文件(M3U8文件)时,在播放视频文件之前会自动启动步骤4。 App后端收到客户端的请求后,首先验证Token。 如果用户身份不合法,请求将被直接拒绝。 如果用户身份合法,则根据URL中携带的、、edk等参数从KMS系统获取DK并返回给客户端。 完成上述步骤后,客户端将获得视频解密密钥,可以进行正常的视频解密和播放。

视频播放解决方案2

视频播放方案二:通过传递身份认证信息。 该方案仅适用于iOS/PC平台的H5/Flash播放器。 在这个平台下,玩家访问EXT-X-KEY标签标识的URL时会带上它。

注意:

实际测试发现,平台的H5播放器在访问时不会携带EXT-X-KEY标签识别的URL,因此平台目前只能使用选项1。

1. 登录并分发密码进行身份验证

只有具有合法身份认证的客户才会收到视频解密密钥。 因此,在播放视频之前,客户端必须登录,App服务器向客户端发送签名。 例如,客户端使用账号和密码登录,通过身份认证后,App后端向客户端下发一个域名来识别用户。

2.获取指定视频的多码率播放地址

云点播网页视频播放器提供多码率播放能力,您可以获取视频对应的多码率播放地址。 如果您使用其他播放器,则需要自行获取多码率播放地址。

3.获取视频内容(加密)

当视频开始播放时,视频播放器会自动启动此步骤。 当视频播放器开始播放视频时,它会向点播CDN边缘节点请求视频数据文件。 对于HLS格式的视频,播放器将根据M3U8文件中的EXT-X-KEY标签获取视频解密密钥。 例如EXT-X-KEY标签中获取视频解密密钥的URL为:

https://getkey.example.com?fileId=123456&keySource=VodBuildInKMS&edk=abcdef

当玩家获得解密密钥DK时,会带上步骤1中App后台分配的域名。

4.获取视频解密密钥(带身份验证)

当播放器获取视频索引文件(M3U8文件)时,在播放视频文件之前会自动启动步骤4。

App后端收到客户端请求后,首先验证身份认证标识。 如果用户身份不合法,请求将被直接拒绝。 如果用户身份合法,则根据URL中携带的、、edk等参数从KMS系统获取DK并返回给客户端。 完成上述步骤后,客户端将获得视频解密密钥,可以进行正常的视频解密和播放。

常见问题

1. 加密HLS和普通HLS有什么区别?

根据HLS文档规范,HLS加密是对媒体文件(TS文件)进行加密,M3U8文件描述了播放器如何解密TS文件。 加密的 HLS M3U8 文件包含 EXT-X-KEY 标签,该标签参数包含 URI 属性。 该属性描述了加密算法,例如AES-128,URI属性描述了获取解密密钥的地址。 播放器可以通过访问该URI来获取解密后的密钥数据。 例如,URI 是:

http://www.test.com/getdk?fileId=123&edk=14cf

播放器解析M3U8文件时,会向该URI发起HTTP请求,并从返回包中获取关键数据。

2. 开通点播加密功能需要哪些信息?

要激活云点播加密功能,您需要在EXT-X-KEY标签中提供URI属性。 App服务器需要部署一个HTTP服务,用于获取客户端播放加密视频时的关键数据。 云点播服务对视频进行加密时,会将加密视频的M3U8文件的EXT-X-KEY标签的URI属性设置为。 为了获取密钥并方便管理,我们会附加三个参数,edk和.

阐明:

也就是视频ID,edk是加密密钥,是密钥来源,使用点播内置KMS系统的加密文件,是。 当玩家发起获取解密密钥的请求时,App服务器收到的HTTP请求中会包含和edk等参数。 App服务器可以根据和edk等参数,向玩家返回对应的DK。

3、播放器在播放加密视频时从哪里获取解密密钥?

播放器播放加密视频时,根据M3U8文件中EXT-X-KEY的URI发起获取密钥的请求,该URI是App向云端点播视频提供的地址。

注意:

播放器不向点播服务器发起获取密钥的请求。 App服务器调用点播接口进行加密时,加密完成后会调用获取视频解密密钥接口。 获得密钥后,需要保存密钥。 当玩家请求密钥时,会根据玩家的请求参数返回密钥。 对应的键。

4、App服务器如何处理从云端点播获取的关键数据?

当玩家向App服务器发起密钥获取请求时,App服务器需要向玩家返回相应的密钥数据。 返回的密钥数据是16字节的二进制数据。 密钥是通过获取视频解密密钥API得到的编码字符串。 该字符串返回给播放器时需要转换为二进制数据。 例如,对于编码的关键数据:

爪哇

import java.util.Base64;
byte[] dkBin = Base64.getDecoder().decode(dkData);

PHP

$dkBin = base64_decode($dkData);