H.264/AVC加密----选择加密

文献学习:

《Data Hiding in Encrypted H.264/AVC Video Streams by Codeword Substitution》
期刊:IEEE TRANSACTIONS ON INFORMATION FORENSICS AND SECURITY

简介
通过分析H.264/AVC编解码器的特性,提出了三个敏感部分(IPM、MVD和残差系数)用流密码加密。与[13]相比,该算法不是在H.264/AVC编码时进行加密,而是在H.264/AVC压缩域中进行加密。在H.264压缩域进行选择加密已经在上下文自适应变长编码(CAVLC)和上下文自适应算术编码(CABAC)中被实现,在本文中,我们对之前提出的方法进行了改进和增强,对更多的语法元素进行加密。我们对ipm的码字、mvd的码字和残差系数的码字进行了加密。加密的比特流仍然是符合H.264/AVC的,可以用任何符合标准的H.264/AVC解码器解码,但加密的视频数据与明文视频数据完全不同。实际上,直接在压缩的比特流上执行格式兼容加密是极其复杂的,因为编码器内部的状态必须被保留,否则,其余的数据会被错误地解释,这很容易导致格式违规。

1)帧内预测模式加密

根据H.264/AVC标准,支持以下四种类型的帧内编码,分别表示为Intra_4 × 4, Intra_16×16,I_PCM[12]。这里选择Intra_4×4和Intra_16 × 16块中的IPM进行加密。Intra_16×16中四种IPMs (intra prediction mode)模式都是可行的。Intra_16 × 16块的IPM在mb_type (macroblock type)字段中指定,该字段还指定了关于该块的其他参数,如编码块模式(CBP)。表1是mb_type值及其含义的列表,取自标准[17]。在H.264/AVC基线配置文件中,mb_type是用Exp-Golomb代码编码的。为了使加密的比特流符合标准,我们可以在不修改CBP的情况下对IPM的码字进行加密。另外,为了保持码字的长度不变,加密后的码字应该与原始码字的大小相同。可以看到,CBP组合每四行相同,每连续两行码字长度相同,如表所示。因此,对于Intra_16 × 16块,IPM加密是通过在码字的最后一位和伪随机序列的一位之间应用逐位异或操作来实现的,以保持CBP的值和码字的长度不变。
在这里插入图片描述
**在H.264/AVC中,每个Intra_4 × 4亮度块都是根据其空间相邻样本进行预测的。**具体地说, H.264/AVC为Intra_4×4亮度块提供了9种预测模式(0-8)。对于4×4亮度块的每种预测模式的选择必须向解码器发送信号,这可能需要大量的比特。为了有效地压缩预测模式数据,将预测编码技术应用于信号预测模式。
对于当前考虑的每个块E,最可能的模式(MPME)被定义为空间相邻的上块A和左块B的预测模式中较小的那个。如果相邻区块中有一个不可用,则对应的值设为2,表示“DC”预测模式。当前考虑的块E的预测模式记为ModeE。如果ModeE= MPME,码字保持不变。否则,每个码字中的三位固定长度代码(表示为X)用伪随机序列加密(按位异或加密),伪随机序列是由加密密钥E_Key2确定的标准安全密码(例如RC4)生成的。
从上面的描述可以看出,加密码字的长度与原始码字的长度是相同的。对于在解码过程中的格式兼容性,加密后的第一行和/或第一列的块的ipms应该有可解码的值,因为没有相邻块,所以不是所有的模式都可以在每一帧的顶部和左侧边界上使用。在我们的方案中,**如果加密后的IPM对边界块不可用,则此块的IPM加密将被跳过。这也进一步说明IPM加密在某些特定位置不够安全,应与其他加密方法结合使用。**总之,IPM加密意味着在不违反语义和比特流兼容性的情况下将实际模式更改为另一种模式。

运动矢量差(MVD)加密:

为了同时保护纹理信息和运动信息,不仅要对ipm进行加密,还要对运动矢量进行加密。在H.264/AVC中,进一步对运动矢量进行运动矢量预测,得到MVD。在H.264/AVC标准中,采用Exp-Golomb熵编码对MVD进行编码。Exp-Golomb的码字构造为[M Zeros][1][INFO],其中INFO是一个携带信息的M位字段。**表II显示了mvd的值及其对应的Exp-Golomb码字。码字的最后一位通过使用标准流密码应用逐位异或操作进行加密,标准流密码由加密密钥E_Key3确定。**由表二可知,最后一位加密可能会改变MVD的符号,但不影响码字的长度,满足格式遵从性。也就是说,生成的密文仍然是有效的Exp-Golomb代码。例如,“2”对应的码字为“00100”,“−2”对应的码字为“00101”,两者长度相同。需要注意的是,当MVD的值为0时,其对应的码字“1”在加密过程中保持不变。
在这里插入图片描述

