数字证书

目录

1.密码学相关知识

对称加密

非对称加密

第一回合:

第二回合:

第三回合

第四回合

2.数字证书

分类

格式

内容

信任链

吊销列表

数字证书的工作原理

第五回合(完整过程)


1.密码学相关知识

明文(plain text):发送人、接受人和任何访问消息的人都能理解的消息。

密文(cipher text):明文消息经过某种编码后,得到密文消息。

加密(encryption):将明文消息变成密文消息。

解密(decryption):将密文消息变成明文消息。

算法:取一个输入文本,产生一个输出文本。

加密算法:发送方进行加密的算法。

解密算法:接收方进行解密的算法。

密钥(key):只有发送方和接收方掌握的消息

对称密钥加密(Symmetric Key Cryptography):加密与解密使用相同密钥。

非对称密钥加密(Asymmetric Key Cryptography):加密与解密使用不同密钥,分为公钥和私钥


这里简单说一下对称密钥加密,和非对称加密

对称加密

在对称加密算法中,加密使用的密钥和解密使用的密钥是相同的,加密和解密都是使用同一个密钥。通信双方采用相同的密钥来加解密会话内容,即一段待加密内容,经过同一个密钥的两次对称加密后,与原来的结果一样。

举例说明:

根据异或性质:  

(A ⊕ B) ⊕ B = A

得到如下加密方法,其中C为密文,P为明文,K是双方约定的常量,

C  = P ⊕ K

对应的解密方法则为:

P = C ⊕ K

这就是一种简单的对称密钥算法的过程,其中异或操作是对称加密、解密算法,K则是密钥。

注:对称加密算法有一个很大的缺陷,就是通信双方如何安全的传递加密密钥

非对称加密

非对称加解密算法的密钥是成对出现的,公钥加密过的密文只有对应的私钥能解密;私钥签名过的密文可以通过对应的公钥验签。原则上私钥是不能在网络中传递的。

双方通信时,首先要将密钥对中的公钥传给对方,这个密钥可以在不安全的信道中传输;传输数据时,先使用自己持有的密钥做加密,对方只能用自己传输过去的密钥解密。

举例说明:

其中C表示密文,P表示明文,x是公钥,y是私钥,

并假设 xy= 1,则有下加解密方法

加密方法为:C=P^{x}

解密方法为:P=C^{y}=P^{xy}=P^{1}


这里引入一个例子来介绍一下,通信双方的加密问题。

第一回合:

“小客”->“小服”:你好

“小服”->“小客”:你好,我是小服

因为消息是在网络上传输的,有人可以冒充自己是“小服”来向小客发送信息。所以会出现下面的情况:

“小客”->“黑客”:你好        // 黑客在“小客”和“小服”之间的某个路由器上截获“小客”发给小服的信息,然后自己冒充“小服”

“黑客”->“小客”:你好,我是小服

“小客”在接到消息后,并不能肯定这个消息就是由“小服”发出的,某些“黑客”也可以冒充“小服”发出这个消息。

那么如何确定信息是由“小服”发过来的呢?

第二回合:

“小客”->“小服”:你好

“小服”->“小客”:你好,我是小服

“小客”->“小服”:向我证明你就是小服

“小服”->“小客”:你好,我是小服 {你好,我是小服}[私钥|RSA]

//{你好,我是小服}[私钥|RSA]  表示用私钥对“你好,我是小服”进行加密后的结果。

为了向“小客”证明自己是“小服”,“小服”把一个字符串用自己的私钥加密,然后发送明文+加密后的密文一起发给“小客”。

“小客”收到信息后,用自己持有的公钥把 {你好,我是小服}[私钥|RSA] 这个内容用公钥进行解密,然后将解密的内容和“你好,我是小服”对比。

因为“小服”用私钥加密后的内容,只能由公钥进行解密,私钥只有“小服”持有,所以如果解密出来的内容是能够对得上的,那说明信息一定是从“小服”发过来的。

注:RSA密码体制是一种公钥密码体制,公钥公开,私钥保密,它的加密解密算法是公开的。 由公钥加密的内容可以并且只能由私钥进行解密,由私钥加密的内容可以并且只能由公钥进行解密。

