密码学(终极版)

加密 & 解密

备注:密码学领域不存在完全不能破解的密码,但是如果一个密码需要很久很久,例如一万年才能破解,就认为这个密码是安全的了。

对称加密
非对称加密

公钥加密、私钥解密
私钥签名、公钥认证

非对称的底层原理是密码学,密码学的底层是数学。

非对称加密的数学底层原理是:两个大质数相乘很容易得到一个结果,但是相反,将这个结果反推到是哪两个质数相乘却非常困难。

秘钥长度可以理解为两个质数相乘结果的大小,秘钥越长则使用的两个质数的相乘结果越大。
在这里插入图片描述

签名 & 验签

私钥签名,公钥认证。

公钥验证数字签名的过程如下:

  1. 获取要验证的数据、公钥和数字签名。
  2. 使用公钥对数字签名进行解密,得到解密后的哈希。
  3. 对要验证的数据进行哈希计算,通常使用与创建数字签名时相同的哈希算法。
  4. 将哈希计算得到的结果与解密后的哈希进行比较。
  5. 如果两者完全一致,则表明数字签名有效,验证通过;否则,数字签名无效,验证失败。

再通俗一点:公钥验证通常是 1. 通过使用公钥对数字签名解密后,得到hash值;2. 对data数据进行hash。3. 比较两个hash值是否一样来实现的。

参考链接SSH 原理与应用

哈希

哈希使用场景1:

对一个很大的文件进行签名很浪费计算机性能,因此一般情况下会先对待签名的文件进行哈希。(通过哈希来提取这个文件的特征-生成固定长度的字符串,也可以理解成这个文件的身份证,即唯一标识)。然后在对哈希值进行签名。

哈希使用场景2:

并不是所有的加密都使用非对称加密,对于很大的文件很浪费计算机性能。通常情况是利用对称加密和非对称加密结合的方式。即通过对称加密算法对大文件进行加密,然后通过非对称加密算法对对称加密的秘钥进行加密。

数字证书

上面的非对称加密已经是非常安全的了,包括验签都是没有问题的。但是还要一个没有解决的问题就是 “中间人” 攻击。

举例:Bob 想要把一个带数字签名的文件传递给 Alice 。于是 Bob 生成了公钥和私钥,用私钥签署了文件。然后把公钥上传到一个公共服务器上。如果一切顺利,那 Alice 去下载这个公钥,然后就可以验证签名,确认文件的确是 Bob 发出的,同时没有被篡改过。但是这里的安全漏洞是明显的,那就是 Alice 无法确认她下载的公钥是不是真的是 Bob 的。这就给所谓的“中间人攻击”提供了可能。假设在 Bob 的文件还没有到达 Alice 之前,黑客发起了中间人攻击,删除 Bob 的文件,然后签署一个假文件发送给 Alice ,Alice 收到后去公共服务上下载的公钥其实也被黑客替换过的,她用这个公钥去验证了签名,自认为文件就是 Bob 发出的,所以被骗了。其实仔细想想,问题就出在公钥本身没有办法证明自己的主人是谁

所以要避免中间人攻击,就要使用数字证书。Bob 签名文件之后,给 Alice 发送时附上自己的证书。Alice 收到证书之后,就可以信任证书中的公钥的确就是 Bob 的了。有了这个公钥,可以验证文件附带的数字签名是 Bob 的。数字签名没问题,就保证了文件是没有被篡改过的。至于 Alice 如何确认证书本身是可信的,稍后我们聊 HTTPS 的过程中再展开聊。

数字证书是数字签名的升级,数字证书能证明公钥属于谁。

数字证书中的数字签名是CA的签名。

那么怎么确定CA是没问题的呢?计算机或者操作系统等在出厂的时候默认了权威的根证书的公钥,然后就可以来验证传过来的证书的真伪。
在这里插入图片描述

数字证书场景的两个应用场景

