[ipsec][crypto] 有点不一样的数字证书究竟是什么

前言

前言是在写完了全文以后回头补的。本意是想彻底抽象的把证书的抽象逻辑意义表达出来,由于你能找到的大部分html

资料都深陷在技术细节与行业规范里。只有其型没有其理,没有什么比理解一个事物的内在合理性更有乐趣的了。git

因此忍不住表达的欲望想把他们写出来。浏览器

无奈改了几版,始终写的混乱。因此,每个能读完的人,我都对你的支持表示感谢,若是有再深刻讨论的安全

意愿,请和我联系。electron

很遗憾理解了九成,表达出来却只剩下五成。原谅我表达欠佳。ide

[防扒乱入]  author: class_tong  date: 20190914函数

 

〇 引言

数字证书是什么?本文的出发点就是要从个人角度回答这个问题。同时咱们引入ike和tls做为理解概念的现实工具,一并在文中乘机引入。工具

用以加深理解,也用以回归实践。post

以下这句话是个人回答:加密

证书是由权威机构进行了数字签名的一段信息,这段信息表达了一个公钥与一个名字以及该名字的附带属性之间的关联关系。该名字从属于一个有效的名字系统。

换一个表达方式,一样表述上述内容:

证书是这样一段信息:权威机构A说,我保证,公钥P是名字N的。

 

再下面这一段,是wiki的回答

In cryptography, a public key certificate, also known as a digital certificate or identity certificate, 
is an electronic document used to prove the ownership of a public key[1]. The certificate includes information about the key,
information about the identity of its owner (called the subject), and the digital signature of an entity
that has verified the certificate's contents (called the issuer).

 

我认为,我表达的虽然土,可是是正确的。也就是说,以上三个回答,表述了数字证书的同一个定义。

接下来,咱们一块儿来理解。

 

一 讲个故事

讲清楚这个事,须要引入几个前提。它们分别是以下的几个概念:

1.权威机构,2,消息认证码, 3.数字签名,4.公钥,5.名字,6.名字系统,7.证书颁发

我同时假设,你在阅读到这里的时候,是懂得什么是公钥/私钥的。由于本文只聚焦在认证体系的相关脉络内讨论,因此3.公钥将不作解释。

以及:公钥加密私钥解密为何可以提供机密性?私钥加密公钥解密为何可以提供惟一性?也不作解释。(因此,请自然接受他们做为继续阅读下去的前提。)

 

描述一个场景:

来自艾泽拉斯的小a,与来自永烁星光之地的小b,从小就是好朋友。有一天他们双双入狱,而后一个越狱的故事就发生了。。。

这座监狱有500名囚犯,关押在各自独立的500个牢房里,彼此没法见面,惟一的沟通方式就是写纸条。而后经过一个不安全的纸条传递系统传递给任何人。

若是一我的要想加入整个沟通体系里。它首先必需要有个一个名字:一个数字,一个编号,或者一个自定义的词。

咱们统一称其为名字。

好比,小a。只有拥有了一个名字以后,才能在和其余人进行了通讯以后,获得对方的回应。不然,对方将不知道

应该把纸条回应给谁。一样,想要和小a主动进行联系的人,若是不知道小a的名字,也没有办法告诉纸条传递系统

,该将纸条传递给谁。

这就是名字的意义。

这个故事是这样的,一块儿坐牢以前,小a和小b是好朋友(最佳损友?)。他们对彼此都充分信赖。接下来,

小b写了一张纸条,“咱们晚上九点越狱。”,发送给小a(小a知道小b会发来消息,而且一直在等待小b的消息)。

小b为了证实消息真的是本身发的,在纸条最后盖了一个印章(咱们知道印章的防伪办法是,

找到另外一张值得信赖的印章印记进行花纹对比),并将印章盖在了内容的上方(创建强关联,这个能够对应理解成

散列函数的功能)。小a为了印证消息真的来自小b,而不是监狱系统钓鱼执法,他找到了老z,跟老z要了一张小b从前的印章印记。

 

