4https 原理

2023-11-13

春光正暖,情绪微高,穿行于街巷,浮现三两过往事,不惧时光肆意流淌。新的一年,万事顺遂。

1 http的缺点

  1. 通信使用的是明文

  2. 网络传输中,可能被攻击人,篡改。

  3. 不验证身份,所以不论是client 还是server 都会有人伪装。

这里插一张图大家之间感受一下,网络传输的过程,

原图也可到码云上看:https://gitee.com/brinjaul/http-diagram/raw/master/image/%E6%95%B4%E4%BD%93%E6%B5%81%E7%A8%8B%E5%9B%BE.png

如上图中所示,在蓝色区域内的任意一次转发中,有人拦截请求,并伪装成服务端,回应请求是完全可能的,而且还存在,修改请求内容,并转发修改过后的请求给客户端。其实这就是所谓的中间人攻击

怎么防止信息不被看到,加密!

2 加密算法

主要分为两种加密方式

2.1 对称加密

我在图里画的加密方式,只是打个比喻,真正的对称加密有很多,例如:。对称密钥加密算法主要包括:DES、3DES、IDEA、RC5、RC6等。所以对称加密的本质就是:发送和接收数据的双方必使用相同的密钥对明文进行加密和解密运算,大白话:我们都用同一个规则就能加解密。

2.2 非对称加密

进一步思考,如果服务端发给客户端的的加密规则,和我的解密规则不同就好了,听上去好像很抽象,举一个数学中的小栗子:

让对方任意想一个3位数,并把这个数和91相乘,然后告诉我积的最后三位数,我就可以猜出对方想的是什么数字啦!比如对方想的是123,那么对方就计算出123 * 91等于11193,并把结果的末三位193告诉我。我能反推出他想的是123

这种数学题,就跟脑筋急转弯一般,属于那种技巧性,下面给出答案:

只需要把对方告诉我的结果再乘以11,乘积的末三位就是对方刚开始想的数了。可以验证一下,193 * 11 = 2123,末三位正是对方所想123的秘密数字!

数学道理很简单,91乘以11等于1001,而任何一个三位数乘以1001后,末三位显然都不变(例如123乘以1001就等于123123)。


以上仅仅是举一个例子,client 与 server 之间从来没有交换 11 这个数字吧!所以中间人,即使拦截,但并不知知道关键数字11,所以并不能破译!,其实这是数学给我们带来的福利。此时这种福利能不能再延申一下,作为网络传输的一种加密方式呢?

哎呀,你和历史上的大佬想到了一起!嘿嘿

    1976年,两位美国计算机学家Whitfield Diffie 和 Martin Hellman,提出了一种崭新构思,可以在不直接传递密钥的情况下,完成解密。这被称为“Diffie-Hellman密钥交换算法”。这个算法启发了其他科学家。人们认识到,加密和解密可以使用不同的规则,只要这两种规则之间存在某种对应关系即可,这样就避免了直接传递密钥。这种新的加密模式被称为”非对称加密算法”。

算法的实现的思路

公钥加密

数学中存在这样的的函数,正向运算十分容易,但反过来,无比困难

m 表示明文对应转成的十进制数字

e 一个质数

N 一个随机整数

公钥包含两个数字:

1 e

2 一个超大整数H(与私钥中的H是同一个,即这是一个暴露给公共的数字)

公式叙述: m的e次幂 对 整数N 取余 得到余数 c

举例

image-20210213113720034

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Mwzloy4G-1613748066740)(C:\Users\46323\Desktop\素材\http\image\RSA4to9.png)]

思考一下,如果我们知道 3 11 9 这三个线索,能反推出 4吗,反正我脑袋里第一反应就是穷举不断试错,(而事实上目前数学家也没有好的简易办法轻松反推)!!!这种函数正向计算容易,但是反向计算极其困难,在数论中称为,单向函数

单向函数 (One-way function)是一种具有下述特点的单射函数:对于每一个输入,函数值都容易计算 ,但是给出一个随机输入的函数值,算出原始输入却比较困难 ------------百度百科

私钥解密

有一个名词叫做陷阱门

image-20210213120937190

注意:这里除了 d 以外, C N m 分别上边的加密公式的含义,对应加密公式。

私钥包含两个数字:

1 d

2 一个超大整数H(与公钥中的H是同一个,即这是一个暴露给公共的数字)

在我们已知 d 为 7 的前提下,可得原始值为 m=4!!!

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FQ8YCWqj-1613748066743)(C:\Users\46323\Desktop\素材\http\image\RSA9to4.png)]