第三回合

“小客”->“小服”:你好

“小服”->“小客”:你好,我是小服

“小客”->“小服”:向我证明你就是小服

“小服”->“小客”:你好,我是小服 {你好,我是小服}[私钥|RSA]

“小客”->“小服”:{我的帐号是aaa,密码是123,把我的余额的信息发给我看看}[公钥|RSA]

“小服”->“小客”:{你的余额是100元}[私钥|RSA]

注意上面的的信息 {你的余额是100元}[私钥|RSA],这个是“小服”用私钥加密后的内容。

我们之前说了,公钥是发布出去的,因此所有的人都知道公钥。所以除了“小客”,其它的人也可以用公钥对{你的余额是100元}[私钥|RSA]进行解密。因此这个信息是无法保密的;

在实际的应用过程,一般是通过引入对称加密来解决这个问题,看下面的演示:

第四回合

“小客”->“小服”:你好

“小服”->“小客”:你好,我是小服

“小客”->“小服”:向我证明你就是小服

“小服”->“小客”:你好,我是小服 {你好,我是小服}[私钥|RSA]

“小客”->“小服”:{我们后面的通信过程,用对称加密来进行,这里是对称加密算法和密钥}[公钥|RSA]    //红色字体的部分是对称加密的算法和密钥的具体内容,小客把它们发送给小服。

“小服”->“小客”:{OK,收到!}[密钥|对称加密算法]

“小客”->“小服”:{我的帐号是aaa,密码是123,把我的余额的信息发给我看看}[密钥|对称加密算法]

“小服”->“小客”:{你的余额是100元}[密钥|对称加密算法]

“小客”在确认了“小服”的身份后,“小客”自己选择一个对称加密算法和一个密钥,把这个对称加密算法和密钥一起用公钥加密后发送给“小服”。

对称加密算法和密钥是用公钥加密的,因此就算这个加密后的内容被“黑客”截获了,由于没有私钥,“黑客”也无从知道对称加密算法和密钥的内容,这样可以保证只有小服可以知道对称加密算法和密钥。“小服”和“小客”就可以用对称加密算法和密钥来加密通信的内容了。

那么问题来了“小服”要对外发布公钥,那“小服”如何把公钥发送给“小客”呢?我们可能会想到以下两个方法:

  1. 把公钥放到互联网的某个地方的一个下载地址,事先给“小客”去下载
  2. 每次和“小客”开始通信时,“小服”把公钥发给“小客”

但是这个两个方法都有一定的问题:

对于方法1,“小客”无法确定这个下载地址是不是“小服”发布的;另外要所有的“小客”都在通信前事先去下载公钥也很不现实。

对于方法2,也有问题,因为任何人都可以自己生成一对公钥和私钥,他只要向“小客”发送他自己的公钥就可以冒充“小服”了。

我们的数字证书就可以解决这个问题,它可以证明小服的公钥确实是小服的。


2.数字证书

数字证书(”digital certificate”或“public key certificate”)是指在互联网通讯中标志通讯各方身份信息的一个数字认证,在网上用它来识别对方的身份。从本质上来说是一种电子文档,它的作用是证明某某东西确实是某某东西。

CA( Certificate Authority )也叫“证书授权中心”。负责发放和管理数字证书的权威机构。一般来说,CA必须是所有行业和所有公众都信任的、认可的,因此它必须具有足够的权威性。

一般分为:

  • 根CA:处在信任链的顶端,其证书公钥默认导入各种操作系统与浏览器中
  • 中级CA:处于信任链中间,根CA或其他中级CA颁发的证书,还能继续颁发子证书
  • 个人:处在信任链末端,中级CA或根CA颁发的证书

分类

按持有者分类 :    

个人证书:CA中心给个人颁发的证书,仅代表个人身份,证书包含个人信息和个人公钥。

单位证书:CA中心给组织机构颁发的证书,代表机构的身份,包含机构单位的信息和单位公钥。

系统证书:CA中心给应用系统或者设备颁发的证书,代表系统的身份,包含系统的信息和系统的公钥。