好的,咱们梳理一下,如今这里边有三我的a, b, z,一个附带印章的纸条,一个印章印记。

因而,小a在选择是否越狱以前,必须先回答以下几个问题:

1,纸条内容(包括印章)在传递中没有被篡改。  

2,纸条印章与老z给的印章吻合。

3,这个吻合的印章花纹,确实属于小b。

4,老z提供的印记真的是可信的。

假设老z被证实了可信,便会将对小b的信任传递给小a,也就是说由于:z信任b,而a信任z,

因此,a便可以信任z提供的消息真实,也就是3能够成立。那么,这里便隐含了新的问题:

5,老z如何证实他拿到b的印记时,真的是属于a的。

 

解决问题1,用到的方法是消息认证或数字签名,也就是前边穿帮了的散列函数。

解决问题2,用到的方法是数字签名,也就是私钥加密,公钥解密。可是公钥的得到已经牵扯到了数字证书。

解决问题3,4,用到的方法是数字证书。咱们能够将数字证书的结构进行拆解,使其分别解决问题3,4

[防扒乱入]  author: class_tong  date: 20190914 

问题5,表明的是数字证书的颁发过程。

为了进一步说明问题, 咱们如今改变场景布置。约定问题4是成立的,老z在整个监狱内拥有绝对的权威,全部人

都信任他,他手里拿着全部人的印章印记。他亲自完成了证书的颁发过程(也就是亲眼见到每个人在他的印记本上作印记盖章)

好了,咱们如今又引进了新的概念,证书颁发。

而,在新的场景布置下,老z就是权威机构。

 

而保证每一个人名字背后都只对应着一我的的系统,就是名字系统。名字和人的对应关系是多对一的关系,即一我的能够同时

拥有多个名字。且对应关系不可修改。

 

如今,咱们跳出这个例子,其实多我的也能够共同拥有一个名字,可是这多我的会被名字系统理解为一个单一实体,

因此,其实仍是一个多对一的关系。总之名字系统解决的是名字的惟一性问题,为后面的讨论作准备。

 

终于。我用土话编一个穿帮的故事成功的引出了这七个概念。我相信懂的人都看的懂,不懂的人怕是更加不懂了。。。

 

二 不讲故事

再梳理一次,上边的故事概念,正经八百的。

密码工程分两大块:加密和认证(are you sure?),咱们这里,只讨论认证,不讨论加密。

另外,名字和名字系统经过上面的故事,也讲的很清楚(不明不白的)了,也不讨论了。

 

1 认证

认证分为消息认证源认证两个。咱们设想迷茫的小a,收到消息以后,最担忧的其实就是这两件事情

(1)消息内容是否是真实的。(2)消息源是否是真实的。

这里须要注意前文中一个重要的设定,小a预期小b的消息。

因此,消息内容是否是真实指的是,小a拿到的内容是否是就是小b想传递的。

同时,消息源是否是真实的是指,写消息这我的,是否是就是小a内心所想的那个(入狱前就认识的那个)小b。

 

1.1 消息认证

前文已经提到,作消息认证,咱们用到了HASH。准确的说就是散列函数。经过对消息体和秘钥的散列函数,从而

生成消息认证码。HASH_func(消息体+秘钥),秘钥就是对称加密的秘钥,就是一段只有a与b知道的字符串(额,从天而降的秘钥。。。

不过这里只是稍微引入,下一小节里会去掉,因此上边的故事仍是能说过去的。)

收到消息的一方,能够从新计算这个hash,从而证实消息内容没有篡改。

 

1.2 源认证

源认证就复杂了。

简单的说,就是被认证的一方使用私钥加密一段内容。把密文发送给对方。对方用公钥解开,发现获得的内容和明文保持一致。

便证实了,发送消息的一方,确实是拥有该公钥所对应秘钥的人。这个东西就叫数字签名。通常来讲,在数字签名里,用私钥加密的

是明文的散列值。而后接触明文以后。再用hash和公钥解密的内容对比。

