天天看點

媒體轉碼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請求

業務方頒發的令牌 ,阿裡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&MtsHlsUriToken=

是以,播放器最終請求解密URI為:

業務方頒發的令牌 ,此位址中,攜帶了業務方搬發的令牌,業務方進行驗證即可

  1. 業務方需要做的事情

1】搭建頒發及驗證MtsHlsUriToken令牌服務

2】校驗解密令牌,推薦一個令牌隻允許使用一次

3】解密密鑰:EDK即Ciphertext, 此時,要調用KMS服務的解密接口進行解密 接口說明, 解密後,可緩存,以減少不必要的網絡IO

4】解密拿到DK即明文密鑰,需要base64decode, 然後傳回給播放器