zoukankan      html  css  js  c++  java
  • 散列运算、对称加密、非对称加密与数字签名

    很多场景中,尤其是网络传输数据时,对敏感和关键数据进行加密是很有必要甚至是必须的。消息传输时,通过对消息进行特殊编码(加密),建立一种安全的交流方式,使得只有发送方期望的接受方能够理解(解密)正确的原始消息,而发送方不期望的接收方(第三方)无法理解或篡改原始消息。此时,我们认为消息中的数据是安全的,这个安全的交流方式可以总结为同时满足以下三个条件:
    1)完整性:消息在传递过程中没有被篡改
    2)保密性:只有发送方期望的接受方能理解消息
    3)可认证性:消息的接收方可以确定消息的来源
    在此之前,先来介绍几种常用的加密技术

    1.散列运算

    通过对消息进行散列运算,从而得到消息的摘要。散列运算有以下几个特点:
    1)散列运算是不可逆的,可以将散列运算理解为单向的加密,原消息进过散列运算可以得到摘要(密文),但是根据摘要,无法推导出原消息。
    2)任何两个不相同的文件,哪怕只有一个字节的细微差别,得到的摘要都是完全不同的。这个特点的意义在于:可以用来判断消息是否被篡改,即解决完整性的问题
    3)不论原始消息的大小如何,运算得出的摘要信息是固定长度的。
    常用的散列运算有:MD5、MD4、SH1

    2.对称加密

    对称加密的思路非常简单,就是有一个被称为密钥的东西,在消息发送前使用密钥对消息进行加密,得到密文并发送,接收方收到密文后,使用相同的密钥进行解密,获得原始消息。和散列运算最大的区别就是对称加密是双向的,即能够根据运算的结果,重新获得原始消息。因为要由密文得出原始消息,所以,密文的大小和原始消息的大小是相同的,原消息越大,密文也就越大。对称加密的流程如下:
    1)发送方和接收方持有相同的密钥,并严格保密
    2)发送方使用密钥对消息进行加密,然后发送消息
    3)接收方收到消息后,使用相同的密钥对消息进行解密
    4)在这一过程中,第三方可能截获消息,但得到的只是一堆乱码
    常用的对称加密算法有:DES、AES

    3.非对称加密

    非对称加密具有一组密钥对:一个是对外开放的,任何人都能获取,称为公钥;一个是自行保管并严格保密的,称为私钥。非对称加密的规则是:由某人A的公钥加密的消息,只能由A的私钥进行解密;由A的私钥加密的消息只能由A的公钥解密。发送方、接收方都可以持有公/私密钥对,因此一共会有四个密钥。介绍非对称加密的两种模式:
    第一种模式,加密模式
    1)接收方公布自己的公钥,任何人都可以获得
    2)发送方使用接收的公钥对消息进行加密,然后发送
    3)接收方使用自己的私钥对消息进行解密
    第二种模式,认证模式
    1)发送方公布自己的公钥,任何人都能获得
    2)发送方使用自己的私钥对消息进行加密,然后发送
    3)接收方使用发送方的公钥对消息进行解密
    第一种模式满足了保密性,但不满足可认证性
    第二种模式满足了可认证性,但不满足保密性
    非对称加密算法过程相对耗时,不适用大数据,因此,对它的认证模式进行了改进,形成了一种新的加密方式,称为数字签名。

    4.数字签名

    数字签名和上面的认证模式非常相似,只不过加入了散列算法。解决了非对称加密比较耗时的问题。
    1)发送方将想要发送的消息进行散列运算,得到原始摘要
    2)发送方使用自己的私钥只对消息摘要进行加密,该过程就是签名
    3)接收方使用发送方的公钥对消息摘要进行解密,确认了发送方,并得到原始消息摘要
    4)接收方对收到的消息进行散列运算,得到一个本地消息摘要
    5)接收方对比原始消息摘要与本地消息摘要。如果相同,说明消息没有被改动过;如果不同,说明消息已经被篡改
    数字签名通过引入散列算法,可以同时满足完整性和可认证性

    5.综合实现

    这个过程比前面单独的加密方式传输复杂了很多,我们单独从发送方和接受方的角度分析。先看下,发送方需要执行的步骤:
    1)将消息进行散列运算,得到消息摘要
    2)使用发送发的私钥对消息摘要加密(认证模式:确保接收方能确认自己)
    3)使用接收方的公钥对消息进行加密(加密模式:确保了消息只能由期望的接收方解密)
    4)发送方发送消息和消息摘要
    接下来看一下接收方所执行的步骤:
    1)使用发送方的公钥对消息摘要进行解密(认证模式:确认了消息是由谁发送的),获得了原始消息摘要
    2)使用自己的私钥对消息进行解密(加密模式:安全的获得了消息内容)
    3)将消息进行散列运算,获得本地消息摘要
    4)将步骤1)获得的原始消息摘要和步骤3)获得的本地消息摘要进行对比,确认消息是否被篡改
    通过上面这种方式,综合使用了接收方、发送方全的四个密钥,在配合使用散列算法,使得上面提出的安全传递的所有三个条件全部满足了,但是,非对称加密是一种相对耗时的操作,所以这个方案对于大数据来说是低效的。实际上,可以通过这种方式来解决对称加密中的密钥传递问题,而对于之后实际要传递的消息,采用对称加密方式来完成,此时就已经是安全的了。

    再介绍一个术语:证书机制。证书机制是与数字签名相关的一个概念。在上面的各种模式中,一直存在一个假设:就是接收方或发送方所持有的、对方的公钥总是正确的。可实际上除非对方当面交换公钥,否则在传递公钥时,一样有可能被篡改。这时候就需要证书机制了:引入一个公正的第三方机构,当某一方想要发布公钥时,它将自身的身份信息及公钥提交给这个第三方,第三方对其身份进行证实,如果没有问题,则将其信息和公钥打包成证书,这个公正的第三方,就是所说的证书颁发机构,当需要获取公钥时,只需要获得其证书,然后从中提取公钥就可以进行了。

  • 相关阅读:
    JDK源码分析 – HashMap
    牛哄哄的celery
    redis数据库基础篇
    RPC的入门应用
    Python的常用模块
    消息队列之真知灼见
    面向对象编程(2)
    python3的C3算法
    面向对象编程(1)
    CRM项目之stark组件(2)
  • 原文地址:https://www.cnblogs.com/wenha/p/10464119.html
Copyright © 2011-2022 走看看