加密基本知识:密钥、签名、证书

一、密码(clpher)

  • 是一种用于加密或者解密算法
密码学中的密码(cipher)和我们日常生活中所说的密码不太一样,计算机术语『密码 cipher』是一种用于加密或者解密算法,而我们日常所使用的『密码 password』是一种口令,它是用于认证用途的一组文本字符串,这里我们要讨论的是前者:cipher。

二、密钥(key)

  • 密钥是一种参数,它是在使用密码(cipher)算法过程中输入的参数
  • 密文 = 密码(密钥,明文) 或者 密文 = 加密函数(密钥,明文)
  • 密钥是决定密文是否安全的重要参数,通常密钥越长,破解的难度越大,越安全。
  • 密钥分为对称密钥非对称密钥
密钥是一种参数,它是在使用密码(cipher)算法过程中输入的参数。同一个明文在相同的密码算法和不同的密钥计算下会产生不同的密文。很多知名的密码算法都是公开的,密钥才是决定密文是否安全的重要参数,通常密钥越长,破解的难度越大,比如一个8位的密钥最多有256种情况,使用穷举法,能非常轻易的破解,知名的DES算法使用56位的密钥,目前已经不是一种安全的加密算法了,主要还是因为56位的密钥太短,在数小时内就可以被破解。密钥分为对称密钥与非对称密钥

三、明文/密文

  • 明文(plaintext):加密之前的原始数据。
  • 密文(ciphertext):是通过密码运算后得到的结果。

四、对称密钥(Symmetric-key algorithm)

  • 又称为共享密钥加密。(通讯的两端共享)
  • 对称是指:加密和解密的过程中使用的密钥相同。
  • 需要在通讯的两端共享,让彼此知道密钥是什么对方才能正确解密。
  • 计算速度快,但是不安全。 密文 = 密码(密钥,明文) ,知道了密文,密钥和密码,就可推出明文数据
  • 如果每个客户端与服务端单独维护一个密钥,那么服务端需要管理的密钥将是成千上万,这会给服务端带来噩梦
  • 常见的对称加密算法:DES、3DES、AES、RC5、RC6
  • 采用更复杂的密钥管理和交换协议,如公钥基础设施(PKI)和密钥分发中心(KDC),来提高系统的安全性。

五、非对称密钥(public-key cryptography)

  • 又称为公开密钥加密
  • 服务端生成一对密钥,私钥与公钥
  • 私钥保存在服务端,公钥发布出去,供任何人使用
  • 加密:密文 =  密码(明文,公钥)==解密==>   明文 = 密码(密文,私钥)
  • 公钥加密,私钥解密
  • 客户端公钥加密明文得到密文传输给服务端
  • 服务端私钥解密密文得到明文

六、数字签名

  • 验证传输的数据是不是真实数据
  • 防止传输的数据篡改或者被调包
  • 非对称加密的一种应用场景,不过是反过来的,用私钥来加密,通过与之配对的公钥来解密。

过程梳理:

第一阶段:创建并发送签名
  • 生成摘要:服务器先使用SHA-256哈希算法对原始报文进行处理,产生一个唯一的摘要信息(Digest)。这一步确保了任何对报文的微小改动都会导致摘要不同。

  • 签名生成:接着,服务器利用自己的私钥对生成的摘要信息(Digest)进行加密,形成数字签名。这一操作基于非对称加密技术,确保了只有对应的公钥能够验证签名,从而证明报文来源的可靠性和完整性。

  • 发送信息:服务器将原始报文这个数字签名一起发送给客户端。注意,这里原始报文并未加密,而是明文发送,因为真正的安全在于签名的验证过程。

    • 摘要=hash(报文)
      数字签名 = 密码(摘要,私钥)

      数字签名 = 密码(hash(报文),私钥)

第二阶段:验证签名与身份
  • 接收数据:客户端收到服务器发送的原始报文及签名。

  • 签名验证:客户端使用服务器提供的公钥尝试解密接收到的数字签名。如果解密成功,说明签名确实是用对应的私钥生成的,从而验证了发送者的身份。同时,解密结果得到摘要信息(Digest1)。

    • 摘要 = 密码(数字签名,公钥)

第三阶段:验证报文完整性
  • 计算本地摘要:客户端对收到的原始报文同样应用SHA-256哈希算法,计算出一个新的摘要信息(Digest2)。

  • 比对摘要:最后,客户端比较从签名解密得到的摘要(Digest1)与自己计算出的摘要(Digest2)。如果两者完全相同,这表明报文在传输过程中未被篡改,内容完整可信。反之,如果摘要不匹配,则报文可能已被修改。

    • 摘要 = hash(报文)

七、数字证书(Certificate Authority)

        权威机构给某网站颁发的认可凭证,确定服务器是真实的。

问题

