网络安全—PKI公钥基础设施
文章目录
- 前提知识
- 散列函数
- 非对称加密
- 数字签名
- PKI
- 受信任的人
- RA注册
- CA颁发
- IKE数字签名认证(交换证书)
- 密钥管理
前提知识
散列函数
散列也可以叫哈希函数,MD5、SHA-1、SHA-2、、(不管叫啥,都记得是同一个东西就行)
散列的特点:
- 固定大小
不管你进行散列的文件大小有多大,最后输出的都是一个固定长度的散列值 - 雪崩效应
这个不要误解是缺点,这个雪崩其实是优点,意思是在你做散列之前的那个值如果其中有一个比特改变了,那出来的散列值将会与没动之前的值大大不同。这就叫做雪崩效应。这就很好的避免了别破解的手段,只能通过碰撞手段,在最短时间内找到不同的文件能够输出一样的散列值。 - 单向
散列函数就是一个单向函数。是一种只能由输入推断输出但不能由输出逆推输入的函数,即使攻击者知道了加密算法和密文,他们也很难解密出明文。 - 冲突避免
意思是很难在一个很短的时间内找到另一个散列值和现在输出的散列值一样的文件,就好比我们现在的指纹,短时间内很难找到另外一个人的指纹和我的指纹一样,冲突就避免了。
非对称加密

熟悉的 公钥加密,自己生成一对公钥私钥,公钥可以发布出去谁都可以知道,但是私钥只有自己知道。
- 加解密
在加解密中的公私钥中,是使用公钥加密私钥解密,私钥加密的公钥解不开,这是在加解密中是这样的。- 签名
在签名中的公私钥,是私钥签名公钥验证,公钥无法签名,只有私钥能验证持有者身份,和加解密是相反的,首先算法上就是不一样的。- 通常加解密的公私钥和签名的公私钥不一样,但是理论上是可以一样的(如果是我,我肯定两对钥匙不同,不然有一个私钥泄露了那也只崩一边不会两边都崩)
签名算法只是算法不同性导致他是使用私钥签名,公钥验证,有的人会觉得签名怎么看起来一点都不安全,其实恰恰相反,因为我们签名就是用来给别人验证的,安全性是建立在你私钥保管好了,没有人能够伪造你的签名,因为不知道你的私钥。
小结:由于这种非对称加密的出现虽然一开始觉得没有对称美,但是后来发现非对称加密才是最优雅的安全系数提升了很多的加密方式,用久了也会觉得非对称加密才是真正的对称美,实在是太优雅了!
但是由于他的缺点是加密速度非常慢,密文会变长,既然如此,那就正好了,我们散列出来的值就很小,这就是后面的数字签名,我们对散列值进行签名就是数字签名,数字签名由于是非对称的签名,签名是私钥签,公钥验证,所以其他人可以通过公钥来验证身份。
PGP就是结合了对称和非对称,就是使用随机产生的对称会话密钥加密,将会话密钥使用非对称加密->即使用私钥进行加密,那这样只有持有我的公钥的人可以拿出这个会话密钥进行解密这份数据包。很优雅的解决了非对称加密速度慢的问题。
数字签名

