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播放效果:

相关文章:
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和残差系…...
WuThreat身份安全云-TVD每日漏洞情报-2023-04-26
漏洞名称:Google Android 命令注入漏洞 漏洞级别:高危 漏洞编号:CVE-2023-20964,CNNVD-202303-538 相关涉及:None 漏洞状态:POC 参考链接:https://tvd.wuthreat.com/#/listDetail?TVD_IDTVD-2023-05794 漏洞名称:OpenSSL RSA 解密时间差异 漏洞级别:中危 漏洞编号:CVE-2022-4…...
剑指 Offer第二版:1~n 整数中 1 出现的次数、51. 数组中的逆序对、56 - II. 数组中数字出现的次数 II
剑指 Offer第二版 43. 1~n 整数中 1 出现的次数51. 数组中的逆序对56 - II. 数组中数字出现的次数 II 43. 1~n 整数中 1 出现的次数 题目:输入一个整数 n ,求1~n这n个整数的十进制表示中1出现的次数。 例如,…...
云原生-k8s核心概念(pod,deploy,service,ingress,configmap,volume)
Gitee-k8s学习 云原生实战-kubernetes核心实战 namespace Namespace是kubernetes系统中的一种非常重要资源,它的主要作用是用来实现多套环境的资源隔离或者多租户的资源隔离 Pod Pod可以认为是容器的封装,一个Pod中可以存在一个或者多个容器。 De…...
他工作10年,老板却让他走人
大家好,我是五月,一个编程街溜子。 二狗被裁了,他在公司待了快十年,他想留下来,老板却让他走。 我和他一样困惑。 他985毕业,工作中有从0开始一个项目直到日活过千万,也有过参与顶级产品核心…...
vpp怎么写node
VPP(Vector Packet Processing)是一个高性能的数据平面开源项目,用于构建网络功能虚拟化(NFV)和软件定义网络(SDN)解决方案。它由Cisco开发,并在Apache 2.0许可下发布。 在VPP中&am…...
【4. ROS的主要通讯方式:Topic话题与Message消息】
【4. ROS的主要通讯方式:Topic话题与Message消息】 1. 前言1.1 王者解释结点通讯:1.2 通讯小结 2. 灵活的Topic话题图解2.1 话题注意细节2.2 外延补充 3. Message消息图解3.1 消息类型3.2 查看标准消息类型std_msgs 4. 使用C实现Publisher发布者4.1 发布…...
【react全家桶学习】react中组件定义及state属性(超详/必看)
函数式组件定义及特点 定义(核心就是一个函数,返回虚拟dom): import React from reactexport default function index() {return <div>index</div> }特点: 1、适用于【简单组件】的定义2、是一个函数&a…...
如何以产品经理思维打造一所高品质学校?
学校的建设与管理真不是一件容易事。2023年03月17日,山东菏泽市曹县一家长投诉某中学课业繁重,孩子经常写作业到半夜;2023年4月4日,张先生在华龙网重庆网络问政平台投诉万州区某中学伙食差,指出“发灰的洋葱࿰…...
根治Spring中使用Mongo时报错InvalidMongoDbApiUsageException
文章目录 And Or迷惑原因 告别InvalidMongoDbApiUsageException问题简单解决根本解决修改源码 代码(省流,可以直接看这里) And Or 很多时候都需要进行逻辑的与或操作,但是spring当中自带的操作并不好用,于是做了相关的改进&#…...
【计算机组成原理】数据的表示和运算·进位计数制
🚩 本文已收录至专栏:计算机基础 我们可以通过显示屏看到各种形式的数据信息,但数据是如何在计算机中表示呢?运算器又是如何实现数据的算数、逻辑运算? 十进制数是最适合我们日常使用的一种计数方式,除此之…...
C++ Primer第五版_第十四章习题答案(21~30)
文章目录 练习14.21练习14.22头文件CPP文件 练习14.23头文件CPP文件 练习14.24头文件CPP文件 练习14.25练习14.26练习14.27练习14.28练习14.29练习14.30 练习14.21 编写 Sales_data 类的 和 运算符,使得 执行实际的加法操作而 调用。相比14.3节和14.4节对这两个运…...
服务器性能调优
硬件 如果是硬件瓶颈就换硬件 (包括CPU、内存、网卡) 软件 如果是方案架构设计有问题就换方案,比如mysql、redis方案有问题 建议先 top 看下软件瓶颈在哪,CPU、内存、网络(netstat),哪个进程占…...
带你深入学习k8s--(三) pod 管理
目录 一、简介 1、什么是pod 2、为什么要有pod 二、pod的分类 0、pod常用命令命令 1、准备镜像 2、自主式pod 3、控制器创建pod 4、扩容pod数量 5、通过service暴露pod(负载均衡,自动发起) 6、更新应用版本 三、编写yaml文件 四、Pod生命周期…...
前端系列11集-ES6 知识总结
ES Module 优点 静态分析 浏览器和 Node 都支持 浏览器的新 API 能用模块格式提供 不再需要对象作为命名空间 export 用于规定模块的对外接口 输出的接口与其对应的值是动态绑定关系可以取到模块内部实时的值 import 用于输入其他模块提供的功能 具有提升效果,会提升…...
连接分析工具箱 | 利用CATO进行结构和功能连接重建
导读 本研究描述了一个连接分析工具箱(CATO),用于基于扩散加权成像(DWI)和静息态功能磁共振成像(rs-fMRI)数据来重建大脑结构和功能连接。CATO是一个多模态软件包,使研究人员能够运行从MRI数据到结构和功能连接组图的端到端重建,定制其分析并…...
【目标检测论文阅读笔记】Detection of plane in remote sensing images using super-resolution
Abstract 由于大量的小目标、实例级噪声和云遮挡等因素,遥感图像的目标检测精度低,漏检率或误检率高。本文提出了一种新的基于SRGAN和YOLOV3的目标检测模型,称为SR-YOLO。解决了SRGAN网络 对超参数的敏感性和模态崩溃问题。同时,Y…...
外卖app开发流程全解析
外卖app开发是现代餐饮业的一个必备部分。在这个数字化时代,人们更愿意使用手机应用程序来订购食品。因此,为了满足客户需求,餐饮企业需要开发自己的外卖app。 第一步:确定目标受众 在开始外卖app的开发之前,需要确定…...
BUUCTF jarvisoj_level0
小白垃圾做题笔记而已,不建议阅读。。。 这道题感觉主要就是64位程序ebp8 题目中给出了shellcode 我们直接将返回地址覆盖就好。 在main函数中调用了vulnerable_function()函数。 vulnerable函数是一个漏洞函数:(存在缓溢出),我们只需要将…...
网络安全之入侵检测
目录 网络安全之入侵检测 入侵检测经典理论 经典检测模型 入侵检测作用与原理 意义 异常检测模型(Anomaly Detection) 误用检测模型(Misuse Detection) 经典特征案例 编辑自定义签名 编辑 签名检查过程 检测生命周期…...
设计模式和设计原则回顾
设计模式和设计原则回顾 23种设计模式是设计原则的完美体现,设计原则设计原则是设计模式的理论基石, 设计模式 在经典的设计模式分类中(如《设计模式:可复用面向对象软件的基础》一书中),总共有23种设计模式,分为三大类: 一、创建型模式(5种) 1. 单例模式(Sing…...
CMake基础:构建流程详解
目录 1.CMake构建过程的基本流程 2.CMake构建的具体步骤 2.1.创建构建目录 2.2.使用 CMake 生成构建文件 2.3.编译和构建 2.4.清理构建文件 2.5.重新配置和构建 3.跨平台构建示例 4.工具链与交叉编译 5.CMake构建后的项目结构解析 5.1.CMake构建后的目录结构 5.2.构…...
反射获取方法和属性
Java反射获取方法 在Java中,反射(Reflection)是一种强大的机制,允许程序在运行时访问和操作类的内部属性和方法。通过反射,可以动态地创建对象、调用方法、改变属性值,这在很多Java框架中如Spring和Hiberna…...
学习STC51单片机32(芯片为STC89C52RCRC)OLED显示屏2
每日一言 今天的每一份坚持,都是在为未来积攒底气。 案例:OLED显示一个A 这边观察到一个点,怎么雪花了就是都是乱七八糟的占满了屏幕。。 解释 : 如果代码里信号切换太快(比如 SDA 刚变,SCL 立刻变&#…...
Maven 概述、安装、配置、仓库、私服详解
目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...
Mysql中select查询语句的执行过程
目录 1、介绍 1.1、组件介绍 1.2、Sql执行顺序 2、执行流程 2.1. 连接与认证 2.2. 查询缓存 2.3. 语法解析(Parser) 2.4、执行sql 1. 预处理(Preprocessor) 2. 查询优化器(Optimizer) 3. 执行器…...
基于 TAPD 进行项目管理
起因 自己写了个小工具,仓库用的Github。之前在用markdown进行需求管理,现在随着功能的增加,感觉有点难以管理了,所以用TAPD这个工具进行需求、Bug管理。 操作流程 注册 TAPD,需要提供一个企业名新建一个项目&#…...
Go 并发编程基础:通道(Channel)的使用
在 Go 中,Channel 是 Goroutine 之间通信的核心机制。它提供了一个线程安全的通信方式,用于在多个 Goroutine 之间传递数据,从而实现高效的并发编程。 本章将介绍 Channel 的基本概念、用法、缓冲、关闭机制以及 select 的使用。 一、Channel…...
CSS | transition 和 transform的用处和区别
省流总结: transform用于变换/变形,transition是动画控制器 transform 用来对元素进行变形,常见的操作如下,它是立即生效的样式变形属性。 旋转 rotate(角度deg)、平移 translateX(像素px)、缩放 scale(倍数)、倾斜 skewX(角度…...
wpf在image控件上快速显示内存图像
wpf在image控件上快速显示内存图像https://www.cnblogs.com/haodafeng/p/10431387.html 如果你在寻找能够快速在image控件刷新大图像(比如分辨率3000*3000的图像)的办法,尤其是想把内存中的裸数据(只有图像的数据,不包…...
