https介绍,加密解密(举例+必要性,对称/非对称加密介绍),数字摘要/指纹(介绍,应用(session id,网盘的秒传功能))

目录

https

引入

介绍

加密解密层

介绍

没有绝对的安全

使用ssl的弊端

加密解密

概念

加密

解密

秘钥

举例

现实中

网络中

加密的必要性

常见加密方式

对称加密

特点

非对称加密

特点

数字摘要/指纹

介绍

应用

[session id](#session id)

百度网盘的秒传功能


https

这里对https的介绍更偏向于数据安全的方面

以及,明确http协议是明文传输协议

引入

用户输入的数据会随着http请求/响应在两台主机中传递

下面是一个精简的osi模型:

  • 虽然目标主机确实能收到数据,但传输过程中也会有其他主机可以收到,这样就会涉及数据泄漏的问题
  • 并且,因为这里画出来的下三层是在os里的,os并不会对数据做加密处理,它只管传过去

所以,我们需要在应用层添加一层软件层,给数据套个壳子 -- 加密解密层

介绍

当然,不止一台主机上有,目标主机上也得有:

这样数据经过本主机的加密,经过目标主机的解密,可以实现:

  • 传输过程中是加密数据
  • 目标主机最终得到的是有效数据

而http + 加密解密层 = https

  • 所以,https其实就是http的安全版本,它在http的基础上添加了安全性和加密

加密解密层

介绍
  • 一般是使用现成的方案ssl
  • 当然也可以自定义,但这样维护的工作就得自己来做
没有绝对的安全

其实,无论是什么协议,都不是百分百安全的

  • 随着算力的提升,攻击者可能会找到新的方法来破解加密算法或者利用系统的漏洞
  • 所以,这些协议需要不断更新迭代

我们可以把 攻破成本>攻破后的收益 的网络协议称为是相对安全的

使用ssl的弊端

因为ssl过于权威,使用的人多,去试图攻破它的人也多,过一段时间ssl就会暴露出一些问题,就迫使ssl推出新版本

所以,如果使用的是旧版本的ssl,很可能就直接被攻破了

加密解密

概念

加密

将原始数据(称为明文)转换为经过特定算法处理的密文的过程

  • 在加密过程中,使用密钥来控制算法的行为,以确保生成的密文具有一定的安全性
  • 即只有持有正确密钥的人才能解密并访问原始数据

解密

将密文转换回原始的明文的过程

  • 解密过程需要正确的密钥,以便算法能够逆向处理密文并还原出原始数据

秘钥

在加密解密过程中起关键作用的参数,用于控制加密算法的行为

  • 也叫做 明文<->密文 的中间数据
  • 密钥可以是对称密钥或非对称密钥(在下面的加密方式中会介绍)

举例

我们用具体例子来说明这些概念

现实中

比如说在综艺极限挑战里,男人帮曾经就做过解密:

  • 把所听内容写在信纸上,然后根据另一张画了框框的纸,找到要传递的信息
  • 明文 -- 实际想要传递的信息
  • 密文 -- 信纸上所写内容
  • 秘钥 -- 一张画了框的纸(和扣了洞的纸作用一样)

网络中

我们假设要传递的数据都是数字,然后我们对它进行异或,在另一端再通过异或拿到有效数据

  • 明文 -- 3
  • 密文 -- 3^5
  • 秘钥 -- ^5(这个秘钥就属于等会介绍的对称密钥)

说了这么多,我们到底为什么要进行加密呢?

加密的必要性

所有的数据包都会经过运营商的网络设备

  • 因为我们使用的网络都是运营商提供的(移动,联通,电信等等)

如果使用的是http协议,那运营商很轻易地就能得到我们的请求和响应内容,并且做出修改

  • 比如:当我们下载某软件时,会向服务器发送http请求,然后服务器返回下载链接
  • 当运营商拿到响应时(也叫做劫持),可以篡改下载链接,然后将篡改后的响应返回给客户端
  • 如下图:
  • 这样就无法保证我们拿到的链接是安全的,很可能被恶意篡改

不止运营商能拿到,传输过程中经过的每一个设备都可以拿到

  • 比如路由器

甚至,如果连接了免费wifi,其他人的设备就可以获取到你的请求信息

  • 如果这个网络是钓鱼网络,而你的网络行为都需要经过这个设备,那么你的数据就被泄露了

如果手机开了热点,然后电脑连接这个网络

  • 你的手机也就可以获取到电脑的请求数据(只是提一嘴哈)
    以上都体现出数据加密的必要性

  • 试想一下,如果支付宝等支付软件使用的是http协议

  • 那就很容易可以获取到用户的登录信息,甚至支付密码,进而转走里面的钱

常见加密方式

对称加密

加密和解密使用的秘钥是同一个

特点
  • 加密速度快,效率高

非对称加密

加密和解密过程中使用的秘钥不同

  • 并且,这两个秘钥是相互对应的,也就是加密解密过程是可逆的
  • 用A加密,就用B解密 ; 如果用B加密,就用A解密

一般把其中一个秘钥公开

  • 当然一个公开了,另一个是绝对不能公开的
  • 我们把公开的秘钥叫做公钥 ,未公开的秘钥叫做私钥
  • 这种方式可以保证 -- 如果用公钥加密,就只有拥有私钥的人/组织才能解密
特点

相比对称加密,计算量大,速度较慢

数字摘要/指纹

介绍

利用hash算法处理数据,生成固定长度 的数字摘要,具有唯一性

  • 很小很小的概率会发生冲突

它并不用来加密,而是用来判断数据是否被篡改

  • 它只能实现从左到右的过程(也就是加密),但不可逆(也就是无法解密),所以并不属于加密手段
  • 只要数据有一点点不同(哪怕只是一个符号),生成的数字摘要就有明显差异
  • 是不是就和指纹识别类似,只要有一点不同,就不是同一个人

最典型的算法

  • MD5

应用

session id

一个网站是不允许它存储的用户信息里有完全相同的数据的(用户名和密码),不然他们不就是同一个人了吗

  • 所以,服务器内部存放的用户数据都是不同的
  • 那么,经过md5运算后的字符串一定是不一样的
  • 所以我们可以把这串字符串作为set-cookie的填充数据返回给客户端
  • 然后客户端可以拿着这个字符串在服务器中进行信息匹配(因为它具有唯一性),并且可以保证数据的私密性(相当于经过了加密,并且只有在服务器内部才能解密)

是不是很熟悉,其实这串字符串就是session id

  • session id就相当于是客户端访问服务器时的指纹信息
百度网盘的秒传功能

如果多个用户上传同样的资源,服务器会把这份资源存储多份吗?

  • 不会的
  • 存储多份一样的资源完全是浪费空间

所以,一般会在上传前先将资源转换成数字摘要,然后上传到服务器进行匹配

  • 如果内部匹配到了,意味着上传的文件与已存在的文件内容完全相同,就直接返回已有资源的软链接即可(这也就达到了秒传的效果)
  • 如果匹配不上,则说明内部没有该文件,这时再进行上传流程就好了

在某些场景下,摘要也是需要加密的,加密后就得到了数字签名

相关推荐
Elastic 中国社区官方博客6 小时前
使用 Elastic Cloud Serverless 扩展批量索引
大数据·运维·数据库·elasticsearch·搜索引擎·云原生·serverless
超龄超能程序猿7 小时前
Docker GPU插件(NVIDIA Container Toolkit)安装
运维·docker·容器
岁岁种桃花儿8 小时前
Nginx 站点垂直扩容(单机性能升级)全攻略
网络·nginx·dns
Xの哲學8 小时前
Linux SMP 实现机制深度剖析
linux·服务器·网络·算法·边缘计算
2501_906150568 小时前
私有部署问卷系统操作实战记录-DWSurvey
java·运维·服务器·spring·开源
钦拆大仁8 小时前
单点登录SSO登录你了解多少
服务器·sso
岳来8 小时前
docker 从 Path 值看容器启动命令
运维·docker·容器
only火车头9 小时前
升级 ceph (16.2 -> 18.2) ceph mon 启动失败
服务器·ceph
一颗青果9 小时前
公网构建全流程与参与主体深度解析
网络
RisunJan9 小时前
Linux命令-ifconfig命令(配置和显示网络接口的信息)
linux·运维·服务器