iOS 中的代码签名(一)—— 数字签名基本概念

news/2024/11/9 15:11:27

在继续深入了解之前,首先要了解一些关于数字签名的基本概念,关于这些基本概念,阮一峰的这篇博客已经做了非常好的解释,可以先移步一看。

如果用 A 来表示文章中的鲍勃,B 来表示苏珊,Z 来表示道格,那么文章最后的所描述的情况可以用下图来表示:

enter image description here

在阮一峰的文章中,貌似到这里就已经结束了,Z 是无论如何都无法窃取和修改 A、B 之间发送的信息了。然而实际情况并没有这么简单,在有了 CA 的情况下,Z 依旧可以去窃取 A、B 之间的信息。

如果 Z 获得了 CA 的私钥,那么 Z 就可以用 CA 的公钥首先将信息解密,然后换成自己的信息,然后再用 CA 的私钥重新加密,这样一来,B 依旧得到了错误的信息。

enter image description here

所以为了防止这种情况发生,一般的 CA 都会想进各种办法去保证自己的私钥的安全,因为一旦 CA 的私钥泄露,CA 就完全没有信任度可言。对于一般的 Z 来说,这种方式的成本比较大,所以他们会想另外一种方式:伪装成 CA。

如果 Z 伪装成了 CA,那么他就分别给 A、B 自己的证书,让 A、B 错误的信任了自己,以为自己是万无一失的。

enter image description here

那么这种情况下,保证 A、B 之间信息传递安全的重点就在于,如何保证 A、B 和 CA 之间的信息传递是安全的不会被篡改的。仔细想想,保证 A、B 之间的信息安全其实和保证 CA 与 A、B 之间的信息安全是一样的,因此,CA 和 A、B 之间的通信依旧使用了 A、B 之间的飞遁陈加密方式。

这个时候,有意思的事情就来了:CA 为了保证和 A、B 之间信息传递安全,必须找一个另外一个 CA 来确保自己和 A、B 之间信息传递的安全,而另外一个 CA 单靠自己也无法保证和 A、B 之间信息传递的安全,他也必须再找一个 CA 来保证安全。这样子就产生了一个问题:在当前这套机制中,除非找到一个可以独立确保信息传递的安全的 CA,这套机制才能天衣无缝,否则这种依赖关系就会一直传递下去。

在上面这个过程中,各个 CA 产生了一种链式的依赖关系,同样 CA 所签发的证书也产生了一种链式的依赖关系,一个证书必须被其他的 CA 签发的证书的信任后(所谓信任就是指通过其他 CA 的证书确保了获取当前 CA 证书的过程是安全的),才是可信的。这种链式的信任关系就叫做证书的信任链

为了保证这套机制能够天衣无缝,一种特殊的 CA 的产生了—— Root CA ,A、B 在出生的时候就会带着 Root CA 的证书,这样就确保了和 Root CA 之间的通信是绝对安全的;在信任了 RootCA 的证书(一般被称作根证书)之后,RootCA 信任的 CA 也可以安全的和 A、B 进行通信了。在这以后,A、B 终于可以放心的进行通信了。这种机制保证了接受方可以得知接受到的信息是否是发送方发出的原始信息。


http://www.niftyadmin.cn/n/3571278.html

相关文章

java序列化理解,java序列化含义的理解(2)

java序列化含义的理解(2)7.当对一个对象实现序列化时,发生的变化:在没有序列化前,每个保存在堆(Heap)中的对象都有相应的状态(state),即实例变量(instance ariable)比如:Foo myFoo new Foo();myFoo .setWidth(37);myFoo.setHeight(70);当通过下面的代码序列化之后,MyFoo对象中…

matlab 逻辑矩阵方格图,已知45个点X Y Z的坐标值已知,如何用matlab画出网格图,另外每个小方格里带颜色 - 程序语言 - 小木虫 - 学术 科研 互动社区...

相邻点连成线x1[94.38604197.620596100.690028103.691318106.64213794.41851797.663183100.748096103.768930106.74305794.41139397.665528100.765316103.805099106.80194794.37965097.642556100.756556103.814638106.83356494.33004697.601107100.728728103.804532106.8449639…

consul + Nginx 实现nginx代理自动载入backed的服务器, 实现fullnat效果

consul 安装部署略过,具体参见http://kkkkkk.blog.51cto.com/468162/1914469 nginx扩展consul模块 https://github.com/weibocom/nginx-upsync-module 本文转自 tianshuai369 51CTO博客,原文链接:http://blog.51cto.com/kkkkkk/1915716

php深层理论知识太浅,JS中浅度克隆和深度克隆有什么区别

本文章分享的是JavaScript中一个重要的知识点克隆,具有一定的参考价值,希望对大家的学习有所帮助JavaScript中克隆分为两种:浅度克隆和深度克隆,都是先对值遍历一遍判断是原始值还是引用值,原始值直接复制,…

勘探重力实验matlab,重力场与重力勘探实验指导.ppt

重力场与重力勘探实验指导.ppt 重力场与重力勘探实验指导,实验一、重力仪认识操作,一、实验目的 了解掌握金属弹簧重力仪的测量原理; 学习操作金属弹簧重力仪,了解金属弹簧重力仪的工作范围、操作步骤、性能特点等,为实际野外重力测量实习奠定…

CentOS6.6环境下布署LVS+keepalived

CentOS6.6 环境下布署LVSkeepalived 环境: 操作系统 Centos 6.6 _X64 WEB nginx 结构: LVS-MASTER:10.6.1.210 LVS-BACKUP: 10.6.1.211 LVS-VIP: 192.168.1.214 Realsever: 10.6.1.212,10.6.1.213 一.Keepalive…

txt命名为matlab文件,matlab导入

读入以逗号分隔的数据csvwrite将数据写入文件,数据间以逗号分隔dlmread将以 ASCII 码分隔的数值数据读入到矩阵中dlmwrite将矩阵数据写入到文件中,以 ASCII 分隔textread从文本文件中读入数据,将结果分别保存textscan从文本文件中读入数据&am…

if or函数套用_4个函数,5种方法,6个案例,条件判定原来是这么简单

第一种方法:IF函数对一种条件进行判定,根据条件是否成立输出两种不同的结果,即:IF(logical-test,[value-if-true],[value-if-false])或IF((测试条件,真值,假值)。例如:购买数量大于等…