首页 > 其他分享 >数字签名的过程详解

数字签名的过程详解

时间:2023-06-19 18:35:49浏览次数:44  
标签:公钥 加密 数字签名 摘要 解密 详解 原文 过程

 

 

数字签名的过程详解
1. 数字证书的概念
2. 数字签名的过程
3. 加密的过程
4. 数字签名两大特性
5. 用到的部分名词解释
1. 数字证书的概念
数字证书又叫“数字身份证”、“网络身份证”,是由证书认证中心CA发放并经认证中心数字签名,包含公开密钥拥有者以及公开密钥相关信息的一种电子文件,可以用来证明数字证书持有者的真实身份。数字证书的格式一般采用X.509国际标准。

2. 数字签名的过程
用户A将待发送的信息原文经散列函数运算生成摘要信息,并用自己的私有密钥对摘要信息进行加密,将形成的密文和原文传送给用户B。用户B接收到密文后,使用A的公开密钥验证密文,得到摘要信息,并按照约定的摘要算法对原文进行摘要运算,再将两个摘要值进行比对,一致则表明数据未被篡改。

数字签名实现了用户的身份认证,保证了数据在传输过程中的完整性、和交易的不可否认性;但是,任何拥有发送方公开密钥的人都可以验证数字签名的正确性,因此无法保证数据的机密性

3. 加密的过程
加密:A首先要用B的公钥对信息原文进行加密,形成密文,发送给B;B在收到密文后用自己的私钥进行解密,将密文恢复为原文。该过程实现了信息的保密性以及对信息接收方B的认证

由于加密和数字签名都只保证了信息在传输过程中的完整性、保密性、不可否认性和真实性的一部分,只有将两者相结合才能实现所有安全特性

所以真正AB信息传递过程中,完整的情况如下:

A的行为

1、A把信息原文进行哈希运算,得到信息的数字摘要

2、A用自己私钥,采用非对称加密算法,对数字摘要进行加密,得到数字签名

3、A用对称算法的密钥,采用对称算法,对信息原文和数字签名和A的公钥一起加密,得到加密信息

4、A用B的公钥,采用非对称算法,把对称密钥加密,形成信封。就像是对称密钥装到了B公钥加密的信封里面

5、A把加密信息和数字信封一起发给B

B的行为

1、B收到数字信息,用自己的私钥解密信封,拿到对称密钥

2、B用对称密钥,把加密信息解密,得到信息原文和数字签名和A的公钥

3、B用A的公钥解密数字签名,得到数字摘要1

4、B将原文用同样的哈希算法,得到数字摘要2

5、将摘要1和摘要2对比。如果相等,则原文没有被修改,签名是真实的

详细图解:

 


4. 数字签名两大特性
数字签名,它的作用跟手写签名其实是一样的,用来证明某个消息或者文件是本人发出/认同的,利用公钥加密系统保证不可伪造和不可抵赖两个特性。

不可伪造
其他人因为没有对应的私钥,所以没法生成公钥可以解密的密文,所以是不可伪造的。

不可抵赖
又因为公钥对应的私钥只有一个,所以只要能成功解密,那么发消息的一定是你,不会是其他人,所以是不可抵赖的。

5. 用到的部分名词解释
消息摘要:

消息摘要就是将消息哈希转换成一个固定长度的值唯一的字符串,该过程不可逆,基本上做不到通过消息摘要转换成消息的。
实际应用中,由于直接对原消息进行签名有安全性问题,而且原消息往往比较大,直接使用RSA算法进行签名速度会比较慢,所以我们一般对消息计算其摘要(使用SHA-256等安全的摘要算法),然后对摘要进行签名。只要使用的摘要算法是安全的(MD5、SHA-1已经不安全了),那么这种方式的数字签名就是安全的。

非对称加密:

在通信双方,如果使用非对称加密,一般遵从这样的原则:公钥加密,私钥解密。同时,一般一个密钥加密,另一个密钥就可以解密。
因为公钥是公开的,如果用来解密,那么就很容易被不必要的人解密消息。因此,私钥也可以认为是个人身份的证明。
如果通信双方需要互发消息,那么应该建立两套非对称加密的机制(即两对公私钥密钥对),发消息的一方使用对方的公钥进行加密,接收消息的一方使用自己的私钥解密。
————————————————
版权声明:本文为CSDN博主「Kaiser king」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_45775963/article/details/106602931