主要是关注图中的数字签名。
- 数字签名流程
原文件进行散列函数得到唯一的散列值
↓
散列值使用发送者的私钥进行签名
↓
发送者的数字签名就出来了(无法伪造)
↓
接收方使用发送者的公钥进行验证签名,即得到散列值
↓
将得到的文件做一个散列函数得到散列值,
比对一下两个散列值是否相同即完成了数字签名验证的过程了。
PKI
先明确一下我们现在赤裸裸的进行交换公钥交换信息的话会出现什么问题
- 双方翻脸不认人,某一方可以说我的收到的信息不是长这样或者我发过去的时候不是这么写的,中间肯定有黑客截获了直接把我所有信息都替换掉了?
- 当出现上面这种争执的时候就可能双方给得打官司了,谁也不服谁。
- 你怎么知道交换公钥的时候,那个公钥是我的呢?万一早就在公钥交换的过程就被攻击了,那我们以前交流的信息其实就没有一条是可信任的了。
受信任的人
之前看到过一个视频讲了一个例子十分好,在我们去到新公司上班的时候如何快速和其他人打好关系建立信任,那就是需要一位德高望重的老员工带着我们去一个一个的认识和介绍。
OK,这一点的提出貌似有了点头绪,那我们为了避免交换公钥后出现的各种不安全问题,就需要一个可信任的第三方机构。那么这个机构就是我们的RA注册机构、CA证书颁发机构等等,多个机构和设施结合就是我们的PKI。
PKI最核心的就是CA,颁发证书的机构,他颁发的证书可信的是很高的,也就是说大家都相信他颁发的证书,都去他那里注册,然后这样大家就可以通过这个"老员工"相互认识和通信了,可信度也高。
RA注册
注册机构,首先我们要知道RA是类似于我们去银行前台办理一系列的手续,前台就是我们的RA,所以说有时候也赖不得说线下办理麻烦,不能搞个线上吗?其实线下是为了保证你的业务安全性。
回到正题,RA注册就是一个注册你身份到PKI这个机构里面,让你可以和其他人一起玩,一起交流沟通,注册完成后就能够去CA颁发一个证书给你了。
注册一般最基本的就是提交你的公钥,你的ID名字、有效期等等,最重要的是你的公钥,线下提交的总不能被黑客劫持到了吧?!当然了,有些地区是支持你线上办理的,有一说一,你都这么谨慎去办理CA了,还不如线下来的安全,还敢线上办理?(没有贬低线上办理的意思)
(关于注册的更多细节我就不深究了)
有时候还有需要你提交你办理的业务也就是说待会颁发的证书是什么类型的。
CA颁发
证书颁发机构。
明确一个点:CA证书服务器也可以类比成用户,他也是有私钥和公钥的,所以说我们是相信他的私钥不会丢失且能够保管好我们的信息的这么一个机构。
这个就是等你在前台办完手续后,通过资格认证后,我们的CA证书机构就会颁发一个属于你自己的证书,然后你就可以通过这个证书来和其他人做一个安全的公钥交换。
目前还有点懵,但是我们需要知道的是,我们公钥交换不安全,需要第三方给我们一个可靠的安全公钥交换,但是和我们预期的不同的是,不是机构带着我们去做公钥交换,而是给你一个可以提供安全公钥交换的证书,交换证书就能够完成安全的公钥交换。下面开始解析具体细节。
- 首先我们的公钥和其他信息交给了CA,然后CA就开始生成属于我的证书
CA证书里面最基本的内容:ID名(你自己的)、你的公钥、证书服务器的签名、有效期等等。- 这个签名很重要,签名是证书服务器的私钥签名的。需要证书服务器的公钥验证,巧了这不,我来到你家门办理业务,那么这个公钥待会肯定会给到我们,不用担心,因为他的公钥是给你一个根证书,里面有他的CA公钥
- 根证书:存着CA的个人信息、CA的公钥、CA的服务器签名。
到这的时候很熟悉,一股Kerberos的味道,用根证书解开别人的证书里面的CA服务器签名得到哈希散列值,然后用对方证书里面的东西做一个哈希散列值一对比两个一不一样就代表是否是成功且安全的交换了公钥了。
- 我们拿到证书了,就可以愉快的和其他人也有该机构颁发的证书进行安全的公钥交换了。

IKE数字签名认证(交换证书)
其实上面PKI已经完成工作了,也就注册申请证书了,如果你信任他,就拿着他颁发下来的证书和其他人进行公钥交换就行,如果需要深究那就需要理解为什么这么做还有为什么就可以实现安全的交换。
- 如下图所示
IKE(Internet Key Exchange)中数字签名认证通常涉及交换数字证书的过程。