一定会有这样的疑问,咋就已知 d =7 ,是怎么算出来的,其实这是保证算法安全的关键,如何由e 算出d,这需要进一步了解一下整数分解,简而言之,在已知某个 超大数字是来自两个质数的相乘后,根据公式可以很容易算出d,但是攻击者只知道这个超大整数,而不知道此超大整数,到底是哪两个质数的乘积,那么他想算出d,就必须,凭空分解一个超大整数,即使是计算机来计算也可能需要上千万年!!!除非科学家能解决,困扰人们千百年的整数分解难题,用高效的公式能快速的对一个超大整数分解,则RSA 算法就变为可破解的了 。

想要了解,用e 如何算出d 这需要我们学习一下 互质,欧拉函数,欧拉定理,模反元素等概念这里不做展开,留着下次分享吧。

从宏观整体上, 一个超大整数 N 仅仅能分解成两个 质数相乘,那么这两个数字可以被用来做法生成密钥的关键,而安全保密的关键在于计算机 想要凭空分解一个超大整数,可能需要上千万年!!!

总结,:只要整数分解的问题无法解开,RSA就一直是可靠的 !!!

2.3 ca的诞生

ok 我们思绪拉回来,通过使用RSA算法我们可以避免中间人伪装为网络设备后,窃听第一交换密钥的情况,因为使用了RSA就不存在交换密钥了,仅仅发送一个公钥给客户端,私有没有发给任何人,所以只能服务端自己才能解密!!

如下图:

注意: 图中表示,公钥是客户端与服务端 网络通信方式发送的。(其实这并不安全,最安全的方式是,线下双方交换!!)

可是中间人依然有办法攻击,前提是,客户端的公钥获得方式是来自网络通信获取,

此时中间人换另一种攻击方式,不在伪装为网络设备窃听,而是,假冒角色!!!欺骗客户端,说自己是 服务端。也可以欺骗服务端获取公钥。

对此我们无法,辨别真伪,发给我们公钥的服务端,到底是不是伪装的!!产生此问题的根本原因就是,客户端的公钥获取途径,是通过网络传输,所以,解决此办法的最好就是线下通过优盘等硬件方式来获取公钥,就是提前获取到公钥,可是线下获取密钥真的就可信吗??是否存在商业间谍,是否公司内部管理混乱等产生一些破坏性的人员(删库跑路…哈哈)所以你还是无法相信手里的公钥到底是真是假!!!(而且所有的公钥线下交换实在效率太低!)

此时问题本质已经变了味道,从一个技术问题,引出的网络安全问题,最终变成了一个社会信用的问题!!!!

好比我去银行存款,万一银行倒闭了咋整,而现在我们没有这样的顾虑是相信,银行背后有,相应的政府机构监管,流入银行的钱,在进一步来说因为政府有很高的信用在我们心中,所以才大胆的存钱到银行。所以要是有个机构做信用担保,出了事情他来抗,来配损失,就好了,那么此时我们欢迎 “CA” 登场!

跟银行一样,我们需要一个可信的机构来颁发证书和提供公钥,只要是它提供的公钥,我们就相信是合法的。这种机构称为认证机构(Certification Authority, CA)。CA就是能够认定”公钥确实属于此人”,并能生成公钥的数字签名的组织或机构。CA有国际性组织和政府设立的组织,也有通过提供认证服务来盈利的组织。

ca如何生成证书

数字签名

为了知识连贯性,先了解下啥是数字签名?

(1) 被发送文件用MD5(是hash算法的一种)编码加密产生128bit的数字摘要

(2) 发送方用自己的私钥对摘要再加密,这就形成了数字签名。

(3) 将原文和加密的摘要同时传给对方。

(4) 对方用发送方的公共密钥对摘要解密,同时对收到的文件用MD5编码加密产生又一摘要。(收到了2个:1 原文件没有MD5加密的,2 md5加密的数字摘要需要私用秘钥加密

做了两件事:1收到的第一个原文用MD5进行加密产生数字摘要简称x,与收到的秘钥加密数据进行解密得到的摘要要和x 摘要进行比对,保证信息没有被破坏)

(5) 将解密后的摘要和收到的文件在接收方重新加密产生的摘要相互对比。如两者一致,则说明传送过程中信息没有被破坏或篡改过。否则不然。

总结:我们知道数字签名技术可以,核验传送过程中信息没有被破坏或篡改过

