数字签名-数字证书-ca认证

2023-05-16

数字签名是什么?

作者: 阮一峰

今天,我读到一篇好文章。

它用图片通俗易懂地解释了,"数字签名"(digital signature)和"数字证书"(digital certificate)到底是什么。

我对这些问题的理解,一直是模模糊糊的,很多细节搞不清楚。读完这篇文章后,发现思路一下子就理清了。为了加深记忆,我把文字和图片都翻译出来了。

文中涉及的密码学基本知识,可以参见我以前的笔记。

====================================================

数字签名是什么?

作者:David Youd

翻译:阮一峰

原文网址:http://www.youdzone.com/signature.html

1.

鲍勃有两把钥匙,一把是公钥,另一把是私钥。

2.

鲍勃把公钥送给他的朋友们----帕蒂、道格、苏珊----每人一把。

3.

苏珊要给鲍勃写一封保密的信。她写完后用鲍勃的公钥加密,就可以达到保密的效果。

4.

鲍勃收信后,用私钥解密,就看到了信件内容。这里要强调的是,只要鲍勃的私钥不泄露,这封信就是安全的,即使落在别人手里,也无法解密。

5.

鲍勃给苏珊回信,决定采用"数字签名"。他写完后先用Hash函数,生成信件的摘要(digest)。

6.

然后,鲍勃使用私钥,对这个摘要加密,生成"数字签名"(signature)。

7.

鲍勃将这个签名,附在信件下面,一起发给苏珊。

8.

苏珊收信后,取下数字签名,用鲍勃的公钥解密,得到信件的摘要。由此证明,这封信确实是鲍勃发出的。

9.

苏珊再对信件本身使用Hash函数,将得到的结果,与上一步得到的摘要进行对比。如果两者一致,就证明这封信未被修改过。

10.

复杂的情况出现了。道格想欺骗苏珊,他偷偷使用了苏珊的电脑,用自己的公钥换走了鲍勃的公钥。此时,苏珊实际拥有的是道格的公钥,但是还以为这是鲍勃的公钥。因此,道格就可以冒充鲍勃,用自己的私钥做成"数字签名",写信给苏珊,让苏珊用假的鲍勃公钥进行解密。

11.

后来,苏珊感觉不对劲,发现自己无法确定公钥是否真的属于鲍勃。她想到了一个办法,要求鲍勃去找"证书中心"(certificate authority,简称CA),为公钥做认证。证书中心用自己的私钥,对鲍勃的公钥和一些相关信息一起加密,生成"数字证书"(Digital Certificate)。

12.

鲍勃拿到数字证书以后,就可以放心了。以后再给苏珊写信,只要在签名的同时,再附上数字证书就行了。

13.

苏珊收信后,用CA的公钥解开数字证书,就可以拿到鲍勃真实的公钥了,然后就能证明"数字签名"是否真的是鲍勃签的。

14.

下面,我们看一个应用"数字证书"的实例:https协议。这个协议主要用于网页加密。

15.

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

16.

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

17.

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

18.

如果数字证书记载的网址,与你正在浏览的网址不一致,就说明这张证书可能被冒用,浏览器会发出警告。

19.

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

20.

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

(完)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

数字签名-数字证书-ca认证 的相关文章

  • QT 开发环境 第一个安卓程序 Hello world

    参考了很多文章 xff0c 这篇文章感觉是最好 xff0c 安装文章中的版本没有问题 文章链接 xff1a Qt5 12 1 for Android配置 简书 我最后卡在生成APK的时候 xff0c 出现 androiddeployqt e
  • 51单片机串口通讯接收一串字符串

    在51单片机中 xff0c 我们使用上下位机时 xff0c 我们通常会发送一串字符串 xff0c 将它作为信号发给单片机处理 因为串口通信时 xff0c 发送信息是以一个个字符的形式发送过来的 xff0c 所以接收的就是一个个字符 xff0
  • SQL统计查询

    病人表数据 检查表数据 1 统计年龄 1 1统计病人表中一段时间范围内的年龄病人数量 xff08 仅查询数据 xff09 select f Age count from workstationdb t patient INNER JOIN
  • installsheild 2020 安装过程中自动执行exe程序

    有时根据安装包的安装情况 xff0c 会在安装开始 xff0c 或安装过程中 xff0c 或安装结束后运行指定的exe程序 1 xff09 如果是在安装结束 xff0c 即点击安装的最后一个界面的 完成 按钮 xff0c 步骤参考下图 2
  • 详解VMWARE安装WINCE6.0(1)

    通过在网上查找大量资料终天把虚拟机中运行WINCE环境搭建起来 xff0c 首先感谢网上的诸多高手 xff0c 不过网上的资料大都不是很详细 xff0c 下面我算是一个总结吧 xff0c 方便以大家后学习 1 安装工具 xff08 1 xf