多么优雅的一个图片,签名、根证书、交换等等一系列操作组合起来太优雅了!
回到正题,我们现在不用CA颁发的证书的话面临的问题就是之前提到过的,公钥交换不安全,由于可能被人截获替换了公钥,那么我们可能接下来的对话都被黑客操控者。
- 假设我们注册完成了,OK捋一下我们都有些什么
CA根证书 == CA个人信息、CA公钥、CA证书服务器签名、有效时间… - 我们要和对方交换证书的流程(使用IKE数字签名)
图中从左往右数
第一个包:我们将以后交流信息要使用到的散列函数和其他对方要知道的信息做一个散列哈希值,然后用自己的私钥进行数字签名。
第二个包:我的证书,是CA权威机构颁发下来的证书。
第三个包:我的个人信息(你的让人家知道你是谁)
第四个包:Header,其他关键信息 - 接收方接收到证书后如何操作得到我的公钥呢?
下面以接受方视角解释
首先接收方一定有CA根证书
↓
拿到数据包后第一件事情可以拿出根证书里面的CA公钥,将对方发送过来的证书里面的CA服务器的签名使用CA公钥进行验证(签名肯定是CA使用私钥给对方的信息签名的),验证得到一个散列哈希值
↓
取出对方证书里面的除了刚刚的签名,其他信息做一个散列哈希值。然后将之前验证得到的散列哈希值和现在这个散列哈希做一个对比就知道是否真的是对方发来的且这个这证书是可信的。
↓
这时候其实还要继续,我们通过对方的证书拿到了对方的公钥,然后就可以通过对方的公钥对那个第一个包的数字签名进行验证,然后得到哈希散列值,同理将对方要告诉我的其他信息也做一个散列哈希值,二者进行对比就知道公钥真真正正是对方的了。
开始通过问题来说明这个优雅的IKE数字签名
-
证书发的太多会不会造成威胁?
不会,证书给谁发都行,因为你去注册后,根证书你自己已经拿到了,根证书这玩意你总不能会说伪造吧?根证书里面有CA公钥,通过CA公钥能够验证别人发过来的证书里面的机构给他的CA服务器签名得到散列哈希值,然后其他信息做一个散列哈希函数得到的值和验证签名出来的一不一样就知道证书是否有效(当然还有检查有效时间) -
那你还是没解决掉别人盗用我证书的威胁啊?
别担心,不要忘记了还有一个数字签名,协商好的算法能不能验证出来就看刚刚解出来的对方申请下来的CA颁发的证书里面的公钥是不是对方的,这就无法盗用证书了。 -
那万一别人直接将整个证书劫持了,使用了攻击者自己申请好的证书发给我怎么办,我岂不时直接就啥都不清楚的被欺骗了?
别忘记了IKE数字签名流程里面还有你的ID号明文形式发送过去,这玩意要是篡改了,你证书总不能窜改吧,证书里面不是还有ID可以知道是不是对方吗?这两一对比你不就知道是不是对方了么。这就完美打破了你的这个"骇客"想法了。 -
万一证书里面的ID和我另一个人长得很像那我岂不是也会被骗到?
这个确实可以有一定概率骗到审核的人。
不过这就是你的不对了,不能赖别人,别人名字没有错,错的是你,你自己就要承担责任了,因为发送方没有任何过失,你自己这么不谨慎怪不了谁的。 -
最后还有一个问题不知道解决了没,那就是双方是否还可以翻脸不认人?
有了第三方权威机构后,除非你买通了权威机构,这也是不道德的行为,所以基本上你翻脸不认人是不可能的,因为你要说公钥不是对方造成我信息泄露的话,那赖不得人家,这可是安全的公钥交换,自己没有细心的检查不能怪别人。
私钥丢了呢?那也是你自己的问题,你泄露出去的,对方完全没有责任,私钥只有你自己的知道啊。我们没有协商任何的共享密钥。
密钥管理
密钥产生、更新、备份、恢复等等
(这里本人没有且不打算深入探究)
总结:
PKI就是帮助我们完成一个安全的公钥交换问题,解决了第三方直接伪造公钥的问题仅此而已,后面的你交流什么信息发送什么数据PKI不管的,给你颁发证书,用证书实现安全的公钥交换就行了。
相关文章:
网络安全—PKI公钥基础设施
文章目录 前提知识散列函数非对称加密数字签名 PKI受信任的人RA注册CA颁发IKE数字签名认证(交换证书)密钥管理 前提知识 散列函数 散列也可以叫哈希函数,MD5、SHA-1、SHA-2、、(不管叫啥,都记得是同一个东西就行&…...
推荐一款加速器,也可加速github
地址https://github.com/BeyondDimension/SteamTools...
springboot框架,中间库是mognodb,可以写入2个数据库的Demo
1-springboot版本: 2.3.9.RELEASE POM.xml文件: <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance&quo…...
基于Java SSM框架实现旅游资源网站系统项目【项目源码+论文说明】
基于java的SSM框架实现旅游资源网站系统演示 摘要 本论文主要论述了如何使用JAVA语言开发一个旅游资源网站 ,本系统将严格按照软件开发流程进行各个阶段的工作,采用B/S架构,面向对象编程思想进行项目开发。在引言中,作者将论述旅…...
015、控制流运算符match
1. 控制流运算符match Rust中有一个异常强大的控制流运算符:match,它允许将一个值与一系列的模式相比较,并根据匹配的模式执行相应代码。模式可由字面量、变量名、通配符和许多其他东西组成;后文会详细介绍所有不同种类的模式及它…...
个人博客主题 vuepress-hope
文章目录 1. 简介2. 配置2.1 个人博客,社媒链接配置 非常推荐vuepress-hope 1. 简介 下面的我的博客文章的截图 通过md写博客并且可以同步到github-page上 2. 配置 2.1 个人博客,社媒链接配置 配置文件 .vuepress/theme.ts blog: {medias: {BiliB…...
【LeetCode-剑指offer】--19.验证回文串II
19.验证回文串II 方法:双指针 首先考虑如果不允许删除字符,如何判断一个字符串是否是回文串。常见的做法是使用双指针。定义左右指针,初始时分别指向字符串的第一个字符和最后一个字符,每次判断左右指针指向的字符是否相同&#…...
锂电池寿命预测 | Matlab基于LSTM长短期记忆神经网络的锂电池寿命预测
目录 预测效果基本介绍程序设计参考资料 预测效果 基本介绍 锂电池寿命预测 | Matlab基于LSTM长短期记忆神经网络的锂电池寿命预测 程序设计 完整程序和数据获取方式:私信博主回复Matlab基于LSTM长短期记忆神经网络的锂电池寿命预测。 参考资料 [1] http://t.csdn…...
JSON 详解
文章目录 JSON 的由来JSON 的基本语法JSON 的序列化简单使用stringify 方法之 replacerstringify 方法之 replacer 参数传入回调函数stringify 方法之 spacestringify 方法之 toJSONparse 方法之 reviver 利用 stringify 和 parse 实现深拷贝 json 相信大家一定耳熟能详&#x…...
我不想学JAVA---------JAVA和C的区别
前言 我一个研究方向是SLAM的为什么要来学JAVA。 从九月份开学到现在,已经学了Linux,数据结构,SLAM,C的基础操作,期间还参与编写了一本VHDL的教材。还有上课、考试什么的其他杂七杂八的事情就不说了。 读研好苦逼&…...
不能错过的AI前沿开源工具!
🌈🌈🌈🌈🌈🌈🌈🌈 欢迎关注公众号(通过文章导读关注:【11来了】),及时收到 AI 前沿项目工具及新技术 的推送 发送 资料 可领取 深入理…...
为什么深度学习神经网络可以学习任何东西
下图你所看到的,是著名的曼德尔布罗特集,我们可以见证这个集合呈现出的复杂形态: 要理解神经网络如何学习曼德尔布罗特集,我们首先需要从最基础的数学概念讲起:什么是函数?函数本质上是一个将输入转化为输出…...
使用 SpringSecurity 发送POST请求出现 403
问题场景 在使用 SpringSecurity 时对一些访问权限进行了设置, 在用户请求资源时出现了403错误 , 通过检查代码发现请求权限是开放的, 并且切换成 GET 请求也是可以通过, 换成POST 请求就无法通过。 解决方法 在 SpringSecurity 中关闭 CSRF 因为 前端向后台发送 post 请求…...
解决Typora笔记上传到CSDN上图片无法显示的问题
解决Typora笔记上传到CSDN上图片无法显示的问题 一、发现问题二、分析问题三、解决问题图床介绍所需工具PicGo软件安装操作下载安装PicGo配置PicGo 设置Typora 四、总结 一、发现问题 当我们使用Typora这款强大的Markdown编辑器记录笔记时,经常会遇到一个让人困扰的…...
Vue3.0+Echarts (可视化界面)
Vue3.0Echarts (可视化界面) 1. 简介2. 安装2.1 下载安装Node.js2.2 全局下载项目脚手架2.3 创建项目 1. 简介 2. 安装 2.1 下载安装Node.js 2.2 全局下载项目脚手架 以管理员身份执行 npm install -g vue/cli vue --version2.3 创建项目 vue crea…...
编程语言的未来:探索技术进步的轨迹
编程语言的未来:探索技术进步的轨迹 随着科技的飞速发展,编程语言在计算机领域中扮演着至关重要的角色。它们是软件开发的核心,为程序员提供了与机器沟通的桥梁。然而,未来的技术进步将如何影响编程语言的走向呢?让我…...
SOLIDWORKS使用技巧——SOLIDWORKS草图绘制时一定要完全定义
SOLIDWORKS草图的定义状态有多种,按是否报错区分,如下: 1. 正常状态:欠定义、完全定义; 2. 错误状态的:过定义、悬空、无解; 其中,错误状态需要修复,不然会影响模型重…...
网络类型之GRE和MGRE和NHRP
GRE-通用路由封装 是一种简单的三层VPN封装技术,属于虚拟的点到点网络类型 优点:支持IP 网络作为承载网络、支持多种协议、支持IP 组播,配置简单,容易布署。 缺点:缺少保护功能,不能执行如认证、加密、以…...
uniapp获取日期
1.使用new Date()方法获取系统今天的日期,显示格式为:2023-10-28 <template><view class"content">{{date}}</view> </template> <script>export default {data() {return {date: new Date().toISOString().sl…...
编码和解码的未来之路
hello,我是小索奇。在计算机科学的世界中,编码和解码是无处不在的神奇力量,而现代技术的巅峰之一就是 ChatGPT。让我们一起探讨编码和解码如何与 ChatGPT 这一人工智能的杰作相互结合,打开了无限可能的数字世界之门。 ChatGPT的魔…...
Python|GIF 解析与构建(5):手搓截屏和帧率控制
目录 Python|GIF 解析与构建(5):手搓截屏和帧率控制 一、引言 二、技术实现:手搓截屏模块 2.1 核心原理 2.2 代码解析:ScreenshotData类 2.2.1 截图函数:capture_screen 三、技术实现&…...
shell脚本--常见案例
1、自动备份文件或目录 2、批量重命名文件 3、查找并删除指定名称的文件: 4、批量删除文件 5、查找并替换文件内容 6、批量创建文件 7、创建文件夹并移动文件 8、在文件夹中查找文件...
QMC5883L的驱动
简介 本篇文章的代码已经上传到了github上面,开源代码 作为一个电子罗盘模块,我们可以通过I2C从中获取偏航角yaw,相对于六轴陀螺仪的yaw,qmc5883l几乎不会零飘并且成本较低。 参考资料 QMC5883L磁场传感器驱动 QMC5883L磁力计…...
ffmpeg(四):滤镜命令
FFmpeg 的滤镜命令是用于音视频处理中的强大工具,可以完成剪裁、缩放、加水印、调色、合成、旋转、模糊、叠加字幕等复杂的操作。其核心语法格式一般如下: ffmpeg -i input.mp4 -vf "滤镜参数" output.mp4或者带音频滤镜: ffmpeg…...
VTK如何让部分单位不可见
最近遇到一个需求,需要让一个vtkDataSet中的部分单元不可见,查阅了一些资料大概有以下几种方式 1.通过颜色映射表来进行,是最正规的做法 vtkNew<vtkLookupTable> lut; //值为0不显示,主要是最后一个参数,透明度…...
C# 类和继承(抽象类)
抽象类 抽象类是指设计为被继承的类。抽象类只能被用作其他类的基类。 不能创建抽象类的实例。抽象类使用abstract修饰符声明。 抽象类可以包含抽象成员或普通的非抽象成员。抽象类的成员可以是抽象成员和普通带 实现的成员的任意组合。抽象类自己可以派生自另一个抽象类。例…...
springboot整合VUE之在线教育管理系统简介
可以学习到的技能 学会常用技术栈的使用 独立开发项目 学会前端的开发流程 学会后端的开发流程 学会数据库的设计 学会前后端接口调用方式 学会多模块之间的关联 学会数据的处理 适用人群 在校学生,小白用户,想学习知识的 有点基础,想要通过项…...
vulnyx Blogger writeup
信息收集 arp-scan nmap 获取userFlag 上web看看 一个默认的页面,gobuster扫一下目录 可以看到扫出的目录中得到了一个有价值的目录/wordpress,说明目标所使用的cms是wordpress,访问http://192.168.43.213/wordpress/然后查看源码能看到 这…...
scikit-learn机器学习
# 同时添加如下代码, 这样每次环境(kernel)启动的时候只要运行下方代码即可: # Also add the following code, # so that every time the environment (kernel) starts, # just run the following code: import sys sys.path.append(/home/aistudio/external-libraries)机…...
日常一水C
多态 言简意赅:就是一个对象面对同一事件时做出的不同反应 而之前的继承中说过,当子类和父类的函数名相同时,会隐藏父类的同名函数转而调用子类的同名函数,如果要调用父类的同名函数,那么就需要对父类进行引用&#…...
