安全通信|数据加密的由来|加密算法简介|中间人攻击与证书认证|身份验证

news2025/1/16 0:56:48

👈️下一篇

计算机网络-专栏👈️


数据加密的由来|加密算法简介|中间人攻击与证书认证

引言

在这里插入图片描述

客户端(client)-服务器(server)模式下,客户端与服务器间通信,如果明文传输数据,在传输过程被劫持,内容直接泄露了,非常不安全;再者,攻击者不仅劫持了数据还篡改了,这样就可能有更大的风险。

于是,为了防止数据泄露,我们很容易想到的是,数据传输前,对数据进行加密,不要明文传输。

那么,就有一个疑问:如何加密?能否解密?如何解密?

于是就有了如何对数据加密的问题。

另外,如果加密的机制被中间人得知,中间人劫持了整个通信过程,而客户端与服务器无感知,这又是一个很大的风险。这时的通信链路就成了:客户端<=>中间人<=>服务端。

于是就有了使用身份验证(如证书认证)来解决中间人攻击的问题。

加密算法

加密算法的分类

加密算法主要有对称加密、非对称加密和哈希算法。

哈希算法

首先,我们来看下哈希算法,它是一种将任意长度的输入数据通过特定算法转换为固定长度输出(哈希值)的算法

它的典型特点是单向性,即无法通过哈希值反推出原始数据,也就是说它只能加密数据,不能被解密。

主要用于验证数据的完整性和一致性,确保数据在传输或存储过程中未被篡改。

它可以理解为一个函数运算过程,f-就是哈希函数用来对明文x加密,得到一个固定长度的输出-哈希值y。
y = f ( x ) y=f(x) y=f(x)

应用

验证文件完整性

我们下载一些软件的时候常常在它的官网可以看到除了软件包外还提供了哈希值(如官方可能提供了软件包对应的sha512文件,里面包含了软件包sha512哈希运算后的哈希值,其中,sha512是一种哈希算法),它的作用就是用来帮助用户验证下载下来的软件文件完整性,

因为经过网络传输下载到用户本地的文件可能文件损坏——

比如有时候重新下载软件,重装软件就不再有先前的某个问题,可能就是由于软件包下载损坏导致的,

那么如何验证文件是否损坏,是否与官网提供的软件包完全一致?

那就要用到官方提供的这个哈希值验证。

如何验证文件完整性呢?

这个简单,我们已经直到哈希算法不可逆,也就是不能被解密,那我们下载下来的软件包文件重新在我们本地使用同样的哈希算法计算下哈希值,然后与官方提供的哈希值比对

一致就表示下载下来的文件是完整的;不一致,就表示我们下载下来的软件包有问题,可能在网络传输中软件包损坏了,那就需要重新下载了。

密码非明文存储

密码常常持久化到数据库系统,

我们已经听说过很多关于数据库泄露的事件,

那么,如果发生了数据库泄露,那么密码也就能泄露了,

而如果密码明文存储,无疑是有很大风险的。

于是,我们非常有必要非明文存储密码,这样即使数据库泄露,密码非明文存储,在不了解加密算法的情况下,也无法晓得密码原文是什么;甚至使用无法解密的算法(比如哈希算法)那自然更无法晓得密码原文是什么。

此种场景使用哈希算法简直再合适不过了,因为哈希算法天然不可逆,密码通过哈希算法加密后无法被还原回原文,即使数据泄露了,也无法得知密码原文是什么,只有用户自己知道密码原文,这样安全性会更高

至于数据库存储密码哈希值,如何验证登录密码呢?

这个也很简单,和上面我们刚刚分析的文件完整性验证方法类似,当用户密码登录时候,我们对输入的密码进行哈希运算,得到的值与数据库中存储的哈希值比对,一致就表示输入的密码正确。

局限

正如哈希算法本身天然的特点-单向性,被加密后的数据无法解密,无法还原回原文

因此在很多场景有局限,比如:我们将数据加密传输给服务器,服务器需要解密出请求参数才行,于是哈希算法就不适用了。

对称加密

刚刚我们了解了一种简单的加密算法-哈希算法,它具有单向性,不可逆,即无法还原明文。

