PDF签名系列(1):PDF签名机制的漏洞分析

来源:PDF签名系列(1):PDF签名机制的漏洞分析 - 知乎

研究PDF文件的签名机制有一段时间了,刚开始学习的时候就看到有提到说,被签名的PDF内容的Range gap,会成为这个机制的漏洞,但是一直不能完全参透。直到昨天看到一篇文章的分析,才对这个问题有了一个更清晰的认识,所以做一个小小总结整理。

这里假设读者对PDF文件格式和数字签名的原理有一定了解。

首先,我们来看一下PDF文档里的Signature Dictionary:

preview

我们知道,PDF文件是由一系列Objects组成的,通过objects的互相引用,组织成了一个文档的appearance. 对于一个签过名的文档来说,最重要的就是上图这样一个dictionary类型的object.

用一张图来简单说明一下PDF的签名机制。

上图是一个加入了数字签名的PDF文档内容。被签名的文档内容是整个文档,但是除去了Contents入口下面的具体值。简单来说,是对图中蓝色部分的所有内容做哈希,然后对哈希做签名,最后把签名值以及相关内容写进图中粉色部分。

好了,这样的方法,有什么漏洞呢?

先简单描绘一下PDF文档的签名流程:

1. 把文档序列化成一个字节串,中间预留出合适的空间存放签名值,此步骤称为preliminary serialization

2. 将字节串预留的空间去掉,生成新的字节串,称为signing serialization

3. 根据signing serilization生成签名数据块写入步骤一的preliminary serialization。签名完毕。

preview

下面来详细描述下这个机制隐含的一个漏洞:

假设生成两个preliminary serilization字节串A1,A2;可以看到文档里包含两个catalog.

Note:一般来说,catalog是整个PDF的入口,所有用来显示PDF所用到的内容object都是从catalog开始逐级引用的。所以理论上来说,文档内容里允许有冗余的object,也就是说,此object虽然在文档中定义了,但是在显示的时候,并没有被引用到。

另外,我们可以知道,object的相对位置是可以改变的,只要修改了xreftable里对object的offset的描述,那么最终显示的效果是一样的。

 

preview

我们可以看到,通过将A1和A2中的gap去掉,生成signing serialization B1和B2之后,B1和B2可以是完全一样的字节串。因此最终的签名值也会是一样的。

当签名值被嵌入回原来的A1和A2之后,生成了最终签名文件C1和C2.

可以看到,C1和C2是两个不同的文档了,虽然是相同的xreftable,相同的catalog的offset,但是C1索引到了catalog1,C2索引到了catalog2,所以C1和C2渲染出来的文档可以是totally不同的内容。但是签名值确实对两个文档都是合法的签名值,这有悖于数字签名的原则。

思考下这个问题的根源来自PDF文档允许冗余的object存在,所以这个漏洞能否存在取决于是否认为这是PDF符合语法规范的。

参考文档:

Collisions in PDF Signatures

 

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

linux date命令显示毫秒,解决MacOS系统中date命令没有毫秒和sha512sum、sha256sum、md5sum等命令的问题...

安装brew/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"使用brew安装coreutilsbrew install coreutils设置系统新的命令软连接sudo ln -sv /usr/local/bin/gsha256sum /usr/local/bin/sha256sumsudo ln -sv /…

PDF签名系列(2):PDF的签名值到底存在哪里?

来源:PDF签名系列(2):PDF的签名值到底存在哪里? - 知乎 研究过PDF签名的同学应该见过下面这张图, 来自ADOBE的文档Acrobat_DigitalSignatures_in_PDF.pdf PDF被签名的内容是整个文档除去signature dictionary里/Contents下面的内容. 签过名的哈希值再连同其他一些…

数字签名时间戳服务器的原理

时间戳服务工作流程: ◆ 用户对文件数据进行Hash摘要处理; ◆ 用户提出时间戳的请求,Hash值被传递给时间戳服务器; ◆ 时间戳服务器对哈希值和一个日期/时间记录进行签名,生成时间戳; ◆ 时间戳数据和文…

android x86 笔记本卡屏,笔记本死机卡屏怎么办

笔记本死机卡屏的解决方法:首先按住键盘上ctrlaltdel,弹出任务管理器;然后在弹出任务管理器中选择explorer.exe;接着右键点击explorer.exe,在弹出菜单中选择“结束进程”;最后输如explorer.exe即可。首先&a…

【读书笔记】《框架设计(第2版)CLR Via C#》中两个比较有趣的知识点

本季度公司要求阅读《框架设计(第2版)CLR Via C#》这本书,由于前两个月一直很忙,也没有时间阅读,偶尔阅读也是很晚回家以后临睡前拿起这经典之作读那么一个小节。最近利用周末可以说一鼓作气的看了大半本,感…

8个最高效的Python爬虫框架,你用过几个?

From:https://segmentfault.com/a/1190000015131017 1.Scrapy Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架。 可以应用在包括数据挖掘,信息处理或存储历史数据等一系列的程序中。。用这个框架可以轻松爬下来如亚马逊商品信…

300+Jquery, CSS, MooTools 和 JS的导航菜单资源

