加密、签名、证书的区别和使用

前言:

在实际开发的过程中,我们经常会用到一些安全加密的手段,通常会用到加密、签名、证书等等
而当提及他们的作用与区别时候,我们可能并不是十分理解。
作者在最近的工作中也遇到了相关的需求,在查阅了相关的资料之后,觉得有必要做一些整理,留作日后查阅之用;也希望后来者读到这篇文章时能有所收获。

正文:

通常,我们认为满足信息安全三要素,即可保证数据传输的安全。
信息安全三要素(CIA Triad)是指:

  • 保密性(Confidentiality)
  • 完整性(Integrity)
  • 有效性(Availability)

保密性:是指客户端/服务端对请求或响应进行了加密,即使数据被黑客拦截,获得的也是加密后的密文,无法获得数据真实表达的讯息。(但是如果我们的网站是已经实现了https,那么我们就不必再手动加密了)
完整性:假设原报文原来的内容是10000,我们对报文进行加密,但黑客删除了部分加密后的报文,解密后报文变成了1000,这就破坏了完整性,会影响数据真实想表达的含义。
有效性:以非对称加密为例,假设黑客十分强大,偷换了服务器给客户端下发的公钥,之后又拦截了客户端所有的请求转发到黑客自己的服务器上,那么客户端后续所有的解密所使用的公钥是黑客伪造的,所有获得的数据也只是黑客伪造的;

我们以加密、签名、证书作为主题,结合三要素展开分析。

加密:

概述:加密分为对称加密和非对称加密,非对称加密是指加密使用的密钥与解密使用的密钥不相同,一般适用于对比较简短的数据加密(随着数据量增大加解密效率降低),对称加密是指加密和解密使用的密钥相同,一般适用于数据量比较大的数据,非对称加密相对于对称加密更加安全。实际开发中,对称加密与非对称加密经常组合使用。

作用:对数据进行加密,保证了数据的保密性

对三要素的影响

  • 保密性:保证了保密性
  • 完整性:无法保证完整性
  • 有效性:无法判断是否真实可靠

签名:

概述:签名的目的是保证数据的完整性;签名的原理是服务器将数据进行hash,hash的目的是原数据可能过长,而经过hash后的数据会非常短,更适合非对称加密。且hash的无序性和不可逆性可以保证数据是没有经过篡改的。(我们将经过hash的数据称之为摘要);

然后再将hash后的摘要进行非对称加密(加密后生成的就是所谓的签名了),同原数据一起传输;

客户端通过公钥解开签名,获取摘要(也就是hash后的数据),再将原数据进行hash,比较二者是否相同,即可判断数据是否被篡改。

作用:通过比较摘要,保证了数据的完整性

对三要素的影响

  • 保密性:由于数据是不加密的,因此无法保证数据的保密性
  • 完整性:保证了完整性
  • 有效性:无法判断是否真实可靠

证书:

概述: 证书的本质其实也是非对称加密,原理是服务器先向CA中心申请一个私钥,将服务器想要传输的数据通过CA中心发布的私钥加密;

而客户端需要获得CA中心发布的证书(本质是附带着公钥和各种证书信息的文件,许多证书在安装系统时就会自带),使用CA中心发布的证书中携带的公钥去解开服务器传来的加密数据。(在实际开发中证书也可以用私下下发公钥的形式实现,即服务端预先生成一组公私钥,将公钥在客户端的代码中写死,即可达到证书的作用)

作用:证明了来源是合法的

对三要素的影响

  • 保密性:无法保证保密性
  • 完整性:无法保证完整性
  • 有效性:可以保证真实可靠

结论:

我们可以看出
加密对应的是保证保密性,签名对应的是保证完整性,证书对应的是有效性,缺一不可。

由此我们可以得出结论
如果对数据进行了加密,签名,证书验证,理论上就可以保证数据传输的安全。

实现请求,响应全加密(RSA+AES)+签名的整体流程(证书由https实现不做赘述):

实现过程
1、服务端生成数据加解密所需的公钥和私钥
2、客户端首先像服务端发起请求获取公钥
3、客户端生成AES密钥,对报文体进行AES加密,对AES密钥进行RSA加密,将加密后的AES密钥存入请求头,向服务器发送请求(发送内容为:RSA加密后的AES的密钥、AES加密后的报文)
4、服务端收到请求,通过私钥解开请求头中的AES密钥,再使用AES密钥解开报文,获取客户端请求所携带的数据
5、服务端准备好响应数据,对响应数据通过客户端发来的AES密钥加密(获得AES加密后的数据)
6、服务端准备好响应数据,进行hash获得摘要(hash的目的是缩减所需加密的数据大小),通过第一步生成的私钥对摘要进行加密,获取签名;
7、将第5步获得的AES加密后的响应数据和第6步获得的签名一起发送给客户端
8、客户端使用步骤2获得的公钥将服务端发来的签名进行解密获得摘要
9、客户端使用步骤2获得的公钥将服务端发来的数据进行解密获得服务端返回的明文数据
10、最后将明文数据hash后,与步骤8获得的摘要进行比较,若一致则确保了数据的完整性

结尾:

另外推荐两篇相关文章
一图文看懂公钥私钥
什么是数字签名和证书?

如果对你有所帮助,希望给我一个小小的赞。
如有不当之处,敬请指正,万分感谢!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值