于是我们有必要了解下其他的算法,具备可加密、可解密特点的加密算法。

对称加密和非对称加密都能满足这种需求。

首先,我们一起来看对称加密。

对称加密是指在加密和解密过程中使用相同的密钥。发送方使用密钥对数据进行加密,接收方则使用相同的密钥对数据进行解密

简单了解下原理:在加密过程中,将明文(原始数据)划分为固定长度的块,然后通过密钥和加密算法将这些块转换成对应的密文块。解密过程则是加密过程的逆操作,即使用相同的密钥和解密算法,将密文块还原为明文块。

特点

  1. 效率高:由于加密和解密使用相同的密钥,且算法相对简单,因此对称加密通常比非对称加密更快速,适合加密大量的数据
  2. 实现简单:对称加密算法的实现相对简单,不需要大量的计算和存储资源

缺点

但是,它也有一些安全隐患,主要体现在加密解密使用相同密钥,密钥一旦泄露,就相当于明文传输了,失去了加密的作用

同时,对称加密本身并未提供身份验证,也就是如果密钥泄露了,可能遭受中间人拦截、篡改数据,有很大风险,

因为客户端无法通过对称加密得知是否是和服务器通信还是在和中间人通信,

同样,服务器无法得知请求是直接来自客户端还是被中间人篡改后转发而来的。

而且对称加密,如果涉及到密钥交换,如何保证在交换密钥过程中密钥不被泄露是个很大的问题

通常来说,使用对称加密的话,前端后端约定好密钥写死在自己代码中,然后进行加密、解密,但是可能存在前端代码泄露的问题(加载到浏览器中运行,可能发生前端代码泄露),也无法完全保证密钥不丢失。

对于这些缺点,就要来看下非对称加密了,它解决了密钥交换问题,提供了一定程度的身份验证。以及通过证书认证进行身份验证,来表明响应来自服务端,而非中间攻击者。

非对称加密

公钥和私钥是成对出现的,它们通过一种算法得到,形成一个密钥对公钥是密钥对中公开的部分,而私钥则是非公开的部分

公钥公开,那就不存在泄露的问题了,因为它本身就是公开的,不怕泄露。

公钥是发给客户端的,客户端用公钥加密数据,而公钥加密的数据只能被私钥解密,因此即使数据泄露,或者公钥泄露,只要保证服务端私钥未被泄露,就无法获取原文数据。

非对称加密的优势

  • 安全性高:非对称加密算法的安全性基于数学难题,如大素数分解或离散对数问题,使得攻击者难以通过公钥计算出私钥
  • 提供一定的身份验证和数据完整性保护:非对称加密可以实现身份验证和数字签名(下面会介绍),从而一定程度上确保数据的来源和完整性。

注意事项

  • 效率问题相对于对称加密,非对称加密的加密和解密过程更加复杂,需要更多的计算资源和时间。因此,在处理大规模数据时,非对称加密可能不是最高效的选择。
  • 密钥管理:私钥的安全托管是非对称加密的关键。私钥必须严格保密,以防止数据泄漏和安全问题。

一定程度解决了身份验证问题

非对称加密在一定程度上解决了身份验证问题但依旧存在中间人攻击的风险

  • 数字签名:数字签名是一种使用私钥对数据进行加密(签名)的技术,用于验证数据的完整性和发送者(server)的身份

    发送者(server)使用自己的私钥对数据的摘要(通常是原始数据的哈希值)进行加密,生成数字签名并将该签名与原始数据一起发送给接收者(client)

    接收者(client)使用发送者的公钥解密数字签名得到数据的摘要(通常是原始数据的哈希值),并对原始数据进行相同的哈希运算然后将结果与解密后的摘要进行比较。如果两者一致,则表明数据在传输过程中未被篡改,且确实由声称的发送者(server)发送。

  • 中间人无法伪造发送者的私钥来生成有效的数字签名。因此,即使中间人篡改了数据,也无法生成与原始数据相匹配的数字签名。当接收者使用发送者的公钥验证数字签名时,会发现签名无效,从而揭示出潜在的中间人攻击(注意此种场景是客户端已经拿到了服务端提供的公钥)。

  • 但是,有可能在公钥被发送到客户端前就遭受了中间人攻击,中间人拦截了服务端发送给客户端的公钥,它做了客户端同样的工作——获取公钥,验证服务器身份。然后,中间人将自己的密钥对的公钥发送给客户端。

    于是,整个通信链路就变作了:客户端<=>中间人<=>服务端,而且客户端和服务器毫无感知。

