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

数字签名与证书

1. 数字签名与证书

  1. 摘要算法用来实现完整性,能够为数据生成独一无二的“指纹”,常用的算法是 SHA-2;
  2. 数字签名是私钥对摘要的加密,可以由公钥解密后验证,实现身份认证和不可否认;
  3. 公钥的分发需要使用数字证书,必须由 CA 的信任链来验证,否则就是不可信的;
  4. 作为信任链的源头 CA 有时也会不可信,解决办法有 CRL(证书吊销列表)、OCSP((在线证书状态协议),还有终止信任。

在机密性的基础上还必须加上完整性、身份认证等特性,才能实现真正的安全。

1.1. 摘要算法

实现完整性的手段主要是摘要算法(Digest Algorithm),也就是常说的散列函数、哈希函数(Hash Function)。

摘要算法近似地理解成一种特殊的压缩算法,它能够把任意长度的数据“压缩”成固定长度、而且独一无二的“摘要”字符串,就好像是给这段数据生成了一个数字“指纹”。

TLS推荐使用加密算法SHA-2。

SHA-2 实际上是一系列摘要算法的统称,总共有 6 种,常用的有 SHA224、SHA256、SHA384,分别能够生成 28 字节、32 字节、48 字节的摘要。

真正的完整性必须要建立在机密性之上,在混合加密系统里用会话密钥加密消息和摘要,叫哈希消息认证码(HMAC)。

1.2. 数字签名

私钥就是可以证明本人持有的东西,私钥 + 摘要算法实现数字签名, 同时实现,身份认证不可否认。

数字签名的原理其实很简单,就是把公钥私钥的用法反过来,之前是公钥加密、私钥解密,现在是私钥加密、公钥解密。

数字签名的过程:

  1. 创建消息摘要:发送者使用哈希函数(如SHA-256)生成消息的摘要,这是一个固定长度的字符串,代表了原始消息的内容。
  2. 使用私钥进行加密:发送者使用自己的私钥对消息摘要进行加密,生成数字签名。
  3. 发送消息和签名:发送者将原始消息和数字签名一起发送给接收者。
  4. 验证签名:接收者使用发送者的公钥对数字签名进行解密,得到消息摘要。
  5. 验证消息摘要:接收者生成接收到的消息的摘要。
  6. 比较摘要:接收者比较接收到的摘要和用发送者公钥解密得到的摘要。如果两者相同,说明消息未被篡改。

1.3. 数字证书和 CA

为了解决“公钥的信任”问题。

谁都可以发布公钥,我们还缺少防止黑客伪造公钥的手段,也就是说,怎么来判断这个公钥就是你或者某宝的公钥呢?

数字证书和CA的用途:

数字证书是由权威CA(证书颁发机构)签发的电子凭证,用于验证实体(如网站、个人)身份的真实性,并绑定其公钥信息。它通过加密和签名确保数据传输的机密性、完整性和不可抵赖性。

CA作为受信任的第三方,负责审核证书申请、签发证书,并建立信任链,防止身份伪造,是互联网信任体系的核心基础。两者共同保障通信安全与身份可信。

Question:那客户端如何解密服务器发的加密消息呢?

简要流程如下:

1. 客户端发起请求(Client Hello)

  • 浏览器发起 HTTPS 请求,告诉服务器自己支持哪些加密算法。
  • 这个阶段还没有加密。

2. 服务器回应(Server Hello)

  • 服务器选择加密算法。
  • 并把自己的 数字证书(包含公钥) 发给客户端。

3. 客户端验证证书是否合法

  • 用操作系统或浏览器内置的可信 CA 证书库验证服务器证书是否合法(比如看证书是不是被伪造的)。

4. 生成对称密钥(关键步骤)

  • 客户端用服务器的“公钥”加密一个随机生成的“对称密钥”(也叫会话密钥)。
  • 然后把这个加密后的密钥发送给服务器。

5. 服务器用私钥解密

  • 服务器用自己保管的“私钥”解密这个密钥,拿到会话密钥。

6. 后续通信都用这个对称密钥加密

  • 客户端和服务器都有了相同的“会话密钥”,后续通信(例如服务器返回的数据)就用这个密钥加密。
  • 客户端收到加密数据后,用同一个密钥解密即可。

相关文章:

  • Java并发编程,从线程安全到死锁避免的实战解析
  • Ubuntu 安装 HAProxy
  • 基于ESP32控制的机器人摄像头车
  • spark-Join Key 的基数/rand函数
  • 海纳思(Hi3798MV300)机顶盒遇到海思摄像头
  • RT-Thread 深入系列 Part 5:物联网与网络应用实战
  • 51c视觉~合集37
  • 使用FastAPI微服务在AWS EKS上实现AI会话历史的管理
  • 计算机网络 4-2-2 网络层(IPv4)
  • 解锁 DevOps 新境界 :使用 Flux 进行 GitOps 现场演示 – 自动化您的 Kubernetes 部署
  • 【RT-Thread Studio】nor flash配置Fal分区
  • Windows:Powershell的使用
  • 程序代码篇---esp32视频流处理
  • Taro 编译不平不同平台小程序
  • 《类和对象(中)》
  • 分布式事务快速入门
  • Ubuntu 与 Windows 双系统环境下 NTFS 分区挂载教程
  • Autoware message_filters::Synchronizer链接错误问题
  • 如何删除网上下载的资源后面的文字
  • 数字孪生实战笔记(1)数字孪生的含义、应用及技术体系
  • 近4小时会谈、3项联合声明、20多份双边合作文本,中俄元首今年首次面对面会晤成果颇丰
  • 习近平同瑞典国王卡尔十六世·古斯塔夫就中瑞建交75周年互致贺电
  • 人民时评:透过上海车展读懂三组密码
  • 王日春已任教育部社会科学司司长,此前系人教社总编辑
  • 鸿蒙电脑正式亮相,五年布局积累超2700项核心专利
  • 男子煎服15克山豆根中毒送医,医生:不能盲目相信偏方