文章目录
0. 前言
此文章只是本人的自己的猜测,我自己的理解。可能有很多错的地方,希望多多指正。
1. 场景介绍
有这么一个场景:
角色
: 发送方,接收方消息
: 给小刘 转100w。
意思是这样:发送方要给接收方发一个消息,那么这个消息的内容为:“给小刘转100万”
2. 使用明文传输
那么使用明文在网络上传输,那么必定会造成安全方面的问题。比如有一个人–小张,他截获了这个消息,并把这个消息改为:“给小张转100万”。如下图
那么造成了什么问题呢?
很显然:小刘并没有获得钱。发送方也白给了100w。
3. 使用对称加密
3.1 什么是对称加密?
加密系统的 加密密钥和解密密钥相同,或者虽然不同,但从其中的任意一个可以很容易地推导出另一个。
3.2 问题的解决
上面的问题主要是使用明文进行传输,所以接收者可以接获到消息并进行修改,所以我们可以将消息进行加密,之后再进行发送,如图:
3.3 产生的新问题
那么又带来一个问题,那么这个密文解密的密钥如何告诉接收方呢?
如果你将解密的密钥传过去,万一让攻击者再次截获,那么他就可以使用此密钥对消息进行解密,然后将消息进行更改,在使用此密钥进行加密重新发送给接收方。那么在此种情况下,接收方也是不会发现的。
4. 使用非对称加密
4.1 什么是非对称加密?
非对称加密体制又称公钥密码体制:创建两个密钥,一个作为公钥,另外一个作为私钥。私钥由密钥拥有人个人保管,公钥和加密算法可以公开。用公钥加密的数据只有私钥才能解开,同样,用私钥加密的数据也只能用公钥才能解开。
4.2 问题的解决
发送方使用接收方的公钥进行加密之后进行发送。由于使用的是接收方的公钥对消息进行加密的,那么只能使用接收方的私钥进行解密,再由于接收方的私钥只有接收方才有,所以按照此思想来想,信息是不会被别人修改和窃取的。如图:
4.3 产生的新问题
看上面的陈述,好像是完美的不行。。。。
那么其实有一个问题,上面的图中并没有给出。那么此问题是什么呢?
这个问题就是:接收方的公钥是如何获得?
直接从接收方进行获取?那么必然会产生一个问题,那么在向接收方获取公钥的时候,攻击者可以拦截到消息,并将此公钥切换成攻击者的公钥。
接收方拿到的是攻击者的公钥,那么使用此公钥进行加密,之后攻击者拦截到此消息,自然可以使用自己的私钥进行解密,这样可以顺理成章的拿到消息并改写,之后在使用接收方的公钥进行加密 再发送给接收方。
此时接收方拿到消息,依旧可以使用自己的私钥进行解密,获得消息。那么此时接收方获得的消息已经是攻击者进行篡改之后的消息了。阐述如图所示:
5. 使用数字证书
5.1 什么是数字证书
数字证书(Digital Certificate)
又称为数字标识(Digital ID),提供一种在Internet上验证身份的方式,用来标识和证明网络通信双方身份的数字信息文件。其由第三方机构即CA中心签发。
ITU的X.509数字证书包含如下的内容:
- 证书的版本号
- 证书的序列号
- 证书所使用的签名算法标识符
- 证书的发行机构名称
- 证书的有效期
- 证书所有人的名称
- 证书所有人的公开密钥及相关参数
- 证书发行机构ID
- 证书所有人ID
- 扩展域
- 证书发行机构对证书的签名
5.2 什么是CA?
CA(Certificate Authority,认证中心)
作为权威的、可信赖的、公正的第三方机构,专门负责发放并管理所有参与网上交易的实体所需的数字证书。其主要职责如下:
- 颁发证书;
- 管理证书;
- 用户管理;
- 吊销证书;
- 验证申请者信息;
- 保护证书服务器;
- 保护CA私钥和用户私钥;
- 审计和日志检查。
5.3 问题的解决
上面的问题主要是因为 获得的公钥不知道其身份,那么数字证书解决了这一个问题。数组证书中含有公钥,并且也含有一些确定身份的一些主要信息。那么我们拿到了数组证书,也就却道了公钥的身份。也就可以放心的使用对应的公钥进行加密了。
那么势必会产生这么一个问题:那么怎么确定数字证书的真伪呢?
其实因为数字证书是由CA 颁发的,上面有CA的签名,因为签名是CA使用其私钥进行的。所以我们使用CA的公钥,对签名进行验证,就可以知道证书的真伪了。那么所有的问题也就迎刃而解了。
那么其过程如图:
6. 关于数字签名
6.1 什么是数字签名?
与人们手写签名的作用一样,数字签名系统向通信双方提供服务,使得A向B发送签名的消息P,以便达到:
-
接收方可以验证消息P确实来源于 发送方(P使用 发送方 的私钥加密);
-
发送方 以后不能否认发送过P;
-
接收方 不能编造或改变消息P。
在上面5节的阐述中,只是保证了安全的传输,但是没有讲过接收方的事儿,那么接收方会有什们问题呢?
很显然,接收方无法验证接收的消息是否来自于发送方。那么就涉及到了数字签名。
通俗来讲,数字签名就是:发送方把消息签名**(使用自己的私钥加密)** ,再将签名后的消息使用 接收方的公钥进行加密并传送。那么接收方接收到消息,使用自己的私钥进行解密,获得消息之后,在使用发送方的公钥进行签名的验证,如果通过,则可以证明是发送方发送的消息。发送方就无法抵赖了,因为这个消息的签名我用你的公钥进行验证,通过了,那么这个消息就是发送方发的,所以发送方是无法抵赖的。
7. 总结
其实也没什么要说的。。。。。。。。。。。。快乐生活每一天。