通讯链路安全问题探讨_非对称加密

作者简介:橙子哥通讯链路安全问题探讨_加密算法_02,就职于知名互联网企业,5年后台开发。实战经验丰富,涉及游戏、金融、内容创造等领域。


1. 背景介绍

许多的业务场景,会对接到很多合作方,如何实现公网环境下的安全通讯,本文就如何防窃听,防篡改等方面对常用方法做个总结。

2. 防窃听

公网环境下,计算机网络中两个设备做信息交互,任意一个节点都可能被窃听,为了达到“防窃听”的目的,我们一般将通讯的明文为密文,让窃听者拿到一串无意义的信息,从而达到“防窃听”的目的。 

常见的加密算法可以分为两大类对称加密和非对称加密。

2.1 对称加密

即加密和解密的秘钥一致。

通讯链路安全问题探讨_加密算法_03

常见的对称加密算法如下:由于对称加密的加解密密钥相同,所以进行通讯前,双方需要在一个安全的环境下交换密钥,确保密钥没有泄露出去,这就增加了通讯的成本。为了解决这个问题,出现了非对称加密。

通讯链路安全问题探讨_非对称加密_04


2.2 非对称加密

即加密与解密分别用不同的秘钥,一般用于加密的叫“公钥”,用于解密的叫“私钥”。

通讯链路安全问题探讨_加密算法_05

常见的非对称加密算法如下:

通讯链路安全问题探讨_非对称加密_06


  • 公私钥成对存在,由秘钥签发者生成。
  • “公钥”对外公开,任何人都能拿到,发送者用“公钥”对报文做加密。
  • “私钥”是秘钥签发者单独持有,用来对接收到的报文做解密。即使报文被窃听,窃听者没有“私钥”,也无法解密。
  • 非对称加密的方案看起来似乎很完美,但考虑一种情况,发送者S获取接收者R的公钥时,被中间人A替换成A自己生成的公钥,S用A的公钥对报文加密发送给R,密文被A劫持,然后A用自己的私钥解密,篡改报文,然后用接收者R的公钥加密,发给接收者R,实现对报文的非法修改。因此,验证发送者的身份,确保报文的完整性,也非常重要。

3. 防篡改


  • 对报文做摘要,能防止被篡改。发送方对报文原文做加盐hash摘要,把加密原文和摘要一起发送给接收方,接收方解密后,用同样的hash方法计算并比对摘要,就能判断原文是否被篡改。常见的摘要算法如下:
    通讯链路安全问题探讨_对称加密_07
  • 采用比对摘要的方法来确保消息的完整性,有个大前提是hash算法以及盐不被泄露,这又增加了通讯的成本。基于此又演化出了用非对称加密算法加签与验签的方式来确保报文的完整性。
  • 「发送方加签」用发送方自己生成的秘钥对原文加签生成签名,签名与原文一起发送给接收方
  • 「接收方验签」接收方用发送方的公钥对签名解密,与原文做比对,如果一致,则说明报文没有被篡改。
  • 私钥加签,公钥验签,这样就能确保只有私钥持有者也就是发送者能合法发送数据。
  • 为了方便比对,一般会先对原文做一次摘要,如图所示:「加签」

通讯链路安全问题探讨_非对称加密_08        验签」

通讯链路安全问题探讨_非对称加密_09

4. 实践中常用方案介绍


  • 对称加密的安全性较低,但其加解密效率较高;非对称加密的安全性较高,但其加解密效率较低。

  • 实际应用中,一般会结合两种加密方式,兼顾两者的优点。一般用非对称加密的公钥来加密对称加密算法的密钥,开始数据传输前,先交换非对称加密的公钥,然后交换对称加密的密钥密文,然后再开始数据的传输。这样就能利用非对称加密的安全性,又能利用对称加密的效率,兼顾安全与效率。


大致流程如下所示(以server端向client单向发送数据为例,双向的可类比):

SequenceDiagram


通讯链路安全问题探讨_对称加密_10




5. https安全套件介绍

敬请期待,后续分享。