HLS SAMPLE-AES加密方法

devtools/2024/11/7 16:41:19/

以下为HLS标准中的描述:

An encryption method of SAMPLE-AES means that the Media Segments are Sample Encrypted using the Advanced Encryption Standard[AES_128]. How these media streams are encrypted and encapsulated in a segment depends on the media encoding and the media format of the segment. fMP4 Media Segments are encrypted using the ‘cbcs’ scheme of Common Encryption [COMMON_ENC]. Encryption of other Media Segment formats containing H.264, AAC, AC-3 , and Enhanced AC-3 media streams is described in the HTTP Live Streaming (HLS) Sample Encryption specification [SampleEnc].

以下为结合相关文档整理出的分别对TS和fMp4的加密方法说明

TS

对于TS: 遵循HTTP Live Streaming (HLS) Sample Encryption specification 标准。

  • 对于不同的codec 类型的stream,加密块protected block有不同的定义。audio的一个protected block是一个audio 帧, H.264 类型video的一个protected block是一个NAL单元(network adaptation layer)
  • 每个protected block中包含多个16-byte大小的子block,每个子block都是用AES-128 CBC mode(no padding)加密, 每个新的protected block都需要重置IV到初始值。(注意stream 为multi-slice的情况)
(1) H.264 Video Streams

只对NAL type 为1或5类型的NAL加密,其它类型的NAL不加密,以下为1个加密的NAL数据单元:

//Encryption of NAL units
Encrypted_nal_unit () {nal_unit_type_byte                // 1 byteunencrypted_leader                // 31 byteswhile (bytes_remaining() > 0) {if (bytes_remaining() > 16) {encrypted_block           // 16 bytes}unencrypted_block           // MIN(144, bytes_remaining()) bytes}
}

前32个bytes不加密,之后为protected block, protected block的size小于16 bytes时, 不加密;因此,如果一个NAL的size小于48 bytes(32+16), 则整个NAL都不加密。

protected block使用10%的加密比例,每一个16-byte block的加密数据后跟着9个16-byte block的非加密数据。

为了防止对加密后的NAL中出现start code,需要对加密后的数据再处理一下,在0x0000 和 0x00/0x01/0x02/0x03之间添加0x03作为start code emulation prevention byte。

(2) AAC Audio Streams

一个AAC的protected block是一帧audio frame,包含audio data transport stream (ADTS)header

//Encryption of AAC Audio Frames
Encrypted_AAC_Frame () {ADTS_Header                        // 7 or 9 bytesunencrypted_leader                 // 16 byteswhile (bytes_remaining() >= 16) {encrypted_block                // 16 bytes}unencrypted_trailer                // 0-15 bytes
}

ADTS header不加密,剩余的数据以16-byte作为一个block进行加密,最后不足16-byte的数据不加密

fMP4

对于fMP4: 遵循Common Encryption中定义的cbcs加密方法;

ModeFull Sample EncryptionPattern Encryption
AES CTR‘cenc’‘cens’
AES CBC‘cbc1’‘cbcs’

cbcs 属于 AES CBC模式中的 subSample Pattern Encryption
对于AES-CBC模式,需要对每个subSample的第一个加密块(block)设置IV
对于AES-CTR模式,需要对每个Sample的第一个加密块(block)设置IV

(1) audio

audio 使用 whole-block full-sample encryption.
整个sample都是protect部分,每个sample从第0个字节开始加密直到最后16-byte的边界,末尾最后0~15-byte不加密。每个sample都要重置IV

(2) video

video 使用 Pattern Encryption.
Pattern Encryption 是对SubSample中的protect 部分按照16 byte进行分块加密。
Subsample 的protect部分只包含video slice data, 不包含NAL size, NAL type, video slice header 或者其他 NAL type, 非protect的部分都作为clear数据。

推荐加密比例为 encrypt:skip = 1:9, 每160-byte为一重复单元。最后剩余不足160-byte的, 如果>16-byte, 则16-byte加密,剩余的skip;如果<16-byte, 则都skip.