举例子:

        A厂家给你们家安装锁,同时把钥匙也交给你,只要钥匙能打开锁,你就可以确定钥匙和锁是配对的,如果有人把钥匙换了或者把锁换了,你是打不开门的,你就知道肯定被窃取了,但是如果有人把锁和钥匙替换成另一套表面看起来差不多的,但质量差很多的,虽然钥匙和锁配套,但是你却不能确定这是否真的是A厂家给你的,那么这时候,你可以找质检部门来检验一下,这套锁是不是真的来自于A厂家,质检部门是权威机构,他说的话是可以被公众认可的。 ​

        同样的, 因为如果有人(张三)用自己的公钥把真实服务器发送给浏览器的公钥替换了,于是张三用自己的私钥执行相同的步骤对文本Hash、数字签名,最后得到的结果都没什么问题,但事实上浏览器看到的东西却不是真实服务器给的,而是被张三从里到外(公钥到私钥)换了一通

解决

        如何保证你现在使用的公钥就是真实服务器发给你的呢?

        我们就用数字证书来解决这个问题。数字证书一般由数字证书认证机构(Certificate Authority)颁发,证书里面包含了真实服务器的公钥和网站的一些其他信息,数字证书机构用自己的私钥加密后发给浏览器,浏览器使用数字证书机构的公钥解密后得到真实服务器的公钥。这个过程是建立在被大家所认可的证书机构之上得到的公钥,所以这是一种安全的方式。

        机构私钥:GS    机构公钥:GG

        服务器公钥:FG

        实际上就是,在服务器分发公钥FG给浏览器的时候,经过了一层机构的包装,由机构用它自己的私钥GS加密这个服务器给的公钥FG信息,并会将对应的公钥GG给到浏览器,浏览器通过这个公钥GG解密得到公钥FG。

八、数字签名为什么要用私钥加密公钥解密?

数字签名使用私钥加密而公钥解密的机制,其核心目的在于确保信息的完整性和来源的不可抵赖性

  • 验证发送方身份:私钥只有签名者本人持有,且应保持秘密。使用私钥进行签名意味着任何人都可以使用与之对应的公钥来验证签名,但不能伪造签名。这证明了信息确实出自持有对应私钥的发送方,从而确认了发送者的身份。

  • 保证数据完整性:数字签名通常包括对原始消息的哈希值进行加密,而不是直接加密消息本身。这样,接收方在用公钥验证签名时,会重新计算消息的哈希并与解密后的签名比较。如果两者一致,说明消息在传输过程中未被篡改。

  • 不可抵赖性:由于私钥的私密性,一旦消息被私钥签名,发送方就不能否认他们曾经发送过该消息,因为除了他们自己,没有人能生成有效的签名。这提供了法律上的可接受证据,即发送方认可了消息内容。

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

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

相关文章

数据恢复篇:5 款最佳 Mac 数据恢复软件

说到保护我们的数字生活,数据恢复软件的重要性怎么强调都不为过。无论您是意外删除了假期照片的普通用户,还是面临硬盘损坏的专业人士,随之而来的恐慌都是普遍存在的。幸运的是,数据恢复工具可以缓解这些压力。在Mac用户可用的众多…

搜维尔科技:使用Manus VR手套和ART光学追踪功能实现虚拟场景工业仿真操作

:使用Manus VR手套和ART光学追踪功能实现虚拟场景工业仿真操作 搜维尔科技:使用Manus VR手套和ART光学追踪功能实现虚拟场景工业仿真操作

Android C++系列:JNI中的线程操作

Java中创建线程三种方式: 继承Thread类创建线程类;通过Runnable接口创建线程类;通过Callable和Future创建线程。Native 中支持的线程标准是 POSIX 线程,它定义了一套创建和操作线程的 API 。 我们可以在 Native 代码中使用 POSIX 线程,就相当于使用一个库一样,首先需要包…

android中获取视频的预览图

1.将视频导入raw文件中(转为bitmap图像) MediaMetadataRetriever 类主要用于从本地文件或者网络上的文件获取元数据信息,例如视频的帧图像、持续时间等,并不支持直接从网络地址获取视频帧 MediaMetadataRetriever retriever new…

zabbix小白入门:从SNMP配置到图形展示——以IBM服务器为例

作者 乐维社区(forum.lwops.cn)许远 在运维实践中,Zabbix作为一款强大的开源监控工具,被广泛应用于服务器、网络设备和应用程序的监控,成为保障业务连续性和高效运行的关键。然而,对于Zabbix的初学者来说&a…

FactoryBean 原理简介

FactoryBean 首先是一个工厂类,它可以生产指定的Bean,特殊之处在于它可以向Spring容器中注册两个Bean,一个是它本身,一个是FactoryBean.getObject()方法返回值所代表的Bean。通过实现 FactoryBean 接口,你可以控制某个…

