刘刚刚的个人博客

数据传输中的安全算法

创建时间:2021-07-08 23:48:35
更新时间:2021-07-08 23:48:35

本文主要介绍了常见的加密方式及CA在认证种扮演的角色。加密可以解决窃听问题,认证码可以解决篡改问题,数字签名可以解决事后否认,数字证书可以解决假冒问题。

数据传输过程面临的安全问题

  1. 窃听
  2. 假冒
  3. 篡改
  4. 事后否认

常见的加密方式

共享密钥加密

共享密钥加密一般使用对称加密,加密和当双方需要进行通讯时,通过如下步骤进行:

1. 先进行共享密钥的传输
2. 后续发送者发送消息前先对消息进行加密,接收者在收到密钥信息后先用密钥进行解密

方法的缺点:

共享密钥的传输过程不安全,如果有第三方在密钥传输时就进行监听会导致密钥泄露。

公开密钥加密

公开密钥加密一般使用非对称加密,加密用的密钥叫‘公钥’,解密用的密钥叫‘私钥’。常用的算法为:RAS算法、椭圆曲线加密算法。一般通过如下步骤进行通讯:

假如有A、B两个用户,A需要给B发送数据,那么:

  1. B先生产公钥和私钥,将公钥发送给A
  2. A收到公钥后,将消息进行加密,然后发送给B
  3. B收到消息,使用私钥进行解密,即可获得消息。

存在的问题:

  1. 解密时速度较慢
  2. 如果通讯时消息被第三方C监听,那么C可以对数据进行篡改,发起中间人攻击。中间人的攻击方式如下:

    1. 在B给A发送公钥时,C也生成一对公钥和私钥,将B的公钥替换为自己的公钥。
    2. 在A给B发送消息时,A使用了C的公钥,此时C截取到A的消息,可以使用自己的私钥进行解密,解密完后,(修改消息或者直接将原文)再使用B的密钥对消息加密,发送给B
    3. 此时,B接受到的消息已经时被C篡改或者窃听过的消息。
tip:

公开密钥加密最主要的问题是,A收到公钥后,无法确认收到的是否为B的公钥。

混合加密

混合加密是为了解决公开密钥加密时,如果通讯数据较多导致速度较慢的问题。在混合加密中,先使用公开密钥加密的方式来传输共享密钥,然后使用共享密钥来通讯,主要步骤如下:

如果A准备给B发送消息,那么:

  1. B先生成公开密钥加密的密钥对,将公钥发送给A
  2. A生成共享密钥,使用B的公钥对共享密钥进行加密,然后发送给B
  3. B使用私钥对含有共享密钥的信息进行解密,获取到共享密钥
  4. A、B直接使用共享密钥进行加密
tip:

混合加密提高了安全与速度,但由于使用了公开密钥,仍然存在中间人攻击的问题。

迪菲赫尔曼密钥交换

迪菲赫尔曼密钥交换主要使用了 离散对数问题这个数学难题来进行。内容如下:

假如存在这么一种算法,满足以下条件:

  1. 密钥之间可以合成,并且合成的结果可以继续合成
  2. 最后的结果与合成的顺序无关,只与参与合成的内容有关
  3. 合成之后的密钥无法分解出来合成的元素

即:

  1. 如果存在 A,B,C 三个元素,如果先用A,B合成密钥,将结果再与C合成,得到结果 A-B-C
  2. 如果先用B,C合成密钥,将结果再与A合成,得到结果 B-C-A
  3. A-B-C 与 B-C-A的结果相同
  4. A-B-C分解不成 A-B,C两个元素

那么,我们可以使用这种算法来进行密钥的交换。

假设A要给B发送消息,那么:

  1. A生成一个密钥P,发送给B,
  2. B生成一个密钥B1,与P进行合成,生成P-B1,将P-B1发送给A
  3. A生成一个密钥A1,与P进行合成,生成P-A1,将P-A1发送给B
  4. A将收到的P-B1与A1进行合成,得到 P-B1-A1
  5. B将收到的P-A1与B1进行合成,得到 P-A1-B1
  6. P-B1-A1与P-A1-B1结果相同,后续消息通过该密钥进行加密即可。

