• 密码学系列——数字签名


    前言

    什么是数字签名呢?数字签名其实是消息摘要和非对称加密的一起应用。

    正文

    数字签名是怎么来的呢?

    在非对称加解密中,公钥方对私钥方发送消息,只需要公钥方用公钥加密即可,因为私钥只有一人持有。

    那么私钥方给公钥方发送数据是否可以用私钥发送即可呢?当然可以的啊。

    但是又一个问题就是私钥加密后,所有的公钥都可以解开,那么问题来了是否安全呢?

    也就是说私钥加密公钥去解密的意义并不大。而且私钥是单方,单方作为服务器的话去加密可想而知效率问题就很大了。

    回到问题得原点上,我们要验证的是什么问题呢?

    验证的是如何保证公钥方如何确认私钥方的身份,收到私钥方的信息没有串改过?

    确定私钥方的身份只能通过私钥要确认,那么如果用私钥加密效率低,那么是否记得如何进行文件校验的呢?文件校验就是消息摘要,取一部分进行加密啊。

    那么数字签名就是这样子的:

    私钥方 通过hash要发送的内容,然后用私钥进行加密就是数字签名和内容一起发送出去。

    公钥方取下数字签名,然后对签名进行解密,也就是得到hash的内容。这个时候就确认了秘钥方的身份。

    那么如果确认信息没有在中途改过呢?

    那么可以这样,公钥方对内容进行hash,然后和数字签名解密出来的进行对比,如果相等就没有串改,如果不相等就串改了。

    这样似乎就很愉快了,那么为啥又有数字证书这东西呢?

    是这样的,我们知道公钥方是靠公钥作为探头来识别私钥信息。

    那么问题来了,如果发生一件这种事情就是公钥方的公钥被黑客换了,那么这个时候就有一个情况了。

    加入公钥被换了,那么和原来的私钥方无法确认关系了,但是这不是最恐怖的,最恐怖的在于假设有一个黑客,生成了B私钥和B公钥。

    把B公钥和公钥方的公钥换了,然后用私钥B和公钥方沟通,那么这个时候呢,可想而知多么恐怖。公钥方会一直认为是在和私钥方沟通,其实一直在和黑客玩耍。

    这时候数字证书的作用就来了。

    首先有一家公共的CA机构,专门管理证书。它做了这么一件事,那就是用自己的私钥对其他私钥方的公钥和其他信息进行加密。

    那么私钥方在公钥方第一次请求自己信息的时候,把证书给公钥方,公钥方通过证书拿到公钥,而不是一个固定的公钥,这样子就很好了。

    来看下https的吧。

    下面是阮一峰的解释:
    1.

    首先,客户端向服务器发出加密请求。


    服务器用自己的私钥加密网页以后,连同本身的数字证书,一起发送给客户端。
    3.

    客户端(浏览器)的"证书管理器",有"受信任的根证书颁发机构"列表。客户端会根据这张列表,查看解开数字证书的公钥是否在列表之内。


    就是证书里面的网址和我们浏览的网站不一致。


    如果这张数字证书不是由受信任的机构颁发的,浏览器会发出另一种警告。
    6.


    如果数字证书是可靠的,客户端就可以使用证书中的服务器公钥,对信息进行加密,然后与服务器交换加密信息。

  • 相关阅读:
    array.prototype.slice.call(arguments)
    axios 的坑
    Cannot read property 'range' of null
    IDEA导入Eclipse的JavaEE项目详细步骤链接
    使用 yarn 安装时,报错node_modules ode sass:Command failed.
    axios post请求非json传参设置
    vue-cli 3.x跨域配置
    idea错误: 找不到或无法加载主类
    Git 上传新项目
    Windows下生成SSH密钥
  • 原文地址:https://www.cnblogs.com/aoximin/p/13496371.html
Copyright © 2020-2023  润新知