深入浅出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

相关文章

不懂推荐算法也能设计推荐系统

本文以商业化应用推荐为例,告诉我们不懂推荐算法的产品,也能从产品侧出发, 设计出一款不错的推荐系统。 相信很多新手产品,看到算法二字,多是懵圈的。 什么排序算法、最短路径等都是相对传统的算法(注:传统是指科班出身的产品都会接触过)。但对于推荐算法,多数产品对着网上搜到的资源,都会无从下手。特别当某些推荐算法 和 “AI”扯上关系后,更是加大了理解的难度。 但,不了解推荐算法,就无法做推荐系

康拓展开(hash算法中会用到)

康拓展开是一个全排列到一个自然数的双射(也就是某个全排列与某个自然数一一对应) 公式: X=a[n]*(n-1)!+a[n-1]*(n-2)!+...+a[i]*(i-1)!+...+a[1]*0! 其中,a[i]为整数,并且0<=a[i]<i,1<=i<=n。(a[i]在不同应用中的含义不同); 典型应用: 计算当前排列在所有由小到大全排列中的顺序,也就是说求当前排列是第

csu 1446 Problem J Modified LCS (扩展欧几里得算法的简单应用)

这是一道扩展欧几里得算法的简单应用题,这题是在湖南多校训练赛中队友ac的一道题,在比赛之后请教了队友,然后自己把它a掉 这也是自己独自做扩展欧几里得算法的题目 题意:把题意转变下就变成了:求d1*x - d2*y = f2 - f1的解,很明显用exgcd来解 下面介绍一下exgcd的一些知识点:求ax + by = c的解 一、首先求ax + by = gcd(a,b)的解 这个

综合安防管理平台LntonAIServer视频监控汇聚抖动检测算法优势

LntonAIServer视频质量诊断功能中的抖动检测是一个专门针对视频稳定性进行分析的功能。抖动通常是指视频帧之间的不必要运动,这种运动可能是由于摄像机的移动、传输中的错误或编解码问题导致的。抖动检测对于确保视频内容的平滑性和观看体验至关重要。 优势 1. 提高图像质量 - 清晰度提升:减少抖动,提高图像的清晰度和细节表现力,使得监控画面更加真实可信。 - 细节增强:在低光条件下,抖

【数据结构】——原来排序算法搞懂这些就行,轻松拿捏

前言:快速排序的实现最重要的是找基准值,下面让我们来了解如何实现找基准值 基准值的注释:在快排的过程中,每一次我们要取一个元素作为枢纽值,以这个数字来将序列划分为两部分。 在此我们采用三数取中法,也就是取左端、中间、右端三个数,然后进行排序,将中间数作为枢纽值。 快速排序实现主框架: //快速排序 void QuickSort(int* arr, int left, int rig

poj 3974 and hdu 3068 最长回文串的O(n)解法(Manacher算法)

求一段字符串中的最长回文串。 因为数据量比较大,用原来的O(n^2)会爆。 小白上的O(n^2)解法代码:TLE啦~ #include<stdio.h>#include<string.h>const int Maxn = 1000000;char s[Maxn];int main(){char e[] = {"END"};while(scanf("%s", s) != EO

uva 10014 Simple calculations(数学推导)

直接按照题意来推导最后的结果就行了。 开始的时候只做到了第一个推导,第二次没有继续下去。 代码: #include<stdio.h>int main(){int T, n, i;double a, aa, sum, temp, ans;scanf("%d", &T);while(T--){scanf("%d", &n);scanf("%lf", &first);scanf

uva 10025 The ? 1 ? 2 ? ... ? n = k problem(数学)

题意是    ?  1  ?  2  ?  ...  ?  n = k 式子中给k,? 处可以填 + 也可以填 - ,问最小满足条件的n。 e.g k = 12  - 1 + 2 + 3 + 4 + 5 + 6 - 7 = 12 with n = 7。 先给证明,令 S(n) = 1 + 2 + 3 + 4 + 5 + .... + n 暴搜n,搜出当 S(n) >=

uva 11044 Searching for Nessy(小学数学)

题意是给出一个n*m的格子,求出里面有多少个不重合的九宫格。 (rows / 3) * (columns / 3) K.o 代码: #include <stdio.h>int main(){int ncase;scanf("%d", &ncase);while (ncase--){int rows, columns;scanf("%d%d", &rows, &col

秋招最新大模型算法面试,熬夜都要肝完它

💥大家在面试大模型LLM这个板块的时候,不知道面试完会不会复盘、总结,做笔记的习惯,这份大模型算法岗面试八股笔记也帮助不少人拿到过offer ✨对于面试大模型算法工程师会有一定的帮助,都附有完整答案,熬夜也要看完,祝大家一臂之力 这份《大模型算法工程师面试题》已经上传CSDN,还有完整版的大模型 AI 学习资料,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费