加密序列举例:16-byte enc, 144-byte skip, 16-byte enc, 144-byte skip,…,16-byte enc, 121-byte skip.

Reference
  • MPEG-2 Stream Encryption Format for HTTP Live Streaming
  • Emulation Prevention
  • Common Encryption (CENC)
  • HTTP Live Streaming 2nd Edition draft-pantos-hls-rfc8216bis-13
  • International Organization for Standardization,
    “Information technology – MPEG systems technologies –
    Part 7: Common encryption in ISO base media file format
    files”, ISO/IEC International Standard 23001-7:2016,
    February 2016

http://www.ppmy.cn/devtools/132057.html

相关文章

深入理解网络协议:OSPF、VLAN、NAT与ACL详解

OSPF工作过程与基础配置 一、OSPF的工作过程 OSPF&#xff08;开放最短路径优先&#xff09;是一个广泛使用的路由协议&#xff0c;它的工作过程可以总结为以下几个步骤&#xff1a; 启动与邻居发现 OSPF在配置完成后&#xff0c;会通过本地组播地址224.0.0.5发送HELLO包。HE…

微信小程序 uniapp+vue老年人身体监测系统 acyux

文章目录 项目介绍具体实现截图技术介绍mvc设计模式小程序框架以及目录结构介绍错误处理和异常处理java类核心代码部分展示详细视频演示源码获取 项目介绍 过此方式促进老年人辅助程序信息流动和数据传输效率&#xff0c;提供一个内容丰富、功能多样、易于操作的老年人辅助程序…

前端学习Day12 CSS盒子的定位(相对定位篇“附练习”)

一、相对定位 使用相对定位的盒子会相对于自身原本的位置&#xff0c;通过偏移指定的距离&#xff0c;到达新的位置。盒子的本体仍处于文档流中。使用相对定位&#xff0c;除了要将 position 属性值设置为 relative 外&#xff0c;还需要指定一定的偏移量。其中&#xff0c;水…

深入解析:Python中的特征工程——从入门到精通

目录 一、特征工程概述 1.1 特征工程的定义 1.2 特征工程的重要性 1.3 特征工程的核心步骤 二、数据预处理 2.1 处理缺失值 2.2 异常值处理 2.3 标准化和归一化 三、特征选择与特征提取 3.1 特征选择 3.2 特征提取 四、特征编码与转换 4.1 独热编码&#xff08;On…

[SWPUCTF 2021 新生赛]fakebase

python逆向 先看源代码 这段代码是一个简单的加密算法&#xff0c;通过将给定的字符串转换为二进制形式&#xff0c;然后将二进制数转换为一个整数&#xff0c;再将这个整数不断地除以31取余数&#xff0c;并根据余数映射到s_box中的字符来实现加密。最后&#xff0c;输出加密…

从底层技术到实际应用:Claude与ChatGPT谁更适合学术写作?

学境思源&#xff0c;一键生成论文初稿&#xff1a; AcademicIdeas - 学境思源AI论文写作 使用大模型智能AI进行学术写作和科研已经成为学者、研究人员和高校学生的强大助手。Anthropic的Claude和OpenAI的ChatGPT作为该领域的两个主要参与者&#xff0c;正在不断发展和完善。随…

C++ 文件操作详解

C 文件操作详解 在C中&#xff0c;文件操作分为文本文件和二进制文件的操作&#xff0c;通过文件流类&#xff08;ifstream、ofstream、fstream&#xff09;进行文件的读写。这些类封装了文件的输入和输出操作&#xff0c;并继承了istream和ostream的功能&#xff0c;使得流对…

ubuntu 22.04 server 安装 anaconda3

ubuntu 22.04 server 安装 anaconda3 https://www.anaconda.com/download/success Anaconda Installers wget https://repo.anaconda.com/archive/Anaconda3-2024.10-1-Linux-x86_64.sh 其他的是 默认 Executing transaction: done installation finished. Do you wish to…