通俗理解 公钥、私钥、数字签名、数字证书

2023-10-26

通俗理解 公钥、私钥、数字签名、数字证书


本文转载改编自: https://blog.csdn.net/lihuang319/article/details/79970774

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


1、主角介绍:Bob and Alice

提起RSA加密算法,公钥和私钥,多数文章都要使用Bob和Alice这两位人物。他们的创造者名叫Rivest,是RSA之父。他为了在避免在描述中使用A和B,就以这两个字母开头,创建一男一女两个角色,就是我们在任何文章上都能看到的Alice和Bob了。这是一些题外话,下面就来进入我们的数字证书入门学习吧。


2、公钥加密 & 私钥解密

Bob有两把钥匙,一把叫公钥(public key),一把叫私钥(private key)。

在这里插入图片描述


Bob的公钥可以公开供其他人使用,他只保留自己的私钥。

在这里插入图片描述


公钥和私钥用来加解密数据,如果使用任意一把来加密数据,那么只有使用另外一把才能解密数据。

在这里插入图片描述


Susan想给Bob写信,她可以使用Bob的公钥将内容加密以后发送给Bob,Bob收到以后,使用私钥解密以便阅读内容。

Bob的的其他同事即使截获了Susan发送给Bob的信件,由于没有Bob的私钥,也无法解密,从而确保数据安全。以上就是使用公钥和私钥加解密的过程演示。

多说一句,如果Bob给Susan回信,如何保证数据安全呢?

他可以使用Susan的公钥加密消息后发给Susan,Susan使用自己的私钥解密后阅读。所以保护好自己的私钥是多么重要的事情啊。


3、哈希

现在Bob决定给Pat写一份信,信件的内容不用加密,但是要保证Pat收到信件后,能够确认信件的确是Bob发出的,而不是别人冒充Bob发给Pat的,应该如果做呢?

Bob 将信件通过 hash 软件计算一下,得到一串消息摘要(有的文章也称之为“hash值”)。这一过程能够保证2点:

1、过程不可逆。即不能通过消息摘计算出信件的内容。

2、消息摘要不会重复。即如果信件有任何改动,再次 hash 计算出的消息摘要,一定不会和改动前的消息摘要一致。

在这里插入图片描述


4、数字签名:私钥加密、公钥解密

然后,Bob使用自己的私钥,将消息摘要加密。

加密后的结果,我们称之为“数字签名”。

在这里插入图片描述


在这里插入图片描述


现在,Bob就可以将信件连同数字签名一起发给Pat。

在这里插入图片描述


Pat收到信件以后,会做2件事:

1、使用Bob的公钥将数字签名解密,如果顺利解密,说明的确是Bob签发的数字签名,不是别人签发的,因为Bob的私钥没有公开。

2、Pat使用hash软件对信件再次进行 hash 计算,和解密数字签名得到的消息摘要对比,如果一致,说明信件没有篡改,确实是Bob发出的。这就是数字签名的过程。它能够确保签名人发出的消息不被篡改,也能证明的确是签名人发出的消息。

ok,一切看上去是那么的完美,使用公钥私钥,即能加解密消息,又可以数字签名。


5、数字证书(确保公钥不被冒充)

说了那么多,还没有提到文章的主题----数字证书(不要和数字签名搞混了)。

先来做一道CISP的试题:

那类人对单位的信息安全威胁最大:a、高层领导 b、信息主管 c、安全管理员 d、心怀不满的员工

三长一短选最短,三短一长选最长,so 答案就是 d,也是我们下面引入的主角,Doug,心怀不满的员工。


Doug要欺骗Pat,冒充Bob给Pat写信,他应该怎么做的?

既然Bob 的 公钥是公开的,Doug可以冒充Bob,将他自己的公钥发给Pat,让Pat误认为收到的公钥就是Bob的,然后就可以冒充Bob给Pat发消息了(这里我们只谈理论,不谈具体实现方式)。所以问题的核心就是,如何确保公钥不被冒充?

使用数字证书可以确保公钥不被冒充。数字证书是经过权威机构(CA)认证的公钥,通过查看数字证书,可以知道 该证书是由那家权威机构签发的,证书使用人的信息,使用人的公钥。它有以下特点:

1、由专门的机构签发的数字证书才安全有效。

2、签发数字证书是收费的。

3、不会被冒充,安全可信。

4、数字证书有使用期限,过了使用期限,证书变为不可用。CA也可以在试用期内,对证书进行作废操作。

5、CA的公钥已经集成到操作系统中了。如下图:

在这里插入图片描述


生成数字证书的流程的如下:

1、持有人将公钥以及身份信息发送给权威机构。

2、权威机构负责对持有人的身份进行验证,确保公钥和持有人的信息准确无误。

3、权威机构使用自己私钥对持有人公钥进行数字签名,生成数字证书。

4、为了确保证书不被篡改,权威机构对数字证书进行hash计算(指纹算法),生成摘要(指纹),使用自己的私钥对摘要进行数字签名,放到数字证书中。

5、对持有人收费。


其它参考:

http://www.ruanyifeng.com/blog/2011/08/what_is_a_digital_signature.html

http://blog.csdn.net/ly131420/article/details/38400583

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