残差数据加密:

为了保持高安全性,另一类敏感数据,即i帧和p帧两者中的残差数据应该加密。本节详细介绍了一种基于码字特性的残差数据加密方法。H.264编码标准中,采用CAVLC熵编码对残差块[19]的量化系数进行编码。每个CAVLC码字可以表示为以下格式:
在这里插入图片描述
为了保持比特流的一致性,在加密过程中不能修改所有的语法元素。例如,Coef f_token、Total_zeros和Run_before 应该保持不变。因此,残余数据加密可以通过修改Sign_of_TrailingOnes和Level的码字来实现。
Sign_of_TrailingOnes是用单比特编码的。比特0被分配给+1,比特1分配给-1 。Sign_of_TrailingOnes的码字通过使用标准流密码应用按位异或操作进行加密(秘钥E_Key4)。每个Level的码字由前缀组成(level_prefix)和后缀(level_suffix)组成:
在这里插入图片描述
表三显示了不同suffixLength的Level和相应的码字。码字的最后一位通过使用标准流密码应用逐位异或操作进行加密,标准流密码由加密密钥E_Key5确定。由表三可知,最后一位加密可能会改变level的符号,但不影响码字的长度,满足格式兼容性。例如:当suffixLength = 1时,“2”对应的码字为“010”,“-2”对应的码字为“011”,长度相同。需要注意的是,当suffixLength等于0时,码字在加密过程中应该保持不变。
在这里插入图片描述

实验结果:

在这里插入图片描述

ESEYE播放效果:

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/15186.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

深度学习-第R2周——LSTM火灾温度预测

深度学习-第R2周——LSTM火灾温度预测 深度学习-第R2周——LSTM火灾温度预测一、前言二、我的环境三、前期工作1、导入数据集2、数据可视化 四、构建数据集1、设置x,y2、归一化3、划分数据集 五、构建模型六、模型训练1、编译2、训练 七、评估1、loss图2、预测 深度学习-第R2周…

区间DP (Java) 解析/模板/案例

一. 区间DP简单介绍 区间DP,是经常会用到的、解决区间问题的一种方法,经常以动态规划(dfs/记忆化搜索)的形式展现,最核心的思想就是枚举区间(枚举端点),寻找切割点,处理因…

并发编程基石:管程

大家好,我是易安! 如果有人问我学习并发并发编程,最核心的技术点是什么,我一定会告诉他,管程技术。Java语言在1.5之前,提供的唯一的并发原语就是管程,而且1.5之后提供的SDK并发包,也…

手写Spring框架---IOC容器实现

目录 框架具备的最基本功能 实现容器前奏 创建注解 提取标记对象 extractPacakgeClass里面需要完成的事情 获取项目类加载器的目的 为什么不让用户传入绝对路径 类加载器ClassLoader 统一资源定位符URL ClassUtil提取标记类 获取包下类集合 装载目标类的集合 获取…

【Unity入门】21.预制体

【Unity入门】预制体 大家好,我是Lampard~~ 欢迎来到Unity入门系列博客,所学知识来自B站阿发老师~感谢 (一)预制体制作 (1)什么是预制体 这一章节的博客,我们将会学习一个预制体的概念。什么是…

【C语言】struct结构体

文章目录 一. 结构体简述二. 结构体的声明和定义1、简单地声明一个结构体和定义结构体变量2、声明结构体的同时也定义结构体变量3、匿名结构体4、配合typedef,声明结构体的同时为结构体取别名5、在声明匿名结构体时,使用typedef给这个匿名结构体取别名 三…

中国的chatGpt-中国chatGPT软件

chatGPT中文免费版 您是否在寻找一款免费且实用的聊天软件来更好地与别人交流?那么,“chatGPT中文免费版”将是您的不二选择! 作为一款由 OpenAI 训练的大型语言模型,chatGPT 中文免费版可以让您轻松地与其他人进行交流&#xf…

( 栈和队列) 155. 最小栈 ——【Leetcode每日一题】

❓155. 最小栈 难度:中等 设计一个支持 push ,pop ,top 操作,并能在常数时间内检索到最小元素的栈。 实现 MinStack 类: MinStack() 初始化堆栈对象。void push(int val) 将元素val推入堆栈。void pop() 删除堆栈顶部的元素。…