标签:公钥,加密,数字签名,摘要,解密,详解,原文,过程
From: https://www.cnblogs.com/pengmn/p/17491853.html

相关文章

  • C++ typeid关键字详解
    typeid关键字 注意:typeid是操作符,不是函数。这点与sizeof类似)运行时获知变量类型名称,可以使用typeid(变量).name()需要注意不是所有编译器都输出”int”、”float”等之类的名称,对于这类的编译器可以这样使用intia=3;if(typeid(ia)==typeid(int)){  cout<<"in......
  • Rockchip rk3588 U-Boot详解 (三)
    Rockchiprk3588U-Boot详解(三)专栏总目录1.1Environment-VariablesENV(Environment-Variables)是U-Boot支持的一种全局数据管理和传递方式,原理是构建一张HASH映射表,把用户的数据以"键值-数据"作为表项进行管理。EVN通常用于定义平台配置参数:固件加载地址、网络配置(ipaddr、serve......
  • 子函数、子过程的可选参数
    参数的使用参数的使用对于过程和函数都是一样的。所以本节的内容对过程和函数都适用。参数可分为可选参数和必选参数两种。必选参数在调用(过程或函数时)必须加上,否则会报错。可选参数则可写可不写。默认是必选参数,可选参数在定义时用Optional关键字声明,并且可选参数必须放在参数......
  • static详解
     static+属性 //静态属性 ,可直接通过类调用publicstaticstringname=“张三”static+方法 // 静态方法,可直接通过类调用publicstaticvoidadd(){system.out.print("xxxxxx")}static+{} //静态模块代码,最先执行且只执行一次static{system.out.print("xxxxx......
  • (转)kubernetes(k8s) yaml 文件详解2
    原文:https://juejin.cn/post/7202145223014252602#heading-0一、K8S支持的文件格式kubernetes支持YAML和JSON文件格式管理资源对象。JSON格式:主要用于api接口之间消息的传递YAML格式:用于配置和管理,YAML是一种简洁的非标记性语言,内容格式人性化,较易读1、yaml和json的主要区......
  • nginx前端页面通过docker部署过程中的相关问题
    1、nginx.conf的ip地址对应服务器的ip 2、数据卷的路径需要与配置文件对应nginx.conf创建数据卷与容器的语句dockerrun--name=nginx01-vhtml:/usr/share/nginx/html-p8080:80-dnginx3、nginx.conf配置文件的存放位置dockercpnginx.confngin......
  • 【实例】深入详解 CSS 中的 object-fit 5个属性值
    【实例】深入详解CSS中的object-fit5个属性值在本文中,我们将介绍如何使用object-fit,以及一些实际用例和建议。我们并不总是能够为HTML元素加载不同大小的图像,如果我们使用与图像纵横比不成比例的宽度和高度,则图像可能会被压缩或拉伸。为解决此问题,我们可以为img元素使用ob......
  • vi命令使用详解
    vi命令使用详解1.三种工作模式命令模式:通过命令对文件进行常规操作打开文件时进入命令模式(vi的入口)通过命令对文件进行常规操作,如定位、翻页、复制、粘贴、删除等在图形界面下通过鼠标或快捷键实现的的操作末行模式:执行保存、退出等操作若要退出vi返回控制台,需在末......
  • Android Framework层——App启动过程浅析
    1.关于Android系统的启动系统的启动过程非常复杂,这里只是简单的了解。先上谷歌提供的架构分层图⬇**引导程序BootLoader进行初始化Linux内核->启动init进程->init进程fork出zygote进程(处于c++framework层)->zygote进程fork出system_server进程(处于javaframework层)**system_ser......
  • mysql 可以重复执行的表结构修改存储过程
    mysql可以重复执行的表结构修改存储过程当多个数据库要执行同一个sql,但是在其中有一个数据库失败需要重新执行,那么就要保证执行的数据库是可以重复执行的了,下面就是可以重复执行的存储过程,收藏起来DELIMITER;;CREATEPROCEDURE`AddColumnIfNotExists`( tableNameVARCHAR......