按证书用途分类:

签名证书:签名证书只能用于签名和验证签名,为了密钥的安全,密钥对一般在小客端产生和保存。

加密证书:加密证书只能用于加密,其中密钥对由CA产生,通过保护算法和协议发送给用户保存,同时CA中心也保存该密钥对,以备管理和恢复。

格式

证书有PEM和DER编码格式,其中PEM是采用Base64编码字符保存,DER格式采用二进制保存。

一张证书包含公钥与私钥,对应着非对称加密算法中用到的公私钥。通常用.crt后缀标识公钥,用.key标识私钥。

还有一种将公钥与私钥捆绑在一起的保存方法,后缀通常为.pfx(微软用)或者.p12。

内容

证书公钥中除了保存公钥内容以外,通常还有颁发者、使用者、有效期、签名等信息。

证书中有公私钥信息,全部的RSA算法参数。

注:数字证书可以保证数字证书里的公钥确实是这个证书的所有者(Subject)的,或者证书可以用来确认对方的身份。也就是说,我们拿到一个数字证书,我们可以判断出这个数字证书到底是谁的。

信任链

证书之间的信任关系,是可以嵌套的。比如,C 信任 A1,A1 信任 A2,A2 信任 A3......这个叫做证书的信任链。只要你信任链上的头一个证书,那后续的证书,都是可以信任的。

吊销列表

如果证书持有者一个不小心,将证书私钥给泄露了,这个时候他人就可以冒用其身份。为了防止这种情况发生,各大CA都维护着一张CRL列表,里面标记了虽然还未过有效期,但已不能再使用的证书。

数字证书的工作原理

“小服”在给“小客”发公钥的过程中,会把公钥以及小服的个人信息通过Hash算法生成消息摘要;

为了防止摘要被人调换, “小服”还会用CA提供的私钥对消息摘要进行加密来形成数字签名;

并且,最后还会把原来没Hash算法之前的信息和数字签名合并在一起,形成数字证书。

当“小客”拿到这份数字证书之后,就会用CA提供的公钥来对数字证书里面的数字签名进行解密得到消息摘要,然后对数字证书里面“小服” 的公钥和个人信息进行Hash得到另一份消息摘要,然后把两份消息摘要进行对比,如果一样,则证明这些东西确实是“小服” 的,否则就不是。

第五回合(完整过程)

上接第四回合场景,这里就用证书来代替公钥

1、“客户”->“服务器”:你好

2、“服务器”->“客户”:你好,我是服务器,这里是我的数字证书        //这里用证书代替了公钥

3、“客户”->“服务器”:向我证明你就是服务器+一段随机数                //这里小客发送消息时一般会带上一段随机数,用来验证身份

4、“服务器”->“客户”:{一个随机字符串}[私钥|RSA]   

 “客户”收到“服务器”的证书后,它会去验证这个数字证书到底是不是“服务器”的,数字证书有没有问题,数字证书如果检查没有问题,就说明数字证书中的公钥确实是“服务器”的。检查数字证书后,“客户”会发送一个随机的字符串给“服务器”让它用私钥去加密,服务器把加密的结果返回给“客户”,“客户”用公钥解密这个返回结果,如果解密结果与之前生成的随机字符串一致,那说明对方确实是私钥的持有者,或者说对方确实是“服务器”。                    

 验证“服务器”的身份后,“客户”生成一个对称加密算法和密钥,用于后面的通信的加密和解密。这个对称加密算法和密钥,“客户”会用公钥加密后发送给“服务器”,别人截获了也没用,因为只有“服务器”手中有可以解密的私钥。这样,后面“服务器”和“客户”就都可以用对称加密算法来加密和解密通信内容了。 

5、“服务器”->“客户”:{OK,已经收到你发来的对称加密算法和密钥!有什么可以帮到你的?}[密钥|对称加密算法]

6、“客户”->“服务器”:{我的帐号是aaa,密码是123,把我的余额的信息发给我看看}[密钥|对称加密算法]

7、“服务器”->“客户”:{你好,你的余额是100元}[密钥|对称加密算法]

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值