生成证书的步骤

  1. 例如我们将公钥A给CA机构

  2. CA机构用自己的私钥给我们的公钥A加密,生成数字签名A

  3. CA机构把我们的公钥A,数字签名A,附加一些服务器信息,公钥拥有者的信息等整合在一起,生成证书,发回给服务器。

如何验证证书

  1. 客户端得到证书
  2. 客户端得到证书的公钥B**(证书的**公钥,通过CA或其它途径,得到CA的公钥B,注意:这是CA的公钥B,不是我们的公钥B,一般数字证书认证机构的公开密钥已事先植入到浏览器里了)
  3. 客户端用公钥B对证书中的数字签名解密,得到哈希值1
  4. 客户端对公钥进行哈希值2计算
  5. 两个哈希值对比,如果相同,则证书合法(传送过程中信息没有被破坏或篡改过)。

注:公钥B和上述的私钥B是配对的,分别用于对证书的验证(解密)和生成(加密)。

3 SSL和TLS

HTTPS 并非是应用层的一种新协议,https 使用SSL 和TLS这两个协议,通常,HTTP 直接和 TCP 通信。当使用 SSL 时,则演变成先和 SSL 通信,再由 SSL 和 TCP 通信了。简言之,所谓 HTTPS,其实就是身披SSL 协议这层外壳的 HTTP。

SSL 技术最初是由浏览器开发商网景通信公司率先倡导的,开发过 SSL3.0 之前的版本。目前主导权已转移到 IETF(InternetEngineering Task Force,Internet 工程任务组)的手中。IETF 以 SSL3.0 为基准,后又制定了 TLS1.0、TLS1.1 和TLS1.2。TSL 是以 SSL 为原型开发的协议,有时会统一称该协议为 SSL。当前主流的版本是 SSL3.0 和 TLS1.0

4 https交换整体流程

好了我们终于解决了中间人攻击的问题,看下https 的总体流程。

总体概况分为三部分:

1 客户端发起请求,并收到服务端发来的,证书

2 通过证书传递对称加密的密钥

3 使用对称密钥加密通讯

提示:

步骤4中,客户端接受到了证书后,就会开始验证证书操作,如何验证证书

步骤5中,发送一个对称密钥密码串

至此,我们通过了解 ,保证信息加密的https 中,使用了 CA公布的证书,认定公共密钥的合法性,并通过非对称公钥加密,传递一个对称加密的密钥,服务端通过私钥解密得到,对称加密的密钥,确保了信息传递的安全性。

至此,我们通过了解 ,保证信息加密的https 中,使用了 CA公布的证书,认定公共密钥的合法性,并通过非对称公钥加密,传递一个对称加密的密钥,服务端通过私钥解密得到,对称加密的密钥,确保了信息传递的安全性。

如果你能看到这里了,不如点赞关注一下,我会认真分享每一篇博文。大家共同成长。

我的公众号:茄子的笔记

赠人玫瑰,手有余香,你的关注,我的动力!

更多分享可见:

在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

4https 原理 的相关文章