线程和进程的区别及应用场景

线程和进程的区别及应用场景 大家好,我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿!今天我们将深入探讨计算机中两个重要的概念:线程和进程。这两者在操作系…

人工智能--循环神经网络

个人主页:欢迎来到 Papicatch的博客 课设专栏 :学生成绩管理系统 专业知识专栏: 专业知识 文章目录 🍉引言 🍉概述 🍈基本概念 🍍定义 🍍结构 🍌输入层 &#…

行业模板|DataEase旅游行业大屏模板推荐

DataEase开源数据可视化分析工具于2022年6月发布模板市场(https://templates-de.fit2cloud.com),并于2024年1月新增适用于DataEase v2版本的模板分类。模板市场旨在为DataEase用户提供专业、美观、拿来即用的大屏模板,方便用户根据…

探索编程世界的奇妙之旅

在这个数字化时代,编程,这一曾经看似高深莫测的技能,正逐渐渗透到我们生活的方方面面。从智能手机上的应用程序,到自动驾驶的汽车,再到支撑互联网运行的庞大服务器集群,背后都离不开编程的力量。今天&#…

【CSharp】使用enum枚举编程的优点

【CSharp】使用enum枚举编程的优点 1.背景2.代码1.背景 在程序开发中为什么会使用enum枚举呢,其实不使用enum代码也能跑, 但是随着业务越来越复杂,年代久远,那也许就只能你能跑。 所谓面向bug编程,来获得不可取代地位的思维逻辑,在AI时代洪流面前,从一开始就将错付。 …

开关电源的电路组成原理

一、 开关电源的电路组成 开关电源的主要电路是由输入电磁干扰滤波器(EMI)、整流滤波电路、功率变换电路、PWM控制器电路、输出整流滤波电路组成。辅助电路有输入过欠压保护电路、输出过欠压保护电路、输出过流保护电路、输出短路保护电路等。 开关电源…

【语音识别】传统语音识别算法概述,应用场景,项目实践及案例分析,附带代码示例

传统语音识别算法是将语音信号转化为文本形式的技术,它主要基于模式识别理论和数学统计学方法。以下是传统语音识别算法的基本概述: 1. 基本原理 传统语音识别算法包括以下几个关键步骤: 预处理:将原始语音信号进行采样、滤波、…

基于Hadoop平台的电信客服数据的处理与分析④项目实现:任务18: 数据展示

任务描述 接下来我们需要将根据业务需求将某人按照不同维度查询出来的结果,展示到Web页面上。 任务指导 数据展示模块流程图: 数据展示使用Java的SSM框架,需要实现的代码包括: 1. 实体类 2. 数据库操作 3. 业务逻辑操作 4.…

新疆水博会将举办多场高端论坛探析水利科技创新发展

由新疆维吾尔自治区水利学会主办的第三届新疆国际水利科技博览会暨新疆水利科技创新发展论坛,将于2024年8月8日至9日在新疆国际会展中心召开,同期将举办第三届新疆国际供排水及智慧水务技术设备展览会。 据悉,新疆水博会期间将举办新疆水利科…

springboot旅游管理系统-计算机毕业设计源码16021

摘 要 本文旨在设计和实现一个基于Spring Boot框架的旅游管理系统。该系统通过利用Spring Boot的快速开发特性和丰富的生态系统,提供了一个高效、可靠和灵活的解决方案。系统将实现旅游景点信息的管理、线路规划、跟团游玩、旅游攻略、酒店信息管理、订单管理和用户…

MySQL—创建和修改数据表结构

创建表 实例: CREATE TABLE user (id INT,name VARCHAR(255),password VARCHAR(255),birthday DATE) CHARACTER SET utf8 COLLATE utf8_bin ENGINE INNODB; 显示数据库中的表 show tables from hsp; 显示表结构 desc dept; 修改表 实例: 代码&…

Rust破界:前端革新与Vite重构的深度透视(中)

Rust破界:前端革新与Vite重构的深度透视 Rust 重构 Vite 的深度剖析技术瓶颈与 Rust 的解法实例分析:性能跃升的实践 Rust 在前端工具链的广泛影响从 Vite 到更广阔的舞台成功案例:其他前端项目的 Rust 实践技术动因与行业趋势多样性思考&…

第十五章 路由器综合路由配置

实验目标 掌握综合路由器的配置方法; 掌握查看通过路由重分布学习产生的路由; 熟悉广域网线缆的链接方式; 实验背景 假设某公司通过一台三层交换机连到公司出口路由器 R1 上,路由器 R1 再和公司外的另一台路由器 R2 连接。…

C++中using关键字介绍

C中using关键字介绍 C中using关键字有两种用法,using 指令(Using Directive)和using 声明(Using Declaration) using 指令影响整个命名空间,using 声明只影响特定名称。 using 指令 定义:usi…