HTTPS为什么要这样设计

HTTPS是网络安全解决方案的一个体现,本文将从网络安全问题的角度来阐述HTTPS设计

网络攻击的几种形式

窃听

在这里插入图片描述
此类攻击属于被动攻击,不影响接收方正常接收信息。只是对数据进行观察或分析,并不干扰信息。

篡改

在这里插入图片描述
此类攻击属于主动攻击,包括中断报文或伪造报文给接收方。

假冒

在这里插入图片描述
假冒主机A向主机B发送消息

其他

其他还有恶意程序、计算机病毒、木马、流氓软件、拒绝式服务Dos等,这些暂时和HTTPS无关,暂不讨论

如何解决以上三种问题呢

窃听

为了防止别人窃听,我们最容易想到的就是加密/解密,使用对称秘钥加密/解密
在这里插入图片描述
通过加密,在网络上传输的内容变成了XXXX,即使被窃听了,窃听者也无法知道其中内容。除非窃听者知道秘钥K。

看起来似乎解决了窃听问题

但是有一个问题,主机A和主机B怎么协商秘钥K呢?
若通过网络传输秘钥K,那么将回到第一个问题,这个秘钥K可能被窃听,这就变成了一个先有鸡还是先有蛋的过程了。

改进使用非对称秘钥加密/解密。含有公钥秘钥PK和私钥SK两个秘钥,工作方式为

  1. 公钥加密,私钥解密
  2. 私钥加密,公钥解密
  3. 私钥自己保管,公钥可以共享,也就是公钥可以让所有人知道

通过时序图来简单说明一下通信过程
在这里插入图片描述

主机A和主机B直接通过非对称秘钥加密/解密方式通信。在步骤一中,主机B把自己的公钥PK发给了主机A,主机A使用这个公钥加密消息然后发给B,我们可以看出主机A发送消息给主机B是安全的,讨论一下为什么是安全的

  • 步骤一,公钥PK可以公开,被截获了公钥PK也没有关系
  • 步骤三,消息M被截获,没有私钥SK,可以认为消息也是安全的

同理,如果想让主机B发消息给主机A是安全的,只要让主机A把自己的公钥PK也发给主机B(也使用非对称秘钥加密/解密),重复上述时序图即可
在这里插入图片描述
到这里我们可以理解为解决了窃听的问题了

假冒

假如有一台主机Y冒充主机A与主机B通信,也使用主机B的秘钥PK加密,与主机B就可以正常与主机H通信了。这时我们就要借鉴签名,类似于合同签字,从笔记可以证明确实是本人。对应于计算机则为数字签名。数据签名也是使用非对称加密方式实现
在这里插入图片描述
由于私钥是唯一的,我们让主机A使用自己的私钥加密消息M,主机B使用主机A的公钥解密消息M,只要能解开消息M,就证明这条消息M确实是主机A发送的,A不能抵赖,因为其他人不知道这个私钥。

数据签名实现流程图

在这里插入图片描述
从这个例子我们可以看出非对称加密/解密,使用公钥和私钥加密的作用不同,引入签名以后,这样就可以防止假冒

同时实现加密通信和签名过程
在这里插入图片描述

中间人攻击

我们先来看正常的通信流程,使用加密通信和签名实现

在这里插入图片描述
上述通信过程采用了两对非对称加密/解密秘钥(公钥PK1、私钥SK1/公钥PK2、私钥SK2),当存在中间人时,也是不安全的。请看下列流程,假设
中间人也有两对非对称加密/解密秘钥(公钥PK3、私钥SK3/公钥PK4、私钥SK4),主机A(公钥PK1、私钥SK1),主机B(公钥PK2、私钥SK2)
在这里插入图片描述

通过流程图,可以看出中间人通过冒充主机A、主机B通信,这里最核心的点是中间人截获了双方的公钥,并伪造了双方的公钥。如何解决这个问题,通过CA证书的签发机构,核心是公钥基础设施(Public Key Infrastructure,PKI),说通俗就是这个公钥是有效的,避免中间人。

篡改