也就是在传输公钥时遭到中间人攻击,那么整个握手阶段就开始被中间人劫持了,而且客户端和服务端都无感知。[详细分析见:SSL/TSL如何保证安全通信?]

防范中间人攻击

由于缺少身份验证,在握手阶段,服务端发送公钥给客户端的时候,中间人就劫持了服务端公钥,然后将自己的公钥发送给客户端,从而形成客户端<=>中间人<=>服务端这样一个链路,然而客户端与服务端没有机制进行身份验证的话,他们对中间人完全无感知,对当前的通信被劫持就无感。因此,得有一种机制能够让客户端能够识别出拿到的公钥确实是来自请求的服务端,而非中间人.[中间人攻击详细过程分析见:SSL/TSL如何保证安全通信?]

为了防范中间人攻击,可以采取以下措施:

  1. 证书认证:通信双方可以通过证书认证机构(CA)来获取和验证对方的公钥。证书认证机构会对公钥进行签名,并将其包含在数字证书中。通信双方通过验证数字证书的有效性来确认公钥的真实性。这样,即使中间人拦截了公钥,也无法伪造有效的数字证书
  2. 使用安全协议(相当于上述内容的组合应用):如SSL/TLS等安全协议结合了非对称加密、数字签名和证书认证等多种技术,以提供全面的安全保护。这些协议能够确保通信双方的身份验证、数据的机密性和完整性。
  3. 定期更新密钥和证书:定期更新密钥和证书可以降低被破解的风险,并增加攻击者的难度。

加密算法、证书认证的应用:SSL/TLS安全性保证

https基于SSL/TLS,保证安全通信保证数据完整性、未篡改,就是利用了证书认证服务器身份,避免了中间人伪装成服务端劫持整个通信过程问题的发生,因为中间人没有服务器证书。

在SSL/TLS握手阶段,服务端将自己的SSL/TLS证书(包含公钥)发送给客户端,

客户端验证服务端证书,确定证书的确是服务器发来的(因为服务端证书私自保管,中间人无法发送服务端的证书过来,中间人发送自己的证书过来也会被客户端识别出来–不是服务端,从而给用户提示当前请求存在风险)

证书中含有公钥,然后客户端通过公钥来约定会话密钥,因为只有服务端持有私钥可以解密,得到会话密钥。

然后双方通过会话密钥,使用对称加密算法加密、解密,因为对称加密算法效率更高。

这整个过程,避免了中间人攻击,中间人无法伪造成服务端,这是由证书机制保证的;协定会话密钥的数据传输,中间人无法获取、篡改数据,因为只有服务端的私钥才能解密数据;得到的会话密钥就只有客户端和服务端知道,因为它是通过安全的方式传递计算得到的;之后使用对称加密算法,使用会话密钥加密、解密通信,从而确保高效、快速加密解密,从而保证数据在传输过程中的安全性和完整性

因此SSL/TLS是安全通信机制,https基于SSL/TLS,因此确保了通信的安全性。

【完整的过程分析见后续文章】

小结

非对称加密避免了对称加密密钥传送的问题。因为公钥本身就是公开的,不存在泄露问题(因为公钥公开,所以公钥泄露不是问题)。

至于服务器身份验证问题,如何避免中间人伪造服务端,就要有一种机制来确保客户端收到公钥时,能辨别出是服务端发送而来的,而不是中间人,这可以通过证书机制保证。

非对称加密签名机制一定程度上提供了身份验证机制。

非对称加密密钥对的作用:

公钥

  • 加密会话密钥
  • 加密通信内容(加密可以用相应的私钥解密的数据),待私钥解密;
  • 验签(公钥验证私钥对数据摘要加密生成的数字签名)

私钥

  • 解密会话密钥
  • 解密公钥加密的内容;
  • 加签(私钥对数据摘要加密生成的数字签名)

