媒体转码HLS标准加密详解

作者:何昔

  1. 基本概念

秘钥管理服务(Key Management Service,简称KMS)
一项安全管理服务,主要负责数据秘钥的生产、加密、解密等工作。开通请点击这里

数据秘钥(Data Key,简称DK)也称明文密钥
DK为加密数据使用的明文数据密钥

信封数据密钥(Enveloped Data Key,简称EDK)也称密文密钥
EDK为通过信封加密技术保密后的密文数据密钥

  1. 原理

HLS标准加密是通过MTS调用KMS服务生成明文秘钥DK进行加密,将对应的密文秘钥EDK 通过keyuri发送给客户,keyuri 是客户创建HLS标准加密工作流的时候需要传入的一个参数,是用户业务服务器的URL地址;用户业务服务器keyuri可以通过 KMS的API接口解密接收到的密文秘钥EDK得到明文秘钥DK,再进行base64decode返回给客户端,客户端通过该值解密播放视频;

  1. 操作

1)开通KMS

2)调用sdk 创建工作流,传入对应的参数(点击查看demo

工作流中关键配置

开始活动结点:InputFile:{"Bucket":"bucketdemo", "Location ":"oss-cn-hangzhou", "ObjectPrefix":"HLS-Encryption"};
此配置表示:内容创作者上传视频到杭州 oss://bucketdemo/HLS-Encryption 这个路径下会自动触发加密转码;

转码活动结点:Encryption:{"Type":"hls-aes-128", "KeyUri":"https://decrypt.demo.com"};
转码完成后,KeyUri的配置会出现在m3u8文件中,供播放器使用,内容类似:URI="https://decrypt.demo.com?Ciphertext=aabbccddeeff&MediaId=fbbf98691ea44b7c82dd75c5bc8b9271"
其中Ciphertext参数的内容就是密文秘钥EDK,MediaID就是该媒体资源的媒体ID;其中用户业务服务器KeyUri可以通过 KMS的API接口解密接收到的密文秘钥EDK,得到明文秘钥DK,再进行base64decode返回给客户端,客户端通过该值解密播放视频;

3)上传视频

两种方法上传视频,都会自动触发加密转码
I 通过MTS控制台上传视频至刚刚创建的工作流
II 通过OSS上传工具上传视频至oss://bucketdemo/HLS-Encryption路径
III 转码完成后,m3u8文件内容示例

#EXTM3U
 #EXT-X-VERSION:3
 #EXT-X-TARGETDURATION:5
 #EXT-X-MEDIA-SEQUENCE:0
 #EXT-X-KEY:METHOD=AES-128,URI="https://decrypt.demo.com?Ciphertext=aabbccddeeff&MediaId=fbbf98691ea44b7c82dd75c5bc8b9271"
 #EXTINF:4.127544,
 15029611683170-00001.ts
 #EXT-X-ENDLIST

4) 播放

播放器播放加密转码后的m3u8资源:https://vod.demo.com/test.m3u8
播放器解析得到EXT-X-KEY:METHOD=AES-128,URI=https://decrypt.demo.com?Ciphertext=aabbccddeeff&MediaId=fbbf98691ea44b7c82dd75c5bc8b9271 的URI部分内容,向URI请求获取明文秘钥DK 的base64decode数据;业务端接收到请求,根据Ciphertext=aabbccddeeff解析得到密文秘钥EDK: aabbccddeeff,业务端调用KMS API接口解析密文秘钥EDK,得到明文秘钥DK,进行base64decode返回给播放器端;播放器端根据得到的明文秘钥DK 的base64decode数据解密播放m3u8视频;

播放器支持:safari浏览器,苹果系的 H5播放都支持,VLC支持,MTS WEB播放器不支持

  1. 业务安全

如果用户想要业务安全,那么可以考虑客户端访问加密视频m3u8的时候加参数MtsHlsUriToken;
比如正常的播放地址为https://vod.demo.com/test.m3u8, 当拼接携带MtsHlsUriToken参数后为https://vod.demo.com/test.m3u8?MtsHlsUriToken=业务方颁发的令牌

播放时,播放器向阿里CDN请求https://vod.demo.com/test.m3u8?MtsHlsUriToken=业务方颁发的令牌 ,阿里CDN会动态修改m3u8文件中的解密URI(EXT-X-KEY:METHOD=AES-128,URI="https://decrypt.demo.com?Ciphertext=aabbccddeeff&MediaId=fbbf98691ea44b7c82dd75c5bc8b9271"),如原为https://decrypt.demo.com?Ciphertext=aabbccddeeff&MediaId=fbbf98691ea44b7c82dd75c5bc8b9271 , 修改后为 https://decrypt.demo.com?Ciphertext=aabbccddeeff&MediaId=fbbf98691ea44b7c82dd75c5bc8b9271&MtsHlsUriToken=业务方颁发的令牌

所以,播放器最终请求解密URI为:https://decrypt.demo.com?Ciphertext=aabbccddeeff&MediaId=fbbf98691ea44b7c82dd75c5bc8b9271&MtsHlsUriToken=业务方颁发的令牌 ,此地址中,携带了业务方搬发的令牌,业务方进行验证即可

  1. 业务方需要做的事情

1】搭建颁发及验证MtsHlsUriToken令牌服务
2】校验解密令牌,推荐一个令牌只允许使用一次
3】解密密钥:EDK即Ciphertext, 此时,要调用KMS服务的解密接口进行解密 接口说明, 解密后,可缓存,以减少不必要的网络IO
4】解密拿到DK即明文密钥,需要base64decode, 然后返回给播放器

上一篇:程序员如何选择第一家公司


下一篇:大公司和小公司的程序员有什么差别?如何进大公司?