公钥 私钥 及签名证书

93 阅读8分钟

面试官问:请你说一下SSL加密协议

答:

图片.png

面试官:

图片.png

有的时候你可能就在面试的过程中面临这种尴尬处境,满脸问号。可以说SSL协议与http共同组成了https协议,在我们网络数据传输安全中是十分重要的,公钥与私钥的使用也是让初学者“闻风丧胆”,相信你看完这篇文章,对其理解能更深一步!

加密和认证

加密: 加密是将数据资料进行加密,即使非法用户获取了加密数据,也无法获取正确的资料内容,重点在于保护数据的安全性

认证: 认证是确定数据的真实发送方,使别人无法伪造或者冒充,需要认证用户的身份,重点在于用户的真实性。

公钥 私钥

概念

公钥和私钥通常用于对称加密和非对称加密,后面我们详细再说

使用公钥和私钥的目的是为了数据的安全传输。

1、发送的数据必须加密,在传输过程中不能被其他人看到

2、必须保证是真实方发送的数据,不是他人伪造或者冒充

【公钥】 公钥是发布出去给别人使用的,可以被很多人获取,用于加密和验签

【私钥】 私钥则是自己持有的,并且不能被其他人知道,必须妥善保管和注意保密,用来解密和签名。

原则

公钥和私钥有下列原则:

  • 密钥成对存在,分为密钥和私钥,一个公钥对应一个私钥,可以相互解密加密

  • 密钥对中,公布出去的是公钥,自己使用且必须妥善保管的是私钥

  • 如果用其中一个密钥加密数据,则只有对应的密钥才能解密

  • 如果用其中一个密钥可以进行解密数据,则该数据必然由对应密钥进行加密

要达到数据安全传输的目的,必须发送方和接收方都持有对方的公钥和自己私钥,即任意一方持有自己的私钥和对方的公钥。

对称加密

对称加密是最开始使用的,也是最容易让人想到的一种方式。对称加密算法是应用较早的加密算法,技术成熟。在对称加密算法中,数据发信方将明文(原始数据)和加密密钥一起经过特殊加密算法处理后,使其变成复杂的加密密文发送出去。收信方收到密文后,若想解读原文,则需要使用加密用过的密钥及相同算法的逆算法对密文进行解密,才能使其恢复成可读明文。在对称加密算法中,使用的密钥只有一个,发收信双方都使用这个密钥对数据进行加密和解密,这就要求解密方事先必须知道加密密钥。

所以在对称加密当中,虽然能保证数据的安全性,以及用户的真实性,且加密速度快,效率高,但是加密密钥的传输就成为了最大的问题,容易被他人截获,安全性难以得到保障,并且每次传输数据的时候都需要使用不同的密钥,在密钥的管理上也成为了使用者最大的困扰。

于是非对称加密横空出世!!!!

图片.png

非对称加密

非对称加密的到来可以说是数据安全传输的福音,那么我们举例说明一下

假设A为发送方,B为接收方,A、B双方都需要有一对公钥和私钥,且将自己的公钥都发布出去。

为了数据的安全性,A需要使用B的公钥来给数据加密,而只有B的私钥可以解密,这样保证了数据的安全性,且为了让B知道确实为A发送的数据,A还需要使用自己的私钥对其加密,也就是签名过程,如果B使用A的公钥进行解密,如果解密成功,则表示A的私钥是正确的,B就完成了对A的身份认证,这就是验签过程。

加密过程

  • B将他的公开密钥传送给A。

  • A用B的公开密钥加密数据,然后传送给B。

  • B用他的私人密钥解密A的数据。

在这个过程当中,A使用B的公钥进行加密,B用自己的私钥进行解密。就算数据被其他人获取,那么没有B的私钥,也是徒劳无功。

认证签名过程

  身份认证和加密就不同了,主要用户鉴别用户的真伪。A想让B知道自己是真实的A,而不是假冒的,因此A只要使用私钥对文件签名,发送给B,B使用A的公钥对文件进行解密,如果可以解密成功,则证明A的私钥是正确的,因而就完成了对A的身份鉴别。整个身份认证的过程如下:

  • A用私钥对文件加密,从而对文件签名,相当于打上了A的指纹。

  • A将签名后的文件传送给B。

  • B用A的公钥解密文件,从而验证签名。

在这个过程中,A使用自己的私钥加密,生成签名,B用A的公钥进行解密。而生产签名方法主要是使用Hash函数对数据生成Hash值,即便数据被他人获取,内容被篡改后,hash值也会发生改变,只要前后hash值无法匹配,则接收方立马知晓数据被篡改,终止传输,从而保证数据的安全性。

具体完整过程发送

  • 首先A用Hash函数对要发送的数据实体生成摘要,得到一串Hash值

  • 然后,A使用私钥对Hash值进行加密,生成数字签名,并将此签名连同要发送的数据实体一起用私钥加密,之后A再用B的公钥对加密后的数据再进行一层加密。

  • B在收到A发送过的数据后,首先用自己的私钥解密,再使用A的公钥进行解密,如果解密成功,则证明数据确实来自A

  • B再对接收到的数据实体进行Hash函数,如果得到的结果和上一步摘要一致,则证明数据实体没有被篡改过。因为当内容改变的时候,Hash值是会发生变化的。由此,数据传输结束。

问题再现

如上,如果C偷偷将B持有的A公钥换成自己的(C)公钥,而B不知道公钥已被替换,那么以后C就可以冒充A给B发送信息,而B相信此信息来自A,那么这样应该怎么整呢?

图片.png

而为了解决这一问题,需要对B持有的A公钥做认证,从而确定此公钥确实是A的公钥,而不是其他人篡改过的!而认证机构必须是第三方可信赖的机构,就是CA,由此发送过程就变成:

A发给B数据的时候,除了要发送签名和数据实体,还要发送CA颁发的数字证书。该证书是由CA特有的私钥进行加密的,保证其内容真实可信,即便C截获了该数据,C想要替换A公钥,就必须先使用CA公钥解封数据,替换之后,由于没有CA私钥,无法对数据进行加密,相当于盒子被拆分,在B接收到数据之后,使用CA的公钥解密,出现不匹配或者的问题,那么也很容易被B发现。

B接收到A发送过来的数据后,首先用CA的公钥解密证书,如果能解密,表明这个证书里的信息可信赖,从而得到证书里A的公钥,然后B再用到后面的A公钥去做下一步动作。如果不能解,则表示信息已经被修改过了。

连环套娃

但是你以为这就安全了吗? 如果C也在CA注册过了数字证书,那么C就拥有了CA颁发的合法数字签名,使用该签名仍然可以替换CA的数字签名,那么照样会凉凉,但是这并不是我们担心的问题,这是CA担心的问题,将权限授予给谁,这是他们该考虑的,否则造成损失,可能就是法庭相见了。

总结

口舌不必多费,直接上图,清晰易懂,

签名.png

签名(1).png

我是小白,如有讲解错误,请指出,谢谢!