👈️下一篇

计算机网络-专栏👈️

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

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

相关文章

MySQL触发器和存储过程

1、触发器 &#xff08;1&#xff09;&#xff1a;建立触发器&#xff0c;订单表中增加订单数量后&#xff0c;商品表商品数量同步减少对应的商品订单出数量,并测试 mysql> create trigger orders_after_insert_trigger-> after insert on orders for each row-> up…

不知道你们有没有我这样的一种状态...总是这样又总是那样...

各位小伙伴们&#xff0c;我是风尚&#xff0c;我不知道你们有没有那么一刻&#xff0c;就是感觉站在人生的十字路口&#xff0c;感觉自己就像是被扔进了一个没有导航的迷宫&#xff0c;四周都是墙&#xff0c;头顶是蓝天白云&#xff0c;却怎么也找不到出口的方向&#xff1f;…

重磅推荐!GBD再度登顶Lancet!| GBD数据库周报(7.17~7.23)

全球疾病负担&#xff08;GBD&#xff09;是迄今为止规模最大、最全面的一项研究&#xff0c;旨在量化不同地区和不同时期的健康损失&#xff0c;从而改善卫生系统并消除差异。 该研究由华盛顿大学健康指标与评估研究所 (IHME) 牵头&#xff0c;是一项真正的全球性研究&#xf…

MySQL--数据库与表的操作

前言&#xff1a;本博客仅作记录学习使用&#xff0c;部分图片出自网络&#xff0c;如有侵犯您的权益&#xff0c;请联系删除 数据库的基本操作 # 1、查看数据库show databases;​# 2、创建数据库create database 数据库名称;​# 3、删除数据库drop databse 数据库名称; 数据表…

RAC(Teamcenter )开发,Bom行解包和打包的方法

1、打包 UnpackAllAction allAction new UnpackAllAction((AbstractBOMLineViewerApplication) currentApplication, "packAllAction"); new Thread(allAction).start();2、解包 UnpackCommand command new UnpackCommand(bomLine); command.executeModal();3、注…

Marin说PCB之Orcad Capture调网表时出现了“Duplicate Pin Name”该怎么搞?

最近大巴黎在如火如荼的举行着奥运会&#xff0c;中国健儿们也是不负众望在很多项目中取得金牌的好成绩&#xff0c;其中中国选手陈芋汐/全红婵夺得巴黎奥运会跳水女子双人10米台金牌&#xff0c;其实没有看我就知道比赛的结果了&#xff0c;肯定是我们中国队夺得金牌的。 看到…

月薪竟然高达60k,AI大模型凭什么?

你是不是最近经常看到或听到“AI大模型”这个关键词&#xff1f;我也是&#xff01;所以好奇去Boss直聘上搜了下工作机会。看到结果时&#xff0c;我有点不淡定了&#xff01;薪资竟然这么高&#xff01; 这是我随便搜的结果&#xff0c;发出来给大家看看。 下面&#xff0c;我…

多线程习题

1.使用两个线程完成两个文件的拷贝&#xff0c;分支线程1拷贝前一半&#xff0c;分支线程拷贝后一般&#xff0c;主线程回收两个分支线程的资源 #include<myhead.h> struct Buf {const char *srcfile;const char *destfile;int start;int len1; }; //创建求源文件大小的函…

【C#】.net core 6.0 webapi 使用core版本的NPOI的Excel读取数据以及保存数据

欢迎来到《小5讲堂》 这是《C#》系列文章&#xff0c;每篇文章将以博主理解的角度展开讲解。 温馨提示&#xff1a;博主能力有限&#xff0c;理解水平有限&#xff0c;若有不对之处望指正&#xff01; 目录 背景读取并保存NPOI信息NPOI 插件介绍基本功能示例代码写入 Excel 文件…

继电器测试中常见的故障和解决方法有哪些?

在继电器测试中&#xff0c;可能会遇到诸如电源问题、负载问题、控制系统问题和显示问题等故障。如果电源电压不稳定或波动过大&#xff0c;可能会导致继电器测试负载箱无法正常工作。此时需要检查电源线路&#xff0c;确保电源电压稳定在规定范围内。如有必要&#xff0c;可以…