1、数字签名
如上。
2、HTTPS
比如,我现在用浏览器来访问谷歌服务器。要建立加密通道,首先第一步是要传递公钥过来,但是服务器传递过来的公钥如果过程中被篡改过,那么后续的加密通信也就全无安全性可言了。所以谷歌需要先去 CA 机构申请 SSL 证书,放到自己的服务器上。这样,我在浏览器中输入谷歌的网址,谷歌那边会首先给浏览器发送 SSL 证书。注意,各个浏览器中都内置了对全球各大 CA 机构的验证机制,底层的原理就是拥有 CA 们的公钥,可以验证证书上 CA 的签名。如果证书没有问题,浏览器就可以断定证书中携带过来的公钥就是谷歌的。这时候,浏览器会生成一个秘钥,注意这里就是对称加密的思路了,发送给谷歌服务器。这样,谷歌拥有浏览器的加密秘钥,可以用对称加密的思路来跟浏览器通信了,这样一个双向的加密通信通道也就开通了。对称加密的加密效率要比非对称高,所以大量数据的传递首选对称加密。

参考链接:数字证书SSL

参考链接:HTTPS

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/72950.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

FreeRTOS任务状态查询

一.任务相关API vTaskList(),创建一个表格描述每个任务的详细信息 char biaoge[1000]; //定义一个缓存 vTaskList(biaoge); //将表格存到这缓存中 printf("%s /r/n",biaoge); 1.uxTaskPriorityGet(&#xf…

yolov5代码详解--3.python代码脚本

三、val.py val.py的主要作用是对训练好的模型进行验证(或评估)。具体来说,它用于在指定的验证集上评估模型的性能,计算各项评估指标,并输出结果。val.py通常在模型训练完成后运行,用于验证模型的检测精度、…

无人机应用探索:玻纤增强复合材料的疲劳性能研究

随着无人机技术的快速发展,轻量化已成为其结构设计的核心需求。玻纤增强复合材料凭借高强度、低密度和优异的耐环境性能,成为无人机机身、旋翼支架等关键部件的理想选择。然而,无人机在服役过程中需应对复杂多变的环境:高空飞行时…

Python SQLite3 保姆级教程:从零开始学数据库操作

Python SQLite3 保姆级教程:从零开始学数据库操作 本文适合纯新手!无需任何数据库基础,跟着步骤操作即可掌握 SQLite3 的核心用法。 目标:让你像用记事本一样轻松操作数据库! 目录 什么是 SQLite3?环境准…

C语言中的整数类型(short,int,long和long long)

整数是编程中最常见的一种数据类型,C语言提供了多种整数类型,包括 short、int、long 和 long long,它们的主要区别在于存储范围和内存占用的大小。 本节将详细讲解这些整数类型的定义、特性、使用场景以及注意事项,帮助你全面理解…

使用jcodec库,访问网络视频提取封面图片上传至oss

注释部分为FFmpeg(确实方便但依赖太大,不想用) package com.zuodou.upload;import com.aliyun.oss.OSS; import com.aliyun.oss.model.ObjectMetadata; import com.aliyun.oss.model.PutObjectRequest; import com.zuodou.oss.OssProperties;…

游戏引擎学习第147天

仓库:https://gitee.com/mrxiao_com/2d_game_3 上一集回顾 具体来说,我们通过隐式计算来解决问题,而不是像数字微分分析器那样逐步增加数据。我们已经涵盖了这个部分,并计划继续处理音量问题。不过,实际上我们现在不需要继续处理…

使用Dockerfile打包java项目生成镜像部署到Linux_java项目打docker镜像的dockerfile

比起容器、镜像来说,Dockerfile 非常普通,它就是一个纯文本,里面记录了一系列的构建指令,比如选择基础镜像、拷贝文件、运行脚本等等,每个指令都会生成一个 Layer,而 Docker 顺序执行这个文件里的所有步骤&…

Linux -- 磁盘结构、文件系统ext2

一、磁盘 1.磁盘的物理结构 2.磁盘的存储结构 盘片:是机械硬盘存储数据的主要介质,一般由铝合金或玻璃等材料制成,表面涂有一层磁性材料。数据通过磁头在盘片的磁性涂层上进行磁化来记录,磁化的不同方向代表二进制的 0 和 1。盘面…

标量、向量、矩阵与张量:从维度理解数据结构的层次

