计算机系统学习之(7):密码学概述(2)各种不同的加密算法的作用和原理;如何保证信息传输过程的完整性;如何验证信息发送方的身份

  • 密码学要解决的问题:
    • 传输的私密性
    • 信息的完整性
    • 信息发送方身份的认证

传输的私密性

  • 这一类问题通过加密和解密传输的内容来保证传输内容不会被除传输和指定接收方以外的其他人知道
  • 解决问题的思路有:
    • 通过共同的秘钥 secret key 进行对称加密:
      • 优点:方便快捷、适合传输大规模的文件和数据
      • 缺点:安全性不高,因为秘钥分发的过程存在安全隐患
    • 通过公钥私钥对 public/private key pair 来实现非对称加密:
      • 传信方通过收信方的公钥来加密文件,然后收信方用自己的私钥来解密文件
      • 优点:安全性高,不需要考虑交换秘钥的问题
      • 缺点:操作较为复杂,不适合大规模的数据和文件传输
    • 对称 + 非对称联合加密的方式:
      • 通过非对称的方式安全地传输秘钥 secret key,然后通过秘钥实现对称加密。
      • 保证了秘钥分发过程的安全,而且还能传输大规模的数据和文件

传输的完整性 & 身份认证

  • 很多时候我们传输的信息并不需要加密,我们只想保证接收到的数据是对的,是完整的。但是 hacker 可能在中途截获数据并篡改,导致我们接收的数据是错误的,因此如何保证我们的信息不被篡改呢?或者说如何保证我们接收到的信息是正确的完整的。
  • A 向 B 发一段信息 m,我们希望中途不要被篡改,或者假使经过篡改,我们希望能够识别出被篡改过的文件,这样我们最起码可以进行防御。

篡改:A 发送给 B 的过程中,hacker 将 A 的信息截获,经过修改原文或者直接更换原来的信息后发送给 B

  • 这个过程有两中主要的解决思路:

    • 第一种方式:使用 H a s h Hash Hash 函数的方法添加对信息的校验:
      • A 想发送 m m m B B B,不只是将 m m m 发送给 B B B, 还需要发送一个由 m m m 生成的唯一 h a s h hash hash 值,即 H ( m ) H(m) H(m),将 ( m , H ( m ) ) (m, H(m)) (m,H(m)) 一起打包发送出去,接收方接收了之后,通过相同的 Hash 算法,对 m m m 进行操作,得到 H ( m ) ′ H(m)^{'} H(m) 如果 H ( m ) = H ( m ) ′ H(m) = H(m)^{'} H(m)=H(m) 则保证接收到的 m 信息是完整的。
      • 但是很显然这个过程并不安全,hacker 可以截获到信息之后,把 m 更改成 n 然后附带一个 H(n) 来迷惑接收方,这样接收方依然会被蒙在鼓里。那么如何解决这个问题呢?
        • 这个时候就要使用到 private key 对这个 h a s h hash hash 的过程进行限制了,限制的方法如下:
          • A 将 m m m 产生 H ( m ) H(m) H(m),然后将 H ( m ) H(m) H(m) 通过私钥 private key 进行加密然后和 m m m 一起发送给接收方,整个过程如下:

          A A A c i p h e r T e x t = ( m , E n c r y p t ( P r i v _ a , H ( m ) ) ) cipherText = (m, Encrypt(Priv\_a, H(m))) cipherText=(m,Encrypt(Priv_a,H(m)))
          B B B 接收到文件之后,通过 A A A 的公钥对 A A A 的身份进行验证,验证确实是 A A A 发送的信息,而不是别人在过程中对信息发生了替换,即: D e c r y p t ( P u b _ a , H ( m ) ) Decrypt(Pub\_a, H(m)) Decrypt(Pub_a,H(m)) 得到 H ( m ) H(m) H(m) 再通过 m m m 生成 H ( m ) ′ H(m)^{'} H(m) 判断 H ( m ) H(m) H(m) 是否等于 H ( m ) ′ H(m)^{'} H(m),其实这个方式就是将数字签名和 hash 的过程联系到一起。

    • 第二种方式:单纯使用数字签名的方式来保证接收方接收到的数据是完整的:
      • 对于信息 m m m,A 通过自己的私钥 privarte key 进行处理(这个过程叫做签名);接收方得到数据后通过 A A A 的公钥 public key 处理得到 m m m,由于 A A A 的私钥只有自己持有,因此能够保证在发送的过程中一般不会出现被篡改的情况。用公式表示如下:

      A 通过私钥签名 T e x t = S i g n ( P r i v _ a , m ) Text = Sign(Priv\_a, m) Text=Sign(Priv_a,m) 然后发送给 B B B
      B B B 通过 A A A 的公钥解密 m = D e c r y p t ( P u b _ a , T e x t ) m = Decrypt(Pub\_a, Text) m=Decrypt(Pub_a,Text)

  • 上面两种思路,如果总结一下可以看到:

    • 单纯的 HASH 操作可以保证数据的完整性,但是不能够保证发送方的身份
    • 单纯的数字签名既可以保证数据的完整性,也可以保证发送方的身份,但是由于采用的是非对称的方式进行签名,所以对于大规模的数据依然不具备可实现性。
    • 因此我们再一次要想办法来结合这两种方式以实现数据的完整性和发送方的认证。
  • 如果想在保证完整性和身份认证的情况下可以传输大规模的数据,可以采用两种技术:

    • MAC (消息认证码)
    • 数字签名 H A S H HASH HASH

