当前位置: 首页 > article >正文

数字证书 与 数字签名 介绍

目录

  • 数字签名
    • 什么时候公钥加密数据,什么时候私钥加密数据?
    • 消息认证码(MAC)和数字签名 区别
  • 数字证书
    • 如何使用数字证书验证服务器身份?

数字签名

定义:它类似于现实生活中的手写签名。

手写签名的法律效力
1、每个人的笔迹因生理和心理差异而独一无二,难以复制。签名被视为真实性有效性的直接证明。
2、手写签名是法律文件生效的核心要件之一,能证明签署人对文件内容的认可与授权。具有不可否认性

数字签名的过程
(1) 签名过程
1、发送者使用哈希函数(如 SHA-256)对原始数据进行计算,生成一个固定长度的摘要(Message Digest)。
2、签名者用自己的私钥对摘要(Hash 值)进行加密,生成数字签名
3、签名者将原始数据和签名一起发送给接收方。
(2) 验证过程
4、接收方用签名者的公钥解密签名,得到摘要。
5、接收方重新计算原始数据,得到摘要。两个摘要进行比较,如果一致,则验证通过。

作用
数据完整性 + 真实性 + 抗抵赖性

完整性如何体现?
发送者使用哈希函数对原始数据进行计算,生成一个固定长度的摘要,收到者使用相同哈希函数对原始数据进行计算,得到相同摘要,就说明数据没有被改动,这就保证了数据完整性
摘要已经是是公开的,那为何还要引入数字签名呢?
摘要可以验证数据的完整性,但无法验证数据的来源。
通过私钥加密摘要和公钥解密签名,可以确定公钥和私钥是一套的。保证了数据的来源。
公钥能解密且摘要还一致,则说明数据和公钥是从同一个人发出来的。这就保证了数据的真实性。且发送者无法否认自己生成了签名(抗抵赖性)。 但是只能证明公钥百分百是你的,且原始信息没有被修改过,但是无法证明你就是我兄弟。
只有数字签名能否防护中间人攻击?
不能。数字签名只能验证消息的真实性完整性,接收方无法确定收到的公钥确实属于发送者,如果攻击者伪造身份并提供自己的公钥,接收方可能误以为攻击者是合法发送者。

什么时候公钥加密数据,什么时候私钥加密数据?

非对称加密中 :目标是保护数据的 机密性(谁都可以给我发信息,只有我自己可以看) 所以数据由公钥加密,私钥解密。
数字签名 :不是保护数据的机密性,而是验证数据的 真实性完整性(用谁都不知道的私钥加密(签名),大家用谁都知道的公钥解密(验证)

消息认证码(MAC)和数字签名 区别

消息认证码(Message Authentication Code, MAC)
数字签名(Digital Signature)
(1) MAC 的生成与验证
生成过程:
发送方将消息共享密钥拼接。使用哈希算法(如 HMAC-SHA256)生成消息摘要 MAC
验证过程:
接收方使用相同的共享密钥与收到的消息重新生成消息摘要 MAC
比较接收到的 MAC 和重新生成的 MAC 是否一致。
(2) 签名的生成与验证
生成过程:
发送方对消息计算哈希值。使用发送方的私钥对哈希值进行加密,生成签名
验证过程:
接收方使用发送方的公钥解密签名,得到原始哈希值。对消息重新计算哈希值。
比较接解密的 哈希值 和重新生成的 哈希值 是否一致。

特性MAC签名
机密性依赖使用共享密钥私钥签名公钥验证
计算复杂度对称加密非对称加密
不可否认性都使用共享密钥,无不可否认性使用到私钥,有不可否认性
适用场景通信双方预先共享密钥的场景需要身份验证和不可否认性的场景

数字证书

数字证书是一种电子文件,用于证明某个实体(如个人、组织或设备)的身份。
它由可信的第三方机构(称为 CA,Certificate Authority)签发,并包含以下信息:
签发机构(CA)的签名
有效期限
持有者的身份信息(如域名、公司名称等)
持有者的公钥

作用:提供一种安全的方式将公钥分发给通信对方。

工作原理
1、用户向 CA 提交申请,提供身份信息和公钥。
2、CA 验证用户身份后,生成并签署数字证书。
3、用户将数字证书发送给通信对方。
4、对方通过验证证书中的 CA 签名来确认用户身份,成功拿到用户的公钥

如何使用数字证书验证服务器身份?

客户端收到服务器的数字证书后,使用以下步骤验证服务器身份:
验证证书链:检查证书是否由受信任的 CA 签发。
验证证书有效性:检查证书是否在有效期内,且未被列入吊销列表(CRL)。
验证证书绑定:确认证书中的域名与服务器的实际域名匹配。
验证签名:使用 CA 的公钥验证数字证书的签名是否有效。



http://www.kler.cn/a/597016.html

相关文章:

  • Beyond Compare 4注册激活方法
  • 使用HTML5和CSS3实现3D旋转相册效果
  • IoTDB 常见问题 QA 第六期
  • 一条不太简单的TEX学习之路
  • tryhackme——The Lay of the Land
  • 从报错到成功:Mermaid 流程图语法避坑指南✨
  • 嵌入式基础知识学习:UART是什么?
  • kotlin 函数引用
  • SQL语言——MySQL
  • 解决 ECharts Map3D 在高分辨率大屏下鼠标与地图位置错位的问题
  • 如何理解java中Stream流?
  • Python Django入门(创建网页:学习笔记主页)
  • hive:处理JSON格式(get_json_object()函数),连续登录题型,快速生成表(explode,stack),迭代计算
  • 深入理解 lt; 和 gt;:HTML 实体转义的核心指南!!!
  • 批量文件分析器:使用Python从PPT和PDF中提取文本
  • 云服务器运维
  • 022-spdlog
  • python转换wav到mp3
  • AI大模型训练教程
  • C#里使用libxl来对列或行进行分组显示