近况
最近在弄公司上的事情,需求不确定搞得代码改来改去的,没有太多自己学习的时间,
今天聊的加密和认证还是看网课中学习到的,之前有写过数据加密的文章,但那篇只是一些基本概念
也没有扩展去聊整个加密解密过程,也没有聊数字签名,数字证书之类的东西,今天就都记录一下吧
以后忘记了,回来再看也方便
本篇文章目录
基本概念
对称加密
对称加密就是双方使用同一个密钥进行加解密,对称加密的算法有DES,AES等等,
常用算法使用AES,比DES更安全,加解密速度更高效,对称加密相比于非对称加密来说,加解密的速度要快
适合处理大数据量的加解密,然而缺点是在数据传输之前,接收方要知道发送方用于发送加密数据所用到的密钥。
但是现实条件是一般不会把密钥手把手的交给对方,所以就要用到非对称加密算法了。
当然对称加密缺点远不止这些,还包括身份认证,数据完整性等等,关于安全数据传输的基本要求之后下面再说非对称加密
非对称加密的特点就是发送方和接收方都各自拥有一套密钥,分别为公钥和私钥,公钥可以让其他人获得,
而私钥则只能自己使用,常用的非对称加密算法就是RSA了,非对称加密有两个应用场景:加密场景
发送方用公钥给数据进行加密,然后把加密后的数据发送到接收方,然后接收方用对应的私钥解密,
因为只有接收方的私钥才能解析数据,所以即使被第三方窃取到数据也没有关系。这个模式叫做加密模式。
在这个过程中如何保证数据的完整性,保证数据是发送方发送的数据,而不是被第三方篡改后的数据。
这时就要用到数字签名,数字签名在后面会聊~认证场景
认证指的是接收方要确定是数据是发送方发送的,认证发送方的身份,而不是其他人冒充发送方发送数据
同时认证也有另一个功能,即既然发送方确实发送了这条数据,没办法否认自己没有发送过数据。认证具体流程是:发送方用私钥加密数据,给接收方发送数据,接收方用公钥解密,因为私钥是唯一的,
所以只要数据解析成功就可以知道数据发送方是谁。与加密场景不同,认证场景突出的是明确对方而不是加密功能。
摘要算法
摘要算法就是hash算法了,常用的就是MD5了,摘要算法的特点就是不管多少数据,摘要算法总能得到一个固定长度的字符串
一旦数据被更改后,再通过摘要算法计算后就会得到完全不同的字符串了,所以摘要算法的作用是:检测数据有没有被更改。数字签名
用户A将待发送的信息原文经散列函数运算生成摘要信息,并用自己的私有密钥对摘要信息进行加密,
将形成的密文和原文传送给用户B。用户B接收到密文后,使用A的公开密钥验证密文,得到摘要信息,
并按照约定的摘要算法对原文进行摘要运算,再将两个摘要值进行比对,一致则表明数据未被篡改。数字签名实现了用户的身份认证,保证了数据在传输过程中的完整性、和交易的不可否认性;但是,
任何拥有发送方公开密钥的人都可以验证数字签名的正确性,因此无法保证数据的机密性数字证书
在使用非对称加解密的场景中,我们一直使用了这样一个假设,就是接收方或者发送方所持有的、对方的公钥总是正确的(确实是对方公布的)。而实际上除非对方手把手将公钥交给我们,否则如果不采取措施,双方在网络中传递公钥时,一样有可能被篡改。
那么怎样解决这个问题呢?
这时就需要证书机制了:可以引入一个公正的第三方,当某一方想要发布公钥时,它将自身的身份信息及公钥提交给这个第三方,
第三方对其身份进行证实,如果没有问题,则将其信息和公钥打包成为证书(Certificate)。而这个公正的第三方,
就是常说的证书颁发机构(Certificate Authority)。当我们需要获取公钥时,只需要获得其证书,然后从中提取出公钥就可以了。总结就一句话:数字证书帮助我们检查对方的公钥是正确的安全的。关于数字证书的加解密流程在下方推荐文章中有更详细的描述。
加密认证执行流程
要满足数据传输的安全需要满足以下几点:
- 消息的发送方能够确定消息只有预期的接收方可以解密(不保证第三方无法获得,但保证第三方无法解密)。
- 消息的接收方可以确定消息是由谁发送的(消息的接收方可以确定消息的发送方)。
- 消息的接收方可以确定消息在途中没有被篡改过(必须确认消息的完整性)。
第一点说的是不管是使用对称加密还是非对称加密,对方都必须拿到我的密钥或者公钥,那么单纯只使用
对称或非对称其实无法完成这一点的,因为密钥或公钥在传输的时候很容易被其他人获取,所以这就是数字证书的作用了
第二点说的是消息的接收方可以确定消息的发送方,这是数字签名的作用,发送方用私钥为摘要数据签名,
当接收方使用发送方的公钥能解密就表明,确定是发送方发送的,因为私钥只有发送方拥有。
第三点说的是必须确定消息的完整性,这一点是摘要算法的功能了,MD5加密的作用就是检查数据完整性
综上来看,加密和认证在整个数据传输安全方面都是不可或缺的,缺少一个都不能满足传输安全需求
下面来看看具体的加密认证的执行流程吧,假设A是发送方,B是接受方,下面是AB具体行为:
A的行为:
- A把信息原文进行哈希运算,得到信息的数字摘要
- A用自己私钥,采用非对称加密算法,对数字摘要进行加密,得到数字签名
- A用对称算法的密钥,采用对称算法,对信息原文和数字签名和A的公钥一起加密,得到加密信息
- A用B的公钥,采用非对称算法,把对称密钥加密,形成信封。就像是对称密钥装到了B公钥加密的信封里面
- A把加密信息和数字信封一起发给B
B的行为:
- B收到数字信息,用自己的私钥解密信封,拿到对称密钥
- B用对称密钥,把加密信息解密,得到信息原文和数字签名和A的公钥
- B用A的公钥解密数字签名,得到数字摘要1
- B将原文用同样的哈希算法,得到数字摘要2
- 将摘要1和摘要2对比。如果相等,则原文没有被修改,签名是真实的
图解:

注意:这两张图讲述的加密过程很类似,加密过程中将对称加密和非对称加密都使用到了,但是少了一个关键过程
那就是数字证书的认证,在执行上述过程之前,接收方和发送方都要去数字证书组织CA那里下载对方的数字证书
然后使用CA的公钥解密数字证书,如果解密成功则拿到通信对方的公钥,这个公钥是安全的,可以放心使用,
如果解密失败,或者下载不了对方的数字证书,则双方是无法安全通信的。
文章推荐