在数学和计算机科学中,维度描述了数据结构的复杂性,而标量、向量、矩阵、张量则是不同维度的数据表示形式。它们的关系可以理解为从简单到复杂的扩展,以下是详细解析: 1. 标量(Scalar):0维数据 定义:单个数值,没有方向,只有大小。 维度:0维(无索引)。 示例: 温度…

点云数据处理--splat转3dtiles

文章目录 处理流程简介核心功能实现数据读取与格式转换定义Point类数据读取splat转gltf 点云数据分割定义四叉树递归生成3dtiles瓦片 生成tileset.json递归生成tileset.json计算box 主函数调用渲染 下一步工作性能优化渲染效果调优其他 源码地址: github 处理流程简…

OneM2M:全球性的物联网标准-可应用于物联网中

OneM2M 是一个全球性的物联网(IoT)标准,旨在为物联网设备和服务提供统一的框架和接口,以实现设备之间的互操作性、数据共享和服务集成。OneM2M 由多个国际标准化组织(如 ETSI、TIA、TTC、ARIB 等)共同制定,目标是解决物联网领域的碎片化问题,提供一个通用的标准,支持跨…

【Python 入门基础】—— 人工智能“超级引擎”,AI界的“瑞士军刀”,

欢迎来到ZyyOvO的博客✨,一个关于探索技术的角落,记录学习的点滴📖,分享实用的技巧🛠️,偶尔还有一些奇思妙想💡 本文由ZyyOvO原创✍️,感谢支持❤️!请尊重原创&#x1…

Java爬虫获取淘宝商品详情数据的完整指南

在电商领域,获取商品详情数据对于市场分析、价格监控、用户体验优化等场景具有重要意义。淘宝作为国内领先的电商平台,提供了丰富的API接口供开发者使用,其中item_get和item_get_pro接口可以用来获取商品的详细信息。本文将详细介绍如何使用J…

Ubuntu 下 nginx-1.24.0 源码分析 - ngx_init_cycle 函数

nei声明在 src/core/ngx_cycle.h ngx_cycle_t *ngx_init_cycle(ngx_cycle_t *old_cycle);实现在 src/core/ngx_cycle.c ngx_cycle_t * ngx_init_cycle(ngx_cycle_t *old_cycle) {void *rv;char **senv;ngx_uint_t i, n;ngx_log_t …

qt 操作多个sqlite文件

qt 操作多个sqlite文件 Chapter1 qt 操作多个sqlite文件1. 引入必要的头文件2. 创建并连接多个SQLite数据库3. 代码说明4. 注意事项 Chapter2 qt 多线程操作sqlite多文件1. 引入必要的头文件2. 创建数据库操作的工作线程类3. 在主线程中创建并启动多个工作线程4. 代码说明5. 运…

最新版本WebContext构造函数-避坑

import org.thymeleaf.context.IWebContext; import org.thymeleaf.context.WebContext; 当你想把页面信息全部获取出来存到redis缓存中使用时,SpringWebContext在Spring5中报错 SpringWebContext ctx new SpringWebContext(request, response,request.getServlet…

用Python分割并高效处理PDF大文件

在处理大型PDF文件时,将它们分解成更小、更易于管理的块通常是有益的。这个过程称为分区,它可以提高处理效率,并使分析或操作文档变得更容易。在本文中,我们将讨论如何使用Python和为Unstructured.io库将PDF文件划分为更小的部分。…

neo4j随笔-将csv文件导入知识图谱

目录 导入前的准备 导入csv文件 导入nodes1.1.csv并动态为节点添加标签 ​编辑导入relations1.1.csv并动态为关系添加标签 结果 导入前的准备 我有两个csv文件 nodes1.1.csv存放节点信息,用记事本打开,能正常显示,且编码为UTF-8,就可以…

cpu 多级缓存L1、L2、L3 与主存关系

现代 CPU 的多级缓存(L1、L2、L3)和主存(DRAM)构成了一个层次化的内存系统,旨在通过减少内存访问延迟和提高数据访问速度来优化计算性能。以下是对多级缓存和主存的详细解析: 1. 缓存层次结构 现代 CPU 通…