这时,咱们惊奇的发现,数字签名同时完成了消息认证码的工做,也就是作了消息认证也作了源认证。并且,还去掉上小节里的秘钥。

 

不过,其实这里只是勉强说明了源认证。可是并不完全。由于,咱们设定的源认证是指:发送消息的人小b就是小a内心所想的那我的。

到目前,咱们解决了几个问题:1 消息是可信的。2, 发送方与小a手里的公钥已经创建了强关联(相信这个公钥属于小a内心所想的那我的,也就能

相信消息的发送方是小a内心所想的那我的)

接下来须要进一步解决的,就是:如何证实公钥属于小a内心所想的那我的

这个步骤将由数字证书来完成。

 [防扒乱入]  author: class_tong  date: 20190914

2 数字证书

2.1 做用

咱们如今知道,数字证书的做用就是证实:公钥属于你内心的那我的。

那我的要有一个代号,也就是前文提到的名字。这个名字是存在于名字系统里的。名字系统保证了名字的有效性,惟一性和不会从新指派。

因而,在引入名字系统以后,数字证书的做用就变成了:公钥属于名字。(固然,你内心想的那我的的名字)

而另外一个须要强调的事情是,在咱们刚刚引入名字以前的全部推理里。都不存在名字这样一个概念。也就是说,前边咱们只是证实了这样

一件事情:小a收到了一条消息。这条消息属于有个公钥p所对应的私钥。也就是说,只创建了消息与公钥之间的关系关联。

 

前面咱们提到了证书的做用,这也偏偏是证书存在的形式。每个证书是一个公钥,以及这样的一个对应关系:公钥对应的名字。

因此,基于1)中的推论,咱们如今可以获得新的一个推论:消息属于公钥对应的名字。也就是创建了消息与名字直接的关系。

也就是说,发消息的人,就是名字所表明的人。

 

2.2 额外逻辑

这仍是没有达到目的。由于还须要判断小a内心所想的那个名字,与咱们上一小结推理出的名字是否一致。

这个,咱们不讨论。小a会引入任何一种方法来完成这件事情,从而完成逻辑闭环。好比,打开证书看一眼。无论他。

可是咱们假设这条消息是符合预期的,小a打开证书看了以后,真的写着小b。而他内心想的也是小b。

好的。到这里。咱们终于完成这条消息的源认证。

 

这即是整个过程当中,数字证书存在的意义。

 

3 证书颁发

以上内容里,咱们预设了一个前提。就是小a自然的的拥有这小b的证书。

事实上,在通讯中,这是不可能的。总要有一个途径拿到这个证书。而且彻底详细这个证书的安全和可信性。

这即是权威机构(也就是老z)要作的事情。

老z,对这个证书预先作了数字签名。从而保证了证书的可信性。因此只要你相信老z,就能够详细老z签名的

全部证书。

如上文,老z就是权威机构,如上过程就叫作证书颁发。

 

4 其余

除了借用名字来创建完整的信任逻辑链条外。还可使用别名。

事实上在x.509证书格式中,名字被称为subject, 别名被称做subject alternative name

 

如,在配置strongswan时,用户的大脑与软件之间创建联系,就用的subject。

在strongswan的配置文件中,要显示指名我想要连接的对方的ID=【x509中的subject字符串】

又如,在https中,用户大脑与浏览器直接创建的联系,就是使用suject alternative name

也就是域名,如www.baidu.com。 在baidu的证书中,若干域名是SAN。

若是你不经过域名访问,而是经过IP地址直接访问。浏览器就会报警,说不安全的访问。

虽然一块儿都是对的,可是,却缺乏了从用户的大脑到名字的逻辑链条,也就是证书的做用

没有达到。

 

写了太多了,不得不拆成两篇发:

下一篇,重点讲ipsec和tls中的端认证机制:[ipsec][crypto] ike/ipsec与tls的认证机制比较

[防扒乱入]  author: class_tong  date: 20190914  

相关文章
相关标签/搜索