什么是数字签名?

Posted 奇妙之二进制

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了什么是数字签名?相关的知识,希望对你有一定的参考价值。

数字签名采用非对称密码体制(公钥密码体制),即发送者使用私钥加密数据 ,接收者使用对应的公钥解密数据,它具有以下功能:

① 报文鉴别 : 用于 证明来源 , 接收者 可以 通过签名 确定 是哪个发送者 进行的签名 ;

② 防止抵赖 : 防止 发送者 否认签名 , 发送者 一旦签名 , 标记就打上了 , 无法抵赖 ;

③ 防止伪造 : 防止 接收者 伪造 发送者 的签名 。

数字签名验证过程:

用户A使用数字签名向用户B传输文件

图中用户A使用数字签名向用户B传输文件的过程:

1、首先,文件经过单向散列函数的处理得到一份占128位的摘要。其中,文件和文件的摘要具有很强的对应关系,只要文件发生改动,经过单向散列函数处理后得到地摘要都会不一样。

2、用户A使用自己的私钥对摘要进行加密,得到加密的摘要。

3、用户A把文件、加密的摘要和公钥一起发给用户B。

4、用户B收到A传过来的信息后,首先将其中的文件也采用单向散列函数处理得出一份128位摘要,然后使用A的公钥对收到的加密的摘要进行解密得到另一份128位摘要。

5、把上一步得到的两份摘要进行比较,如果两份摘要相等,说明文件经过用户A签名之后,在传输的过程中没有被更改;若不相等,说明文件在传输过程中被更改了,或者说已经不是原来的文件了,此时用户A的签名失效。

上面过程中,用户A使用私钥对由文件生成的128位摘要进行加密的过程称为数字签名的过程,得到的**“加密的摘要”,称为该文件的数据签名**。

上面例子传输过程中,用户A使用数字签名时给用户B发送了一个数据包,数据包中包含了A的公钥、文件和加密的摘要。那么问题来了:用户B如何确定收到的公钥是用户A发送的,而不是他人冒充用户A发送的呢?这时就需要有一个双方都信任的第三方证书颁发机构来协调。

证书颁发机构,即认证中心CA (Certification Authority),将公钥与其对应的实体(人或机器)进行绑定(binding);即给公司或个人颁发证书。

认证中心一般由政府出资建立。每个实体都有CA 发来的证书(certificate),里面有公钥及其拥有者的标识信息。此证书被 CA 进行了数字签名。任何用户都可从可信的地方获得认证中心 CA 的公钥,此公钥用来验证某个公钥是否为某个实体所拥有。

经过CA认证后用户A使用数字签名向用户B传输文件

  1. 用户A向证书颁发机构提交个人信息,申请证书。通过CA审核后,CA生成用户A的证书,证书中包括了A的公钥和私钥还有CA的数字签名。证书颁发机构CA本身拥有一对密钥,这是对CA所颁发的证书进行数字签名和保密的基础,绝不能泄露。
  2. 用户A收到的证书中包括了带有CA数字签名的,专属A的公钥和私钥,CA的数字签名确保了别人不能伪造用户A的公钥和私钥。
  3. 同时,用户B也必须信任给用户A颁发证书的第三方认证机构CA,即用户B拥有CA颁发的"CA公钥"。
  4. 通信时,用户A向用户B发送的数据包中的"加密的摘要"上有用户A的数字签名,“A公钥” 上有认证机构CA的数字签名。用户B收到数据包之后,先要验证收到的 “A公钥” 是否来源合法:是认证机构颁发的带有CA签名的公钥吗?用户B并不信任用户A,但是用户B信任第三方认证机构CA。所以,用户B先使用证书颁发机构颁发的 “CA公钥” 验证收到的 “A公钥” 是否由同一认证机构颁发,是否在颁发之后更改过。
  5. 上一步验证通过后,用户B便相信收到的 “A公钥” 确实来自真实的用户A。随后再使用 “A公钥” 对 “加密的摘要” 进行解密得到另一份128位摘要,再将收到信息中的文件也采用单向散列函数处理得出一份128位摘要,然后将得到的两份摘要进行对比操作,以判断文件是否更改。

以上是关于什么是数字签名?的主要内容,如果未能解决你的问题,请参考以下文章

数字签名和数字证书

如何将接收到的数字一分为二

签名验证前发件人证书已过期

stm32串口接收字符串的函数

5格式化输出

接收数字作为字符串(uart)