深入浅出HTTPS协议,RSA算法,对称加密,非对称加密,数字签名,数字证书【包含极简又必不可少的数学推导】

本文主要是介绍深入浅出HTTPS协议,RSA算法,对称加密,非对称加密,数字签名,数字证书【包含极简又必不可少的数学推导】,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

网上大多数介绍HTTPS协议和加密传输的文章都要么过于简洁,要么数学公式过多过于深奥。
本文将以一种更加清楚地结构,从根本原理上介绍HTTPS协议,RSA算法,对称加密,非对称加密,数字签名,数字证书等概念,会包含基础的数学原理,并且保证极其简明扼要

HTTPS 协议

HTTP 的不安全性体现在很多方面,即 HTTP 的缺点。

  • 内容被窃听:即使是加密过的通信内容,也会被窥视到,这点和未加密的通信是相同的,只能说经过加密后的内容,即便被攻击者窥视到,他也可能无法破解其中的含义罢了
  • 身份被伪装:服务器伪装,客户端伪装,访问权限,无意义请求
  • 报文被篡改:完整性不保证,中间人攻击(Main-in-the-Middle attack, MITM)

HTTPS 协议并非应用层的一个新协议,只是 HTTP 通信接口部分用 SSL(Secure Socket Layer)和 TLS(Transport Layer Security)协议代替而已。

另外,SSL 是独立于 HTTP 协议的,所有运行在应用层的协议都可以配合 SSL 协议使用。可以说,SSL 协议是当今世界上应用最为广泛的网络安全技术。

img

由于使用了加密通信, 相比于纯文本通信的 HTTP 来说,HTTPS 会消耗掉更多的 CPU 及内存资源,另外,开启 HTTPS 需要申请 SSL 证书,高额的证书申购费用会让很多网站开发者望而却步。

加密

密钥:就是钥匙,加密方有一把密钥,用来上锁,解密方也拥有一把密钥,用来解锁。而且加密方和解密方使用的密钥不一定是同一把。

对称密钥

加密和解密使用同一密钥的方式称为对称密钥加密,也称做共享密钥加密(Common Key crypto system)。

以共享密钥加密时必须将密钥也发送给对方。显然,如果通信双方都各自持有同一个密钥,且没有别人知道,则两方的通信安全是可以被保证的(除非密钥被破解),而且效率很高

那么,最大的问题就是如何保证这个密钥的安全传输,不被外部攻击者知道。如果由服务器生成一个密钥并传输给浏览器,这个传输过程中密钥被攻击者劫持,那么之后攻击者就能用这把密钥解开双方传输的任何内容。因此一般在建立连接时用非对称加密传输共享秘钥,之后通信时再用对称加密方法,即混合加密

非对称的密钥

加密和解密使用不同密钥

image-20220103155913168

RSA非对称秘钥加密算法

需要一个算法,正向计算容易,但逆向反推难——模运算符合这个特性:计算模简单,但反推指数难,只能穷举(当除数很大时不可取)

image-20220103160031123

使用模运算即可实现加密解密过程:

image-20220103160450751

合并两式得:

image-20220103160614581

如何选取e和d成为关键。此时要用到欧拉定理:

image-20220103160738502

这里的 φ ( n ) \varphi(n) φ(n) 表示:小于等于n的正整数中,有多少与n互质的数。将欧拉公式进行变换并对比上式可得下式,其中k为任意正整数

image-20220103161022883

可以通过选取k,n,e,计算得到d:

image-20220103161157322

计算 φ ( n ) \varphi(n) φ(n) 的一般方法为质因数分解,但大数质因数分解很难。但如果n是一个质数p,则有:

image-20220103161508551

运用到d的计算中:

image-20220103162218650

由于这里的p和q是自己选取,别人不知道,所以无法通过大数n的质因数分解得到p和q,因而无法计算出 φ ( n ) \varphi(n) φ(n)和 d

数字签名

遗憾的是,混合加密的方式仍然还是有漏洞的。攻击者(中间人)的确无法得到浏览器生成的对称密钥 X,但攻击者完全不需要拿到服务器私有的私钥就能劫持信息!

中间人只需截获服务器发布的公钥,篡改成自己的公钥发给客户端,客户端就会用中间人的公钥加密共享秘钥,中间人再用自己的私钥解密即可获得共享秘钥。根本原因是:浏览器客户端无法确认自己收到的公钥是不是真正的网站服务器的

img

❓ 如何证明浏览器客户端收到的公钥一定是该网站服务器的公钥

服务器在发布公钥和文件时,会同时用私钥将文件哈希值运算得到数字签名,放到网站上。客户端将文件的数字签名和公钥运算得到的文件哈希值与文件本身哈希值对比即可确定文件没有被篡改,并且签名来自于私钥拥有者。

image-20220103165636333

但私钥拥有者不一定等于服务器,因为中间人也可生成一套公钥私钥,对文件签名。客户端验证时使用伪公钥和伪签名对文件进行验证,依旧可以通过。

数字证书