随机推荐

  • linux系统调用线程

    1 基础概念 早期unix系统中 没有线程概念 后来才引入线程 linxu 为了迎合 windows引入了线程 linux 上进程是非常优秀了 linux 上用线程和进程的区别不大 老程序都是用进程 gdb不支持线程 因为gdb比线程出现了
  • net core 下的图形验证码

    首先 通过 Nuget 安装 dotnet add package Lazy Captcha Core 注册服务 默认使用了内存存储 AddDistributedMemoryCache builder Services AddCaptcha
  • 什么是IDP?---What Is an Internal Developer Platform (IDP)?

    The modern approach to software delivery is based on cloud native services and the DevOps culture entailing software dev
  • 项目-天气邮局

    一 项目背景 http协议被广泛使用 从移动端 pc端浏览器 http协议无疑是打开互联网应用窗口的重要协议 http在网络应用层中的地位不可撼动 是能准确区分前后台的重要协议 在学习完网络的有关知识后 HTTP服务器无疑是巩固及应用所学知
  • 怎么用linux查看xml文件格式,xml是什么格式?xml文件格式用什么软件可以打开

    xml是什么格式 xml文件是很多用户在电脑上看见过了 很多小伙伴看到了xml格式的文件都不知道这个是什么东东 其实这个xml也是一种比较有用的文件 可以用来存储软件数据 不过不是所有的软件都可以打开的 下面智能手机网就来科普一下xml是什
  • 各种虚拟机体验杂谈 --- 兼发布 google chrome os (chromiumos) vmware版本

    前两天赶时髦 把笔记本换上了win8 pro 换win8pro的原因 一个是价格真的很有诚意 另一个就是从DP版本开始就一直用 虽然兼容性问题多多 但作为宿主主机还行 而且xenclient也实在是让人窝火 号称裸机虚拟 其实硬盘速度慢如蜗
  • 读论文(五)MedDialog【参考性大】【可复现】

    Abstract 医疗对话系统有望帮助远程医疗增加医疗保健服务的可及性 提高患者护理质量并降低医疗成本 为促进医学对话系统的研发 我们构建了大规模的医学对话数据集 MedDialog 其中包含中文数据集340万条医患对话 英文数据集120条
  • 24 个 ES6 方法,解决实际开发的 JS 问题

    1 如何隐藏所有指定的元素 tips 本文主要介绍 24 中 es6 方法 这些方法都挺实用的 本本请记好 时不时翻出来看看 const hide el gt Array from el forEach e gt e style displ
  • 使用 Socket 通信实现 FTP 客户端程序

    转 https www ibm com developerworks cn linux l cn socketftp index html FTP FTP 概述 文件传输协议 FTP 作为网络共享文件的传输协议 在网络应用软件中具有广泛的应
  • python是一门面向过程的语言有哪些,python是面向过程的吗

    python是面向过程的吗 1 面向过程 核心是过程二字 过程指的是解决问题的步骤 好比如设计一条流水线 是一种机械式的思维方式 就是程序从上到下一步步执行 一步步从上到下 从头到尾的解决问题 基本设计思路就是程序一开始是要着手解决一个大的
  • 迷你Web文件服务器

    在开发Web程序的时候 有时候需要一个轻量级的Web服务器 用来响应前端的请求 前端一般的请求可以通过本地文件的方式显示 但是毕竟不是真正的Web服务器 有了这个需求 我们开发了一款迷你绿色通用的Web文件服务器 下载地址 WebServe
  • Ubuntu16.04.7+Qt15.5.0环境配置(一条龙讲解)

    目录 1 下载并安装Ubuntu 2 Qt下载与安装 3 Qt环境配置 4 设置编译套件 5 创建qt快速启动脚本 1 下载并安装Ubuntu Ubuntu16 04 7下载链接https releases ubuntu com xenia
  • ipconfig bash: ipconfig: command not found...

    在使用linux查看端口的时候 应该用ifconfig Windows才使用ipconfig
  • Qt 操作SQLite数据库

    一 SQLite 介绍 Sqlite 数据库作为 Qt 项目开发中经常使用的一个轻量级的数据库 可以说是兼容性相对比较好的数据库之一 Sqlite就像Qt的亲儿子 如同微软兼容Access数据库一样 Qt5 以上版本可以直接使用 Qt自带驱
  • 09字符串排序

    给定两个字符串 从字符串2中找出字符串1中的所有字符 去重并按照ASCII码值从小到大排列 输入字符串1长度不超过1024 字符串2长度不超过100 字符范围满足ASCII编码要求 按照ASCII由小到大排序 输入描述 bach bbaac
  • CBAM:融合通道和空间注意力的注意力模块

    点击上方 AI公园 关注公众号 选择加 星标 或 置顶 作者 Sik Ho Tsang 编译 ronghuaiyang 导读 使用CBAM加持的MobileNetV1 ResNeXt ResNet WRN优于使用SENet的网络 在这篇文章
  • java:统计数组中元素出现的个数

    问题描述 定义一个方法传入一个int类型数组 输出这个数组中每一个数字及其出现的个数 例如 传入数组 1 2 2 2 3 3 4 4 4 4 打印结果 数字1出现了1次 数字2出现了3次 算法思想 这里主要是在实现数组元素的遍历过程中 如果
  • Springboot 整合mybatis-plus +代码生成器

    mybatis plus官方文档 https mp baomidou com guide 新建一个Springboot项目 代码生成结构如下 一 添加依赖
  • el-dialog弹窗改变默认样式,改变弹窗高度位置

    el dialog弹窗改变默认样式 改变弹窗高度位置 在el dialog上添加class view dialog
  • 4https 原理

    春光正暖 情绪微高 穿行于街巷 浮现三两过往事 不惧时光肆意流淌 新的一年 万事顺遂 文章目录 1 http的缺点 2 加密算法 2 1 对称加密 2 2 非对称加密 算法的实现的思路 公钥加密 私钥解密 2 3 ca的诞生 ca如何生成证