详细说明Java中Map和Set接口的使用方法

Map与Set的基本概念与场景 Map和set是一种专门用来进行搜索的容器或者数据结构&#xff0c;其搜索的效率与其具体的实例化子类有关。以前常见的搜索方式有&#xff1a; 1. 直接遍历&#xff0c;时间复杂度为O(N)&#xff0c;元素如果比较多效率会非常慢。 2. 二分查找&#x…

PSINS工具箱函数介绍——insinit

insinit是初始化INS系统的函数 函数需要用到PSINS工具箱&#xff0c;关于工具箱的一些入门知识&#xff0c;参考这篇文章&#xff0c;是关于工具箱的讲解&#xff1a; PSINS初学指导&#xff1a;https://blog.csdn.net/callmeup/article/details/137087932 函数使用方法 正…

vulhub:Apache解析漏洞apache_parsing

在Apache1.x/2.x中Apache 解析文件的规则是从右到左开始判断解析&#xff0c;如果后缀名为不可识别文件解析&#xff0c;就再往左判断。如 1.php.xxxxx 漏洞原理 Apache HTTPD 支持一个文件拥有多个后缀&#xff0c;并为不同后缀执行不同的指令。比如如下配置文件 AddType te…

蓝牙网关北京厂家_蓝牙网关型号价格介绍

蓝牙网关北京厂家介绍&#xff1a;北京桂花网科技有限公司成立于2015年&#xff0c;开发了远距离蓝牙网关&#xff0c;重新定义了蓝牙&#xff0c;拓展了蓝牙的应用范围&#xff0c;在2016年1月的拉斯维加斯世界消费电子CES展会上一举夺得Best of CES创新大奖。随后&#xff0c…

操作系统_内存管理学习心得

1. 操作系统结构 1.1 内核 计算机是由各种外部硬件设备组成的,比如内存、cpu、 硬盘等,如果每个应用都要和这些硬件设备对接通信协议&#xff0c;那这样太累了&#xff0c;所以这个中间人就由内核来负责,让内核作为应用连接硬件设备的桥梁,应用程序只需关心与内核交写&#x…

day19Tomcat

1. Tomcat启动服务 1. 使用命令&#xff1a; /usr/local/tomcat/bin/startup.sh 启动Tomcat服务。 2. 使用命令&#xff1a; netstat -lnput|grep java 查看端口状态&#xff0c;可以看到8080和8005两个端口。 3. 使用命令&#xff1a; /usr/local/tomcat/bin/shutdown.sh 停止…

用18讲必看:宇哥亲划重点内容+核心题总结

25考研结束之后&#xff0c;张宇老师的风评可能会两极分化 其中一波把张宇老师奉为考研数学之神&#xff0c;吹捧「三向解题法」天下无敌。 另外一波对张宇老师的评价负面&#xff0c;在网上黑张宇老师&#xff01; 为什么会这么说&#xff0c;因为张宇老师的新版36讲争议太…

【八股文】并发编程相关考点

1.线程和进程和协程的区别 进程是操作系统中资源分配和调度的基本单位&#xff0c;是程序的一次执行过程&#xff0c;因此是动态的&#xff0c;即一个进程从创建到运行再到消亡。每个进程都有独立的内存空间&#xff0c;一位置一个进程的变量修改不会影响到其他经常。进程之间的…

大数据HBase图文简介

往期推荐 数据仓库及数仓架构概述-CSDN博客 数仓常见名词解析和名词之间的关系-CSDN博客 引言 要想明白为什么产生 HBase&#xff0c;就需要先了解一下 Hadoop 存在的限制&#xff1a;Hadoop 可以通过 HDFS 来存 储结构化、半结构甚至非结构化的数据&#xff0c;是传统数据库的…

LeetCode 965.单值二叉树 C写法

LeetCode 965.单值二叉树 C写法 思路&#x1f9d0;&#xff1a; 用前序遍历的方式&#xff0c;如果左结点或右结点不为空且值不相等就直接返回false&#xff0c;如果走完一颗子树&#xff0c;结点为空了就返回true到上一层递归&#xff0c;直到左右子树全部走完&#xff0c;全为…