随机推荐

  • VS2005中控件不能添加变量(add variable)解决方法总结

    有时VS2005中右击添加变量 xff08 add variable xff09 变成灰色时 xff0c 会发现不能添加变量 经过在网上搜索总结如下 1 先clean xff0c 再重新build 2 将控制的ID重新命名 xff0c 再试
  • 在VB中调用C/C++语言编写的dll,数组参数的传递

    动态链接库 xff08 dll xff09 的好处就不多说了 xff0c 这里就把如何在VB中调用VC写的dll函数的方法介绍一下 xff0c 供有需要的朋友们参考 xff0c 同时也免得自己以后忘了 初次接触DLL的用户经常会遇到一个问题
  • 将C++转换成VB,C#语言小工具介绍

    在网上看到很多网友在 NET程序中调用Win32 API xff0c 或者调用自己的VC DLL里面提供的函数的时候 xff0c 总是被生成正确的C函数在C 中的正确声明而困扰 xff0c 而生成C 43 43 中结构体在C 中的声明 天
  • malloc,free在二级指针(指针的指针)的应用

    二维指针指针应该用for循环初始化 结束用for循环逐个释放 1 初始化 xff1a int pp 61 int malloc 12 sizeof int for int i 61 0 i lt 12 i 43 43 p i 61 int
  • MFC radio button互斥选择的重要几点

    MFC中的radio控件的互斥功能很常用 xff0c 一般在MFC资源中一个一个按顺序增加radio控件时不会有问题 但如果修改以前的代码 xff0c 需要重新增加几个radion时需要注意以下几点 1 新增加的radio的ID与旧的一定要
  • CListCtrl自动排序及添加排序箭头

    应客户要求 xff0c 在点击CListCtrl列表每列标题时进行排序 xff0c 类似于WINDOWS资源管理器的效果 首先在资源中添加LVN COLUMNCLICK消息 xff0c 生成OnLvnColumnclickListInfo函
  • 从零开始学习FFT(快速傅里叶变换) 这也是我学习dft算法的心得,谢谢各位

    本文是从最基础的知识开始讲解 xff0c 力求用最通俗易懂的文字将问题将的通俗易懂 xff0c 大神勿喷 xff0c 多多指教啊 xff0c 虽然说是从零学习 FFT xff0c 但是基本的数学知识还是要有的 xff0c sin xff0c
  • ZED相机python API配置

    之前安装了ZED SDK xff0c 在官网下载了CUDA10 2版本的ZEDSDK3 8 现在用python API对ZED相机进行二次开发 由于之前安装的python版本是3 10 xff0c 运行ZED SDK中的get python
  • PCI中断处理

    首先在获得PCI配置空间资源的时候 xff0c 就要获得中断资源 xff0c 根据CM PARTIAL RESOURCE DESCRIPTOR 结构的 Type 域来区分需要获得什么样的中断资源的时候 xff0c 如果Type类型为 xff
  • VSCode常用快捷键

    快速复制一行 快捷键 xff1a shift 43 alt 43 下箭头 上箭头 或者 ctrl 43 c 然后 ctrl 43 v 选定多个相同的单词 快捷键 xff1a ctrl 43 d 先双击选定一个单词 xff0c 然后按下 ct
  • visca接口转RS-232C接口线序

  • Java迭代器详解,看这一篇就够了

    文章目录 x1f6a9 Java 迭代器详解 x1f4da 迭代器的定义 x1f4d2 认识Iterator 类结构图 Iterable接口 x1f58d Iterator接口 x1f4c3 Iterator接口的方法 x1f4d9 迭代器
  • 流式套接字实现简单的客户端/服务端通信过程

    一 实验内容 熟悉流式套接字socket函数的使用方法 xff0c 包括建立连接 数据发送 接收和关闭连接等 xff1b 客户端可向服务端发送任意字符串 xff0c 服务端在接收到该字 符串后 xff0c 回送给客户端 xff1b xff0
  • 实现基于 TCP/IP 协议简单的客户端、服务器通信程序实例

    本篇文章实现了一个基于TCP 的一个非常简单的客户 服务器通信程序实例 该程序中通讯协议使用的是面向连接的TCP协议SOCK STREAM 服务器的ip地址为本地地址即 xff1a 127 0 0 1 xff0c 端口号为自定义的5099
  • ARM:FreeRTOS系统栈和任务栈

    ARM xff1a FreeRTOS系统栈和任务栈 背景 xff1a ARM 有两个栈指针PSP和MSP xff0c 通过Control 寄存器来决定SP R13 使用哪个栈 我们下面谈论的系统栈和任务栈 xff0c 就和这两个栈指针有关
  • cmake编译时对‘xxxx‘未定义的引用问题

    众所周知 c c 43 43 编译过程中在链接阶段偶尔会出现 34 对 xxxx 未定义的引用 34 问题 在复杂的项目中更为常见 经查 大部分博主的关于这方面的博客千篇一律 都指出是头文件未包含的原因 我还是建议大家仔细阅读编译错误信息
  • 进制转换(C++):十六进制、二进制、十进制(附源代码)

    思路如下 xff1a 十进制转二进制 xff1a 除二求余 xff0c 得到低位到高位的二进制数字排列 十进制转八进制 xff1a 除八求余 xff0c 得到低位到高位的八进制数字排列 十进制转十六进制 xff1a 除十六取余 xff0c
  • [C/C++]C语言中math.h和cmath的pow()精度问题

    帮小朋友们DEBUG的时候 xff0c 他们有个题无论怎么提交OJ都不给过 我回来后想了想 xff0c 估计是因为math h库返回值转int时精度丢失的问题 gt 测试代码 include lt stdio h gt include lt
  • c语言自定义寄存器操作的一些方法

    1 寄存器地址的定义 xff1a define UART BASE ADRS 0x10000000 串口的基地址 define UART RHR volatile unsigned char UART BASE ADRS 43 0 数据接受
  • 数字签名-数字证书-ca认证

    数字签名是什么 xff1f 作者 xff1a 阮一峰 今天 xff0c 我读到一篇好文章 它用图片通俗易懂地解释了 xff0c 34 数字签名 34 xff08 digital signature xff09 和 34 数字证书 34 xf