使用信息摘要技术。检验所传送的报文是完整的,没有被他人篡改过。

密码散列函数(英语:Cryptographic hash function)
在这里插入图片描述
密码散列函数应该有四个主要的特性:

  • 对于任何一个给定的消息,它都很容易就能运算出散列数值。
  • 难以由一个已知的散列数值,去推算出原始的消息。
  • 在不更动散列数值的前提下,修改消息内容是不可行的。
  • 对于两个不同的消息,只有极低的几率会产生相同的散列数值。

MD5/SHA家族

其他的消息摘要算法

使用信息指纹(信息摘要)防止篡改

先看一个简单版本,有缺陷。
在这里插入图片描述
如图所示,通过比对信息指纹是否一致,检测报文是否完整。若报文被篡改了,信息指纹肯定不一致了。若完整则通过散列哈希函数计算,数据指纹应该是一致的

下面考虑一种被攻击的情况,如下
在这里插入图片描述
消息与信息指纹一起被篡改了

如何防止呢?回到上述的方法,对信息指纹加密,如图
在这里插入图片描述
对信息指纹加密,就可以避免了信息指纹被篡改。为什么呢,就算攻击者知道信息指纹值,也无法对其加密,因为接受者一定会使用K对称解密,这个秘钥K,攻击者不知道。如果使用其他秘钥加密,接受者解密不了,一定知道被攻击了。如下图所示,攻击者无法伪造这个过程。
在这里插入图片描述
只要秘钥K不丢失,则可以认为此过程是绝对安全的。

总结

窃听、假冒、篡改都使用到秘钥,经过上述三种情况的分析,只要我们保证或信任秘钥是绝对安全的,那我们就认为通信是安全的。接下来将讨论HTTPS设计是如何解决这个问题的。

HTTPS

首先,我们来谈谈秘钥问题如何解决?

数字证书认证机构(CA)

承担公钥体系中公钥的合法性检验的责任,作用:证明是非对称加密/解密中,公钥PK的有效性,下面谈谈具体流程,其中数字证书认证机构作为第三方公证。
在这里插入图片描述
我们可以看出,通过CA可以证明主机B的公钥有效。这样我们可以简化一下问题,只要证明CA是安全的,那么所有的秘钥都是安全的。怎么证明呢?
在这里插入图片描述
假设我们的证书是图中红色签发的,那么将该证书导入到浏览器中,这份证书由它的上一层帮他证明有效,上一级再由根证书Root CA证明。

下面是HTTPS流程图,理解一下即可,应该没什么问题了
在这里插入图片描述
这里解释一下,为什么要通过非对称加密/解密转换成对称秘钥呢,主要是效率问题,非对称加密/解密费时间,不合适

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
数据库设计经验中进行分表和分库的主要原因是为了解决性能瓶颈和高并发的问题。当业务发展迅速,单个数据库成为了性能瓶颈时,分库分表可以有效地提高数据库的处理能力和性能。 分表是将一个大表按照一定的规则拆分成多个小表,每个小表只包含部分数据。这样可以减少单个表的数据量,提高查询效率,降低锁竞争,减轻数据库的负载压力。常见的分表规则有按照时间范围、按照哈希值等。 分库是将一个数据库分成多个独立的子数据库,每个子数据库可以运行在不同的机器上。这样可以将不同的业务数据分开存储,避免了单个数据库的性能瓶颈,提高了数据库的并发处理能力。 进行分表和分库也会带来一些问题。比如,跨表查询和跨库查询可能会变得复杂,需要额外的处理。同时,数据一致性的维护也会变得更加复杂,需要考虑分布式事务的处理。此外,对于分表分库的中间件选择也需要谨慎考虑,以满足业务需求并保证系统的稳定性。 综上所述,在数据库设计中进行分表和分库可以提高数据库的性能和并发处理能力,但也会引入一些额外的问题和挑战。因此,在设计和实施分表和分库时,需要综合考虑业务需求、系统架构和数据库性能等因素,做出合理的决策。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [分布式 微服务 项目 我们为什么要分库分表?](https://blog.csdn.net/qq_44866828/article/details/124098306)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值