数字签名 HASH

  • 数字签名 H A S H HASH HASH 我们已经在上文中提到了:因为单纯的 h a s h hash hash 不能够鉴别发送方的真伪,因此可以通过对 H a s h Hash Hash 过后的 H ( m ) H(m) H(m) 进行签名,但是有人可能又有问题了,为什么要对 H a s h Hash Hash 过后的 H ( m ) H(m) H(m) 签名,难道不能对 m m m 直接签名么?
    • 如果你有这个问题,请你再去读一遍上面的数字签名部分。
    • 因为数字签名直接签 m m m 的话,如果 m m m 太大就效率很低,所以我们选择去签 h a s h hash hash 处理过后的 H ( m ) H(m) H(m)
    • 与其在发送端和接收端都费很大的力气对 m m m 进行签名,不如他们各自去算一遍 m m m H a s h Hash Hash,这个过程简直不要太省力。

MAC 消息认证码

  • 消息认证码的原理其实用的不是非对称的方式了, MAC 采用的是对称的方式进行完整性和身份认证的,但是不像上面的 ”数字签名HASH”,消息认证码选择将 Secret key 和 m 放到一起之后再进行 HASH,这个操作不需要加密解密的过程,因此更加方便快捷,用公式表示就是:

A : T e x t = ( m , H ( m + S ) ) Text =(m, H(m+S)) Text=(m,H(m+S)) 发送给 B
B:接收了以后拿到 m m m 通过再进行一遍哈希过程得到 H ( m + S ) ′ H(m + S)^{'} H(m+S),通过比对接收的 H ( m + S ) H(m+S) H(m+S) 和 自己重新生成的 H ( m + S ) ′ H(m+S)^{'} H(m+S) 来判断信息是否被修改,同时又因为这个过程中涉及了秘钥 S S S,因此只有 A A A 有他们之间通信的秘钥,从而保证了信息发送方得以认证。

  • 所以看的出来,MAC 利用的是对称的秘钥,但是他其实不涉及加密解密的过程,只是利用了一个双方都有的对称秘钥。
    • 优势:对称的方式非常便捷、快速;不需要进行加密过程,只需要进行哈希过程,
    • 缺点:依然涉及到共同对称秘钥的交换问题,要通过额外的步骤保证

完整性和身份认证的总结

  • hash 之所以可以保证完整性,是因为他的性质:

    • 两段信息,哪怕只差一点,hash 处理后的值也会毫不相关
    • 拿到 hash 来推断原始信息几乎不可行,代价高到难以想象
  • 数字签名之所以能保证完整性,是因为:

    • 数字签名需要用到私钥 private key,这个东西只要 A 不泄露出去,全世界就只有他自己知道,所以用数字签名签过的文本没办法修改,因为修改后没有 A 的 private key,B 用 A 的 public key 解密不了的话一下就识破了;
  • 之所以结合 hash 和 数字签名是因为各取所需:

    • 对哈希来说,只通过 hash 不能确认发送方身份
    • 对数字签名来说,先哈希比直接签名大文件效率高
  • MAC 之所以单独拿出来和数字签名HASH 并列,是因为:

    • MAC 不需要加密,很方便,也可以用于大规模文件的完整性和身份验证
  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
在企业加密消息传输系统中,混合密码算法是一种常见的使用对称和非对称加密结合的加密式。它的基本原理是利用对称加密算法的高效性和非对称加密算法的安全性相结合来实现更加安全和高效的加密传输。 具体来说,混合密码算法需要遵循以下步骤: 1. 生成一组公钥和私钥。公钥用于加密数据,私钥用于解密数据。 2. 对需要加密的数据使用对称加密算法进行加密。这个过程中使用一个密钥,这个密钥称为“对称密钥”。 3. 将对称密钥使用公钥进行加密。这个过程中使用非对称加密算法,得到一个“密文密钥”。 4. 将加密后的数据和密文密钥一起发送到接收。 5. 接收使用私钥解密密文密钥,得到对称密钥。 6. 接收使用对称密钥解密数据,得到原始数据。 由于非对称加密算法的计算量比对称加密算法大得多,混合密码算法使用非对称加密算法对对称密钥进行加密,从而保证了消息传输的安全性。同时,对称加密算法可以大幅提高加密的速度,从而实现了高效的加密传输。 混合密码算法被广泛应用于企业加密消息传输系统。比如,一些电子邮件软件,如Outlook和Lotus Notes等,就使用了混合密码算法来实现安全的加密传输。此外,一些在线支付系统和电子商务平台也使用了混合密码算法来保护用户信息和交易安全。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

暖仔会飞

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值