如果你是网站前端开发人员,那么对你来说,也许做一个漂亮导航菜单会很得心应手。本文要为大家总结各种导航菜单的资源,以便让大家的网站前端开发的工作更方便更快速,只要选择现成的例子就可以应用于自己的网站了。本文收集的这些资…

轻量级分布式任务调度平台 XXL-JOB

From:https://www.cnblogs.com/xuxueli/p/5021979.html github 地址 及 中文文档地址:https://github.com/xuxueli/xxl-job 《分布式任务调度平台XXL-JOB》 一、简介 1.1 概述 XXL-JOB是一个轻量级分布式任务调度平台,其核心设计目标是开发…

畅玩4c刷android 9.0,华为畅玩4C电信版 CyanogenMod 13.0_Android_6.0.1 【HRT_chiwahfj】

本帖最后由 chiwah渔夫 于 2016-9-9 22:31 编辑【基本信息】ROM名称:华为畅玩4C电信版 CyanogenMod 13.0_Android_6.0.1ROM大小:617M适配版本:CyanogenMod 13.0_android_6.0.1测试机型:华为畅玩4C电信版作者简介:HRT团…

可以叫板Google的一个搜索引擎 —— DuckDuckGo

From:https://blog.csdn.net/inter_peng/article/details/53223455 作为习惯了使用Google进行资料查询的我来说,如果没有Google,真的感觉很难受。纵使找了一些可以翻墙的软件,但无奈还是经常不稳定,总是时断时续的。Bi…

小米鸿蒙1001小米鸿蒙,小米高管早就放下狠话!愿意使用鸿蒙2.0系统:那其他厂商呢?...

【9月14日讯】相信大家都知道,自从华为鸿蒙OS系统2.0版本正式发布以后,由于华为消费者业务CEO余承东正式确认:“华为手机在12月开始适配鸿蒙OS系统,明年所有华为手机全面启用鸿蒙OS系统。” 这也意味着国产智能手机厂商也将彻底的…

WCF中的管道——管道类型

管道是所有消息进出WCF应用程序的渠道。它的职责是以统一的方式编制和提供消息。管道中定义了传输、协议和消息拦截。管道以层级结构的形式汇总,就创建了一个管道栈。管道栈以分层的方式进行通信并处理消息。例如,一个管道栈可以使用一个TCP协议管道和一…

android德州扑克计算器,学界 | 一台笔记本打败超算:CMU冷扑大师团队提出全新德扑AI Modicum...

原标题:学界 | 一台笔记本打败超算:CMU冷扑大师团队提出全新德扑AI Modicum选自arXiv参与:路、晓坤CMU 冷扑大师团队在读博士 Noam Brown、Tuomas Sandholm 教授和研究助理 Brandon Amos 近日提交了一个新研究:德州扑克人工智能 M…

神器 | 百度云资源搜索

From:https://blog.csdn.net/qq_21492635/article/details/81109247 直接上神器 该网页没有做自适应,也没有专门的手机站点,因此建议电脑使用。也可下载桌面客户端(仅支持windows),稳定不卡,速度…

html前端如何缓存页面,Nuxt中如何做页面html缓存

Nuxt是一款基于Vue的服务端渲染SSR框架在Nuxt框架的API中,有一个叫 serverMiddleware 的服务端中间件,我们可以利用它在返回首屏html前做一些缓存的处理在这之前我们需要了解一个叫LRU的算法,LRU是一种缓存淘汰算法,用链表存储数据…

Google 和 bing 都无法替代的10大深网搜索引擎

From:https://blog.csdn.net/ejinxian/article/details/74081716 当我们想要搜索某些内容时,我们第一个想到的就是打开Google、百度或必应这类的搜索引擎。但针对有些内容,却是这些常规搜索引擎无法获取到的,那就是隐藏在深网的内…

植树节html5游戏,植树节活动

活动概述活动时间:3月10日至3月13日(以实际版本内活动日期为准)活动介绍:一年一度的植树节活动开始了,小伙伴们拿起小铲子,小水桶,今天勤劳来种树,明天不用吸雾霾!快来邀请你的小伙伴一同参与活动吧,开开心…

Swagger 注解~用于Controller

Api 用于类;表示标识这个类是swagger的资源 tags–表示说明 value–也是说明,可以使用tags替代但是tags如果有多个值,会生成多个list Api(value"用户controller",tags{"用户操作接口"}) RestController public class Us…

大黄蜂(HORNET):比Tor更快更安全的匿名网络

From:https://blog.csdn.net/lee_sire/article/details/50357234 你一定听说过Tor洋葱路由技术,它提供了强大的匿名网络访问功能,以此成为互联网用户、政治活动家、以及记者躲避有关部门限制监控的方法。但Tor最受人诟病的是它蜗牛般的网络连…

HTML在前端开发中起到的作用,什么是字符串,web前端开发里起到什么作用

观察某宝商品数据,有一个东西叫服务器>>>>js的作用重要作用之一>>>>交互>>>>人机交互(事件)>>>>服务器交互(ajax);服务器交互,数据处理方式json>>>>>要把它转化成字符串操作。字符串操作…