通俗理解 公钥、私钥、数字签名、数字证书 的相关文章

  • ubuntu 忘记root密码

    方法一 如果用户具有sudo权限 那么直接可以运行如下命令 sudo su root 输入当前用户的密码 passwd 输入密码 再次输入密码 方法二 如果用户不具备sudo权限 则方法一不能用 并需进入GRUB修改kernel镜像启动参数
  • 如何用 Python 批量循环读取 Excel ?

    在使用 Python 批量处理 Excel 时经常需要批量读取数据 常见的方式是结合glob模块 可以实现将当前文件夹下的所有csv批量读取 并且合并到一个大的DataFrame中 df list for file in glob glob
  • 贪吃蛇(C语言)

    贪吃蛇项目 核心算法 循环数组 发牌算法 二维坐标一维化 编译环境 TC 2 0 准备工作 学习gotoxy 函数 了解bioskey 函数使用 知道bioskey 1 与bioskey 0 的区别 了解键盘扫描码 并且知道如何使用 核心工
  • Java读取ini文件

    Java读取ini文件 文章目录 Java读取ini文件 1 ini文件 2 代码示例 1 ini文件 src config config ini文件内容如下 login autorun n jls 2 url 10 10 1 29 por
  • Linux高性能服务器编程(4)TCP协议详解

    Linux高性能服务器编程 4 TCP协议 TCP服务的特点 TCP协议更靠近应用层 在应用程序中有更好的可操作性 信息 作用 TCP头部 TCP头部信息出现在每个TCP报文段中 用于指定通信的源端端口号 目的端口号 管理TCP连接 控制两
  • unity 动态修改文本方法 GameObject

    using System Collections using System Collections Generic using UnityEngine using UnityEngine SceneManagement using Unit
  • linux文件系统

    这本阿里P8撰写的算法笔记 再次推荐给大家 身边不少朋友学完这本书最后加入大厂 Github 疯传 史上最强悍 阿里大佬 LeetCode刷题手册 开放下载了 从操作系统的角度详解Linux文件系统层次 文件系统分类 文件系统的存储结构 不
  • List中存储实体类并根据实体类的指定属性去重

    场景 如果List中存储的是一些字符串 去重的时候就比较简单 直接使用java中的set集合去重即可 如果List中存储的是一些是实体类 去重的时候 要根据实体类的部分属性去重 可以使用下面的方法 举例如下 实体类 public class
  • 服务器迁移记录

    服务器迁移记录 安装 Docker 使用 Docker 安装 MySQL Redis 等 MySQL数据库迁移 文件迁移 安装 Docker 具体安装方法见 Docker 学习笔记 使用 Docker 安装 MySQL Redis 等 My
  • 机顶盒天线接头怎么接_数字电视接收天线怎么安装

    如今越来越多的家庭都在使用数字电视信号 因为这是一种使用起来非常方便 而且画质超级清楚的电视信号 不过很多第一次使用数字电视信号的朋友 并不是特别清楚数字电视接收天线的安装方法 所以我们今天在这里来给大家简单的介绍一下 数字电视接收天线的安
  • 贪心算法与近似算法

    1 贪心算法 1 1 教室调度问题 假设有如下课程表 你希望将尽可能多的课程安排在某间教室上 你没法让这些课都在这间教室上 因为有些课的上课时间有冲突 你希望在这间教室上尽可能多的课 如何选出尽可能多且时间不冲突的课程呢 这个问题好像很难
  • html左侧导航栏右侧显示内容

    效果图 代码 复制下来直接运行就可以
  • 计算机视觉

    手写字体的检测 1 Adaboost进行手写字体的检测 导入mnist数据集 import tensorflow examples tutorials mnist input data as input data data dir MNIS
  • QT的Frame背景图片设置自学版

    1 新建一个qt rescource file file gt new file gt qt gt name path设置 gt 包括所需主项目 gt finish 2 edit gt resource 3 add gt add prefi
  • 微信小程序如何循环控制一行显示几个wx:for

    正如上图所显示的一样 我们改如何控制一行显示几个图形呢 首先第一种方法 数量少的可以自己一行一行的写 但是当数据很多的时候呢 这时候就需要我们区使用循环进行代码的编写 废话不多数 直接写代码 demo item width 40 demo
  • JVM系列(六) JVM 对象终结方法finalize

    我们有几个特别容易混淆的关键字final finally finalize 他们之间的区别是什么 final 是java关键字 finally 是try catch finally finalize 是Object 根类的方法 今天我们着重
  • 「PAT乙级真题解析」Basic Level 1073 多选题常见计分法 (问题分析+完整步骤+伪代码描述+提交通过代码)

    乙级的题目训练主要用来熟悉编程语言的语法和形成良好的编码习惯和编码规范 从小白开始逐步掌握用编程解决问题 PAT乙级BasicLevelPractice 1073 多选题常见计分法 问题分析 题设要求按照老师批改多选题的方法来计算学生的总分
  • Map.entry详解

    Map entrySet 这个方法返回的是一个Set
  • 【软件工程基础复习整理】第一章软件工程基础前言(1)软件、工程和软件工程

    想要把软件缺陷全消灭 要用最锐利的目光去审视每一行代码 用最慎密的心思来制定每一份计划 用最严谨的态度去查看每一项工作 不掌握一定的软件工程知识 不按软件工程的有关原理进行软件开发 不积极学习新的软件开发方法和技术 就不能高效 高质量地开发
  • HCIP第六天

    OSPF的不规则区域 OSPF区域划分的要求 1 区域之间必须存在ABR 2 区域划分必须按照星型拓扑结构划分 1 远离骨干的非骨干区域 2 不连续骨干 1 通过VPN隧道将R4连接到骨干区域中 使其合法化 1 当一个路由器同时连接骨干区域

随机推荐