计算机网络【2】 子网掩码

学习大佬记下的笔记 https://zhuanlan.zhihu.com/p/163119376 "子网"掩码,顾名思义,它就是拿来划分子网的,更准确的说,划分子网的同时,还能通过它知道主机在子网里面的具体ip的具体地址。 子网掩码只有一个…

Pytest接口自动化测试实战演练

结合单元测试框架pytest数据驱动模型allure 目录 api: 存储测试接口conftest.py :设置前置操作目前前置操作:1、获取token并传入headers,2、获取命令行参数给到环境变量,指定运行环境commmon:存储封装的公共方法connect_mysql.p…

【计算机是怎么跑起来的】基础:计算机三大原则

【计算机是怎么跑起来的】基础:计算机三大原则 计算机的三个根本性基础1.计算机是执行输入,运算,输出的机器输入,运算,输出 2. 软件是指令和数据的集合指令数据 3. 计算机的处理方式有时与人们的思维习惯不同对计算机来…

如何做好采购计划和库存管理?

“销售计划不专业且不稳定”“准确性低” “目前只按照过往销量和采购周期做安全库存,但欠货和滞销依然严重” 题主的问题其实蛮有代表性的, 也是传统采购和库存管理常常面临的问题: ① 前后方协作困难 采购/销售/财务工作相互独立&#x…

NetXpert XG2帮您解决“布线安装与维护”难题

在传输大量数据时,光纤变得越来越重要,而铜缆在未来也将继续发挥重要作用,因此我们不仅要比较两种类型布线的优缺点,还要探究光纤传输中的错误来源。 测试光缆传输损耗的准确性对于故障排除至关重要,特别是在光纤情况下…

2023五一数学建模竞赛(五一赛)选题建议

提示&#xff1a;DS C君认为的难度&#xff1a;C<A<B&#xff0c;开放度&#xff1a;B<A<C 。 A题&#xff1a;无人机定点投放问题 这道题是传统的物理类题目&#xff0c;基本每次建模竞赛都会有。由于这道题目并未给明数据&#xff0c;所以数据获取和搜集资料是…

来了来了,我使用 ChatGPT 开发了一个 AI 应用

ChatGpt 实在太火爆了&#xff0c;很多人在问我怎么使用 chatgpt 开发一个 AI 应用程序。这不就来了吗~ 开始 你所需要准备的一个OpenAI 的密钥和一点点代码来发送提示并返回结果&#xff0c;例如下面这段代码&#xff1a; import { OpenAIApi, Configuration } from openai…

超火爆的ChatGPT课,送ChatGPT账号啦~~

HOT! HOT! HOT! &#x1f525; &#x1f525; &#x1f525; 上周&#xff0c;ChatGPT全栈开发课程一经推出&#xff0c;就在程序员圈子中引起了广泛关注。这两天 都被挤爆了&#xff0c;纷纷表示对课程内容很是期待呢。 明天就要开班直播啦&#xff0c;还未报名的同学&…

神经网络模型入门及蠓虫分类问题简单实战

学习知识要实时简单回顾&#xff0c;我把学习的神经网络模型简单梳理一下&#xff0c;方便入门与复习。 神经网络模型 神经网络简介 人工神经网络是在现代神经科学的基础上提出和发展起来的&#xff0c;旨在反映人脑结构及功能的一种抽象数学模型。自 1943 年美国心理学家W.M…

第十四章 代理模式

文章目录 前言一、静态代理完整代码接口 ITeacherDao &#xff08;代理类和被代理类都需要实现这个接口&#xff09;被代理类 TeacherDao代理类 TeacherDaoProxy测试类 Client 二、JDK动态代理完整代码接口 ITeacher实现类TeacherDao代理工厂 ProxyFacyoryclient 测试 三、Cgli…

企业本地文档如何实现规范在线管理?

随着企业数字化生产方式的不断推进&#xff0c;网络办公和在线协作越来越普遍&#xff0c;企业内部可能出现大量的文件和文档&#xff0c;这些文档多存在于不同的设备和存储介质上&#xff0c;这给企业的信息管理带来了一定程度的困难。为了提高企业的知识管理效率&#xff0c;…

Go基础篇:类型系统

目录 前言✨一、什么是类型&#xff1f;二、类型特性1、静态类型检查2、类型推断 三、类型别名和自定义类型1、类型别名2、自定义类型3、类型别名和自定义类型的区别 四、类型底层结构1、类型元数据2、其他描述信息3、uncommontype 五、小结 前言✨ 前段时间忙着春招面试&#…