为确保客户端验证时使用的是目的服务器的公钥和数字签名,需要使用公信机构: 数字证书认证机构(Certificate Authority, CA),即客户端和浏览器都信赖的第三方机构。

网站服务器在使用 HTTPS 前,需要向 CA 申请颁发数字证书,数字证书里有证书持有者、证书持有者的公钥,前两者的数字签名等信息。服务器把数字证书明文传输给浏览器客户端,然后浏览器从证书里取出服务器的公钥就可以了。

image-20220103170251956

由于计算机里默认安装了根证书,其中包括CA机构的公钥,因此数字证书具有不可为造性。

img

参考

https://www.bilibili.com/video/BV14y4y1272w?spm_id_from=333.788.top_right_bar_window_history.content.click
https://www.bilibili.com/video/BV18N411X7ty?spm_id_from=333.788.top_right_bar_window_custom_collection.content.click

这篇关于深入浅出HTTPS协议,RSA算法,对称加密,非对称加密,数字签名,数字证书【包含极简又必不可少的数学推导】的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/294908

相关文章

SpringBoot中SM2公钥加密、私钥解密的实现示例详解

《SpringBoot中SM2公钥加密、私钥解密的实现示例详解》本文介绍了如何在SpringBoot项目中实现SM2公钥加密和私钥解密的功能,通过使用Hutool库和BouncyCastle依赖,简化... 目录一、前言1、加密信息(示例)2、加密结果(示例)二、实现代码1、yml文件配置2、创建SM2工具

Java中的雪花算法Snowflake解析与实践技巧

《Java中的雪花算法Snowflake解析与实践技巧》本文解析了雪花算法的原理、Java实现及生产实践,涵盖ID结构、位运算技巧、时钟回拨处理、WorkerId分配等关键点,并探讨了百度UidGen... 目录一、雪花算法核心原理1.1 算法起源1.2 ID结构详解1.3 核心特性二、Java实现解析2.

python实现对数据公钥加密与私钥解密

《python实现对数据公钥加密与私钥解密》这篇文章主要为大家详细介绍了如何使用python实现对数据公钥加密与私钥解密,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录公钥私钥的生成使用公钥加密使用私钥解密公钥私钥的生成这一部分,使用python生成公钥与私钥,然后保存在两个文

如何在Spring Boot项目中集成MQTT协议

《如何在SpringBoot项目中集成MQTT协议》本文介绍在SpringBoot中集成MQTT的步骤,包括安装Broker、添加EclipsePaho依赖、配置连接参数、实现消息发布订阅、测试接口... 目录1. 准备工作2. 引入依赖3. 配置MQTT连接4. 创建MQTT配置类5. 实现消息发布与订阅

使用Python进行GRPC和Dubbo协议的高级测试

《使用Python进行GRPC和Dubbo协议的高级测试》GRPC(GoogleRemoteProcedureCall)是一种高性能、开源的远程过程调用(RPC)框架,Dubbo是一种高性能的分布式服... 目录01 GRPC测试安装gRPC编写.proto文件实现服务02 Dubbo测试1. 安装Dubb

在Spring Boot中实现HTTPS加密通信及常见问题排查

《在SpringBoot中实现HTTPS加密通信及常见问题排查》HTTPS是HTTP的安全版本,通过SSL/TLS协议为通讯提供加密、身份验证和数据完整性保护,下面通过本文给大家介绍在SpringB... 目录一、HTTPS核心原理1.加密流程概述2.加密技术组合二、证书体系详解1、证书类型对比2. 证书获

使用Java实现Navicat密码的加密与解密的代码解析

《使用Java实现Navicat密码的加密与解密的代码解析》:本文主要介绍使用Java实现Navicat密码的加密与解密,通过本文,我们了解了如何利用Java语言实现对Navicat保存的数据库密... 目录一、背景介绍二、环境准备三、代码解析四、核心代码展示五、总结在日常开发过程中,我们有时需要处理各种软

使用雪花算法产生id导致前端精度缺失问题解决方案

《使用雪花算法产生id导致前端精度缺失问题解决方案》雪花算法由Twitter提出,设计目的是生成唯一的、递增的ID,下面:本文主要介绍使用雪花算法产生id导致前端精度缺失问题的解决方案,文中通过代... 目录一、问题根源二、解决方案1. 全局配置Jackson序列化规则2. 实体类必须使用Long封装类3.

Springboot实现推荐系统的协同过滤算法

《Springboot实现推荐系统的协同过滤算法》协同过滤算法是一种在推荐系统中广泛使用的算法,用于预测用户对物品(如商品、电影、音乐等)的偏好,从而实现个性化推荐,下面给大家介绍Springboot... 目录前言基本原理 算法分类 计算方法应用场景 代码实现 前言协同过滤算法(Collaborativ

利用python实现对excel文件进行加密

《利用python实现对excel文件进行加密》由于文件内容的私密性,需要对Excel文件进行加密,保护文件以免给第三方看到,本文将以Python语言为例,和大家讲讲如何对Excel文件进行加密,感兴... 目录前言方法一:使用pywin32库(仅限Windows)方法二:使用msoffcrypto-too