使用安全算法保障数据传输的安全性

一. 前言

  在互联网中,安全技术不可或缺

二. 哈希函数

  哈希函数可以把给定的数据转成固定长度无规律数值(称为“哈希值”,多用十六进制来表示)。转换后的无规律数值可以作为数据摘要应用于各种场景。
  特征1:无论输入数据多大,输出哈希值数据长度不变。
  特征2:如果输入数据相同,输出的哈希值也必定相同。
  特征3:即使输入的两个数据相似,输出的哈希值也会有很大差异。
  特征4:即使输入的两个数据完全不同,输出的哈希值也有可能是相同的,这种情况概率较低,称为“哈希冲突”。
  特征5:不能根据哈希值逆推出原本数据(输入输出不可逆)。
  特征6:哈希值的计算相对容易,计算速度较快。

  常见哈希函数算法:MD5、SHA-1、SHA-2等,MD5和SHA-1存在安全隐患,推荐使用SHA-2

三. 共享秘钥加密(对称加密)

  共享秘钥加密是加密和解密都是使用相同秘钥的加密方式。由于使用的秘钥相同,也称为“对称加密”。
  常用的对称加密算法有AES、DES等,其中AES应用较为广泛。

  解决数据传输安全问题part1:
  当A想要向B发送数据,使用秘钥M加密之后,即使被C窃听,C也不知道传输的数据是什么,因为C没有秘钥无法解密。但是如果A和B无法直接沟通,A如何能让B拿到秘钥呢?假如A也是通过互联网向B发送秘钥,那么秘钥也是会存在被C窃听的风险。怎么解决这个问题:A是不是要考虑吧秘钥M也加密以下(如果再使用对称加密会导致无法把加密M的秘钥传输给B)?那应该怎么加密呢?请看–非对称加密。
在这里插入图片描述

四. 公开秘钥加密(非对称加密)

  公开对称加密锁加密和解密使用不同的秘钥。由于秘钥不同,所以这种算法也称为“非对称加密”。可以公开给大家使用的叫“公钥”,只能自己知道的秘钥称为“私钥”。在这里,我们暂且称公钥为PublicKey,私钥为PrivateKey。
  如果用公钥加密,私钥可以进行解密。如果用私钥加密,公钥也可以进行解密。
  非对称加密算法有RSA算法、椭圆曲线加密算法等,使用较为广泛的是RSA算法。

  解决数据传输安全问题part2:
  上一个问题我们提到,A如何把对称加密秘钥M传给B,如果通过互联网传给B,则秘钥M也可能会被C窃听到,怎么解决这个问题?
  B可以事先生成一个非对称加密秘钥对,PrivateKey自己保存好,PublicKey以安全的方式公布出去让A知道(比如官网公布公钥等),让A使用PublicKey对秘钥M进行加密,再把加密后的秘钥M和使用秘钥M对称加密的密文传给B,因为PrivateKey只有B有,所以只有B能解密并拿到秘钥M,然后再使用秘钥M对密文进行解密,最终拿到数据。(这个时候有同学要问了:为什么不直接用PublicKey直接对密文加密?因为非对称加密解密耗时长,不适用于较大数据的加密解密。)
  嗯,终于解决了数据传输安全问题。松了一口气,,,但是,问题真的结束了吗?想一想,假如A在传递密文给B的时候,C截获到了信息,并把密文进行篡改。这样一来,B解密后的数据就不是原本的数据了。那么后果可想而知。怎么解决这个问题,如何保证数据没有被篡改?请看–数字签名。
在这里插入图片描述

五. 数字签名

  数字签名可以防篡改,还可以预防事后否认。

  解决数据传输安全问题part3:
  继续上一个问题,我们如何保证数据不被篡改?首先,在非对称加密算法中我已经提到:如果用公钥加密,私钥可以进行解密。如果用私钥加密,公钥也可以进行解密。之前我们是使用公钥加密,私钥解密。假如我们使用私钥加密,公钥解密,是不是就能完美解决这个问题?
  A准备一个非对称加密秘钥对,A把PublicKey公布出去,所有人都可以安全的拿到A的PublicKey。A在发送信息前,先对正文进行摘要算法生成信息摘要并使用PrivateKey对信息摘要进行私钥加密形成签名。然后把使用B的PublicKey加密过的对称秘钥和密文,以及A的签名发送给B。
  B接收到数据后,先使用A的公钥对签名进行解密,如果解密成功,说明这条信息是A发来的(实现预防事后否认)。接着使用相同的摘要算法对解密后的正文生成信息摘要,把生成的信息摘要和传过来的信息摘要进行对比,如果一致,说明密文没被串改过(实现防篡改)。当确认密文没被篡改,则可以说明数据是安全的。
在这里插入图片描述

  这样一来,应该舒服了吧。。。。嗯,如果能保证公钥的正确性,安全性应该是较高的。但是如果无法保证公钥的发送者,导致公钥被恶意替换,还是会有安全隐患。

六. 数字证书

  数字证书能够保证公钥的准确性。
  场景目标:A想把自己的公钥发送给B
  1.A要先向认证中心(管理数字证书的组织机构,建议在经过政府审查的大型企业机构申请数字证书,这样的机构令人放心)申请发行证书。
  2.认证中心也有自己的公钥和私钥
  3.A将自己的公钥和包含邮箱信息的个人资料发给认证中心。
  4.认证中心对收到的资料进行确认,判断其是否为A本人的资料。确认完毕后认证中心使用自己的私钥根据A的资料生成数据签名。
  5.认证中心将生成的数据签名和资料放进同一个文件中并把文件发送给A。这个文件就是A的数字证书。
  6.当数据交互时,A将数字证书发给B,B收到证书后用认证中心的公钥解密后验证签名。如果能解密,说明证书确实是认证中心发放的。那么,就可以从证书中取出A的公钥了,保证了A的公钥的准确性。

七. 总结

  看到这里,一定会有很多朋友感到头皮发麻,为了保证数据的安全,我们需要做那么多事情,那么代码到底怎么写?感觉好麻烦。。。而且细细去想,可能还是会有一丝丝的漏洞,瞬间感到背后发凉。
  其实一般情况下不需要我们自己去写这些加密解密的代码,只要我们购买SSL证书,使用HTTPS协议即可。(点击了解HTTPS简介和认证流程).
  
  
  
  

原创文章 7 获赞 0 访问量 380

猜你喜欢

转载自blog.csdn.net/qq_33101689/article/details/105771210