该方案的好处:如果存在第三方窃听,那么即使获取到传输种的信息也无法生成密钥P-B1-A1和P-A1-B1。

问题:如果出现中间人攻击,来对数据进行伪造,还是会出现问题。

待补充:迪菲赫尔曼密钥交换的算法内容

消息认证码

消息认证码主要用来解决消息在传输过程中被篡改的问题,假设我们的密钥在交换过程中并没有发生中间人攻击的情况,后续在消息传递过程中使用密文传输信息,第三方虽然虽然没有破解密文消息,但是通过修改密文的一些字符,会导致接收方解密出来的非发送方的消息。这些解析出来的有可能是没有任何意义的文字,也可能刚好修改了消息的意思,此时,我们可以使用消息认证码来防止消息在传递过程中被篡改。使用消息认证码的方式如下:

如果A要给B发送一条消息:

  1. A和B先通过密钥交换的方式来交互密钥
  2. A在发消息时,使用密钥对消息加密,获得密文,同时通过哈希方式,来计算出密文和密钥的哈希值mac,然后将密文和mac一块发送给B
  3. B接受到消息后,将密文和自己的密钥通过哈希的方式计算mac是否与A发送过来的一样,如果一样则代表信息内容未被修改。否则,丢弃该消息。

存在的问题:

  1. 中间人攻击
  2. A和B都可以对消息生成mac,如果A发了消息,但说不是自己发的。那么无法判断消息是否为A所发

数字签名

数字签名可以解决消息认证码中不能判断消息发送方身份的问题,数字签名在签名时使用了公开密钥加密的方式,但其将公钥与私钥进行了调换,即数字签名的私钥可以用来加密,而公钥可以用来解密。其步骤如下:

假如A要给B发送消息,并已经交换过共享密钥,那么:

  1. A将消息体使用共享密钥进行加密,并生成mac值,A通过非对称加密的方式,生成一对密钥,使用私钥对mac进行加密,然后将消息发送给B
  2. B收到消息后,通过A的公钥解密mac,然后再对比消息,

存在的问题:

A有可能会是冒充的,生成的公钥是第三方仿冒生成的,而非A发出的。

数字证书

数字证书可以解决,公钥被冒充的第三方伪造的问题,同时也解决了公开密钥加密中的不安全的问题。流程如下:

假如A要给B发送消息:

  1. A先自己生成一份公钥或者私钥,将自己的信息(比如:网址或者邮件,公钥)发送给认证机构。
  2. 认证机构提前准备好的公钥和私钥,用私钥将用户的信息加密生成签名,然后将签名发送给A
  3. A将自己的公钥及签名信息发送给B
  4. B通过认证机构的公钥判断签名是否为A的真实签名,如果是,则接受。

tip:

  1. 认证机构的证书由更高级的认证机构签名,最高级的认证机构的证书(其内含公钥)一般已经内置在操作系统中。

想到的一些问题

  1. 根认证中心如何验证自身?

    微软会将经过组织认证的根认证中心的证书内置在操作系统种,需要再去请求。

  2. 什么时候需要消息认证码或者数字签名

    当需要保证信息的安全或者防止事后否认时使用,比如:在区块链的转账中,就用到了签名。

  3. 为什么不使用赫尔曼密钥交换技术而使用ssl

    容易受到中间人攻击

  4. https属于混合加密,还是?

    属于混合加密

  5. md5,sha-1,sha-2的区别

    效率比较:md5 < sha-1 < sha-2

    安全性比较:md5 > sha-1 > sha-2

    md5有撞库的风险,且有被破解的风险

    sha1 为160位,谷歌在2017年通过不同的文件生成了两个相同的sha-1

    sha2 有多种位数,常用的是256位。目前的ssl证书采用的即为sha2

我的名片

昵称:shuta

职业:后台开发(python、php)

邮箱:648949076@qq.com

站点信息

建站时间: 2020/2/19
网站程序: ANTD PRO VUE + TP6.0
晋ICP备18007778号