下面详细介绍,网络是怎么连接的?OSI七层模型,TCP连接,http(s),证书和加解密
一 网络的五层模型是什么
计算机网络的五层模型是为了更好地理解网络通信过程而综合了OSI七层模型和TCP/IP四层模型的优点提出的一个清晰的框架。
它分为以下五层(从下到上):
- 物理层(Physical Layer)
- 数据链路层(Data Link Layer)
- 网络层(Network Layer)
- 传输层(Transport Layer)
- 应用层(Application Layer)
图解五层模型
各层详细讲解
1. 物理层(Physical Layer)
- 功能:负责在物理介质上传输原始的比特流(0和1)。它定义了设备的电气、机械、功能和规程特性,如电压大小、电压变换的频率、接口插头的类型、线缆的类型等。
- 关键概念:
- 比特流(Bits):就是0和1的数字信号,在网线上表现为高低电压,在光纤中表现为光的明灭。
- 调制解调:将数字信号转换成模拟信号(如ADSL拨号)或光信号。
- 主要设备:
- 网线(双绞线)、光纤、同轴电缆:传输媒介。
- 网卡(NIC):计算机与网络连接的接口。
- 集线器(Hub):一个愚蠢的设备,仅仅对电信号进行放大和广播,所有端口在一个冲突域内。
2. 数据链路层(Data Link Layer)
- 功能:负责在同一局域网(LAN)内的两个设备之间进行可靠的数据传输。它将网络层传来的数据包封装成帧,并负责物理寻址、错误检测和流量控制。
- 关键概念:
- 帧(Frame):数据链路层的数据传输单位。一个帧包含了帧头(目标MAC地址、源MAC地址等)、数据部分(网络层下来的数据包)和帧尾(用于错误检测的校验序列,如CRC)。
- MAC地址:一个全球唯一的硬件地址,像设备的“身份证”,用于在局域网内标识一个设备。帧头里就包含了目标MAC和源MAC。
- 主要设备:
- 交换机(Switch):智能设备。它根据目标MAC地址,将帧准确地转发到对应的端口,而不是广播。每个端口是一个独立的冲突域。
3. 网络层(Network Layer)
- 功能:负责在不同网络(局域网之间)的主机之间进行通信。它主要解决的是寻址和路由问题。
- 关键概念:
- IP地址:一个逻辑地址,像设备的“住宅地址”,用于在网络中标识一台主机的位置。它分为IPv4和IPv6。
- 数据包(Packet):网络层的数据传输单位。一个数据包包含了IP头(目标IP地址、源IP地址等)和数据部分(传输层下来的数据段)。
- 路由(Routing):根据目标IP地址,选择最佳路径将数据包从源主机传递到目标主机的过程。
- 主要协议:
- IP协议:核心协议,负责寻址和路由。
- ICMP协议:用于网络连通性测试和错误报告,如
ping和tracert命令就是基于ICMP。 - ARP协议:负责将IP地址解析为对应的MAC地址。
- 主要设备:
- 路由器(Router):连接不同网络的设备,根据路由表为数据包选择最佳路径。
4. 传输层(Transport Layer)
- 功能:负责端到端的通信。所谓端到端,就是应用程序到应用程序的通信。它提供了两种主要的传输方式。
- 关键概念:
- 端口(Port):用于标识主机上的不同应用程序。例如,Web服务通常用80端口,MySQL用3306端口。IP地址找到主机,端口号找到具体的应用程序。
- 数据段(Segment):传输层的数据传输单位。
- 主要协议:
- TCP协议(传输控制协议):
- 特点:面向连接、可靠、基于字节流。
- 可靠性保证:通过三次握手建立连接、确认机制、重传机制、流量控制和拥塞控制来保证数据不丢失、不重复、按序到达。
- 适用场景:适合对准确性要求高的场景,如网页浏览(HTTP)、文件传输(FTP)、电子邮件(SMTP)。
- UDP协议(用户数据报协议):
- 特点:无连接、不可靠、基于数据报。
- 工作方式:不建立连接,直接发送数据包。不保证数据一定到达,也不保证顺序。
- 优点:开销小,速度快,延迟低。
- 适用场景:适合对速度敏感、能容忍少量丢失的场景,如视频直播、语音通话、在线游戏。
- TCP协议(传输控制协议):
5. 应用层(Application Layer)
- 功能:最靠近用户的一层,为应用程序提供网络服务。它定义了应用程序之间如何相互通信和交换数据。
- 关键概念:
- 应用层协议:规定了不同应用类型的数据格式和通信规则。
- 主要协议:
- HTTP/HTTPS:用于网页浏览。
- FTP:用于文件传输。
- SMTP/POP3/IMAP:用于发送和接收电子邮件。
- DNS:用于将域名(如
www.google.com)解析为IP地址。 - WebSocket:用于全双工通信(如网页聊天室)。
总结
| OSI七层模型 | 五层模型 | 核心功能与协议 | 数据单位 | 关键设备 |
|---|---|---|---|---|
| 应用层 | 应用层 | 为应用程序提供网络服务:HTTP, DNS, FTP, SMTP | 报文 | 网关 |
| 表示层 | (并入应用层) | 数据格式转换、加密解密 | ||
| 会话层 | (并入应用层) | 建立、管理和终止会话 | ||
| 传输层 | 传输层 | 端到端通信、可靠性保证:TCP, UDP | 段 | |
| 网络层 | 网络层 | 逻辑寻址和路由:IP, ICMP, ARP, Router | 包 | 路由器 |
| 数据链路层 | 数据链路层 | 介质访问控制、错误检测、MAC寻址:Ethernet, Switch | 帧 | 交换机、网桥 |
| 物理层 | 物理层 | 比特流传输、物理接口:Hub, NIC, Cable, Fiber | 比特 | 集线器、网卡 |
二 网络是怎么连接的,TCP连接建立和断开(三次握手,四次挥手)
这是非常核心的网络知识,我用一个完整的例子来讲解网络连接的全过程,并重点剖析其中的 TCP 三次握手和四次挥手。
当你在浏览器中输入 https://www.google.com 并按下回车后发生的事。
第一阶段:建立物理与网络路径 (TCP握手前)
- 应用层 (浏览器):浏览器解析URL,识别出要使用HTTPS协议,目标主机是
www.google.com。 - DNS解析:浏览器不知道
www.google.com在哪,于是它问DNS服务器:“www.google.com的IP地址是多少?”。DNS服务器回复一个IP地址,例如142.251.42.206。 - 打开socket:浏览器请求操作系统创建一个Socket,用于网络通信。这就像是决定要寄一封信,先准备好信封和笔。
第二阶段:TCP三次握手 - 建立可靠连接
现在知道了目标地址(IP)和端口(HTTPS默认443),你的电脑(客户端)需要和Google的服务器(服务端)建立一个可靠的TCP连接。这个过程就是“三次握手”,其核心是双方同步序列号(Sequence Number, SYN) 来确保后续数据有序、可靠。
sequenceDiagram
participant C as 客户端
participant S as 服务端
Note right of C: CLOSED -> SYN-SENT
C->>S: SYN = 1, Seq = J (随机)
Note left of S: LISTEN -> SYN-RCVD
S->>C: SYN = 1, ACK = 1, Seq = K (随机), Ack = J+1
Note right of C: SYN-SENT -> ESTABLISHED
C->>S: ACK = 1, Seq = J+1, Ack = K+1
Note left of S: SYN-RCVD -> ESTABLISHED
Note over C,S: 连接建立成功,可以开始传输数据!
为什么是三次?而不是两次或四次?
- 核心目的:防止已失效的连接请求报文突然又传到了服务器,从而产生错误。
- 经典场景:客户端第一次发送的SYN报文因为网络拥堵延迟了,客户端超时重传了一个新的SYN并成功建立了连接。之后,那个延迟的旧SYN终于到达了服务器,如果只有两次握手,服务器会认为这是一个新的连接请求并直接进入连接状态(浪费资源),然后一直等待客户端发送数据。而有了第三次握手,客户端收到这个旧的SYN+ACK后,知道自己没有请求连接,就不会发送ACK确认,服务器也就无法建立连接。
第三阶段:数据传输
TCP连接建立后,才开始真正的应用数据传输。
- TLS握手:因为用的是HTTPS,客户端和服务端会先进行TLS握手,交换密钥,对后续的HTTP通信进行加密。
- HTTP请求/响应:浏览器通过加密的连接,发送一个HTTP GET请求:“请把主页发给我”。服务器处理请求,然后将HTTP响应(HTML, CSS, JS文件等)打包通过TCP连接发回给你的电脑。
- TCP的可靠性保证:在整个数据传输过程中,TCP机制(如确认ACK、重传、排序、流量控制)确保所有数据包都能完整、有序地到达。
第四阶段:TCP四次挥手 - 终止连接
当所有数据都传输完毕(比如网页已经完全加载),任何一方都可以发起关闭连接的请求。这个过程是“四次挥手”。
假设浏览器(客户端)先发起关闭:
sequenceDiagram
participant C as 客户端 (主动关闭)
participant S as 服务端 (被动关闭)
Note right of C: ESTABLISHED
C->>S: FIN = 1, Seq = M
Note right of C: FIN-WAIT-1
Note left of S: ESTABLISHED -> CLOSE-WAIT
S->>C: ACK = 1, Ack = M+1
Note right of C: FIN-WAIT-1 -> FIN-WAIT-2
S->>C: FIN = 1, Seq = N
Note left of S: CLOSE-WAIT -> LAST-ACK
Note right of C: FIN-WAIT-2 -> TIME-WAIT
C->>S: ACK = 1, Ack = N+1
Note left of S: LAST-ACK -> CLOSED
Note right of C: (等待2MSL后) TIME-WAIT -> CLOSED
为什么是四次挥手? 因为TCP连接是全双工的,意味着数据可以双向独立传输。关闭连接需要分别关闭两个方向的数据流。
- 客户端说:“我这边没有数据要发了(FIN)”。
- 服务器说:“好的,我知道你没数据了(ACK)。” 但此时,服务器可能还有数据要发给客户端。
- 等服务器把最后的数据发完了,它再说:“我这边也没数据要发了(FIN)”。
- 客户端最后说:“好的,我知道了(ACK)。” 连接彻底关闭。
为什么客户端最后要等待2MSL(最大报文段生存时间)?
- 保证最后一个ACK能到达服务器:如果客户端发送的最后一个ACK丢失,服务器会超时重传它的FIN。客户端等待一段时间就能收到这个重传的FIN,然后重新发送ACK。
- 让本次连接的所有报文在网络中消失:防止旧的、延迟的报文段被之后新的、相同四元组(源IP、源端口、目标IP、目标端口)的连接错误接收。
总结
| 阶段 | 核心过程 | 目的 |
|---|---|---|
| 连接建立 | TCP三次握手 | 双方同步初始序列号,建立可靠通信的基础。 |
| 数据传输 | HTTP请求/响应 (基于TLS加密) | 在可靠的TCP连接上进行实际的应用数据交换。 |
| 连接终止 | TCP四次挥手 | 双方安全、可靠地关闭双向数据流,释放资源。 |
这个过程完美体现了网络分层的思想,每一层各司其职,下层为上层提供服务,共同协作完成一次完整的网络通信。
三 http和https协议
HTTP 和 HTTPS 协议,这是一个从“明文通信”到“安全加密通信”的演进过程。
核心摘要
| 特性 | HTTP | HTTPS |
|---|---|---|
| 全称 | HyperText Transfer Protocol | HyperText Transfer Protocol Secure |
| 端口 | 80 | 443 |
| 安全性 | 不安全 | 安全 |
| 工作原理 | 明文传输数据 | HTTP + 加密 + 身份验证 + 完整性保护 |
| 加密机制 | 无 | TLS/SSL 协议对传输数据进行加密 |
| 证书 | 不需要 | 需要由可信的证书颁发机构 (CA) 签发的数字证书 |
| OSI 模型 | 应用层 | 应用层 (HTTP) + 安全层 (TLS/SSL) |
| 性能 | 更快(无加密开销) | 稍慢(有加密解密开销,但现代硬件影响很小) |
| 用途 | 不敏感信息传输(如新闻网站) | 敏感信息传输(如登录、支付、电子邮件) |
1. HTTP (超文本传输协议)
HTTP 是互联网上应用最为广泛的一种网络协议,设计初衷是为了传输 Web 页面和资源。它的核心特点是无状态和明文传输。
工作原理(简单模型)
- 建立TCP连接:客户端(浏览器)通过 TCP 三次握手与服务器的 80 端口建立连接。
- 发送HTTP请求:客户端发送一个HTTP请求报文。
- 接收HTTP响应:服务器处理请求,并返回一个HTTP响应报文。
- 关闭TCP连接:对于早期HTTP/1.0,每次请求-响应后都进行 TCP 四次挥手断开连接。HTTP/1.1的默认模式(Keep-Alive)允许连接被多个请求复用。
HTTP 报文结构
-
请求报文 (Request): GET /index.html HTTP/1.1 // 请求行:方法(GET) + URL路径 + 协议版本 Host: www.example.com // 请求头:包含客户端信息、请求条件等(Key: Value格式) User-Agent: Mozilla/5.0... Accept: text/html... (一个空行) // 很重要,用来分隔头部和主体 (请求体) // 通常用于POST、PUT等方法,携带发送的数据
-
响应报文 (Response): HTTP/1.1 200 OK // 状态行:协议版本 + 状态码(200) + 状态短语(OK) Date: Sat, 09 May 2023... Content-Type: text/html // 响应头:包含服务器信息、资源信息等 Content-Length: 1234... (一个空行) // 很重要,用来分隔头部和主体 // 响应体:服务器返回的实际数据(如HTML内容) ...
HTTP 的致命缺点
- 通信使用明文:请求和响应的内容不加密,就像寄送明信片,所有中间人都能看到内容(用户名、密码、信用卡号等)。
- 不验证通信方身份:你访问的
www.yourbank.com可能是一个黑客伪装的假网站。 - 无法证明报文的完整性:传输过程中,内容可能被中间人篡改。
2. HTTPS (超文本传输安全协议)
HTTPS 不是一种新的协议,而是 HTTP + SSL/TLS 的组合。可以理解为: HTTP over SSL 或 HTTP over TLS。 SSL (Secure Sockets Layer) 和 TLS (Transport Layer Security) 是加密协议,TLS 是 SSL 的升级版,现在主要使用 TLS。
HTTPS 如何解决 HTTP 的安全问题?
HTTPS 通过 TLS/SSL 提供了三大核心功能:
- 加密 (Encryption):防止数据被窃听。
- 认证 (Authentication):防止身份被冒充。
- 完整性保护 (Integrity):防止数据被篡改。
HTTPS 工作原理(核心:TLS 握手)
当你在浏览器中输入 https://www.example.com 时,会发生以下过程:
- TCP 三次握手:客户端连接到服务器的 443 端口。
- TLS 握手(最关键的一步):
- Client Hello:客户端向服务器发送信息,包括支持的TLS版本、支持的加密套件列表、一个客户端随机数。
- Server Hello:服务器回应,选择使用的TLS版本和加密套件、发送它的数字证书、一个服务器随机数。
- 证书验证:客户端验证服务器证书的有效性(是否由可信CA签发、域名是否匹配、是否在有效期内)。这一步解决了身份认证问题,确保你连接的是真正的目标服务器。
- 密钥交换:证书验证通过后,客户端生成一个预主密钥 (Pre-Master Secret),用证书中的服务器公钥加密后发送给服务器。
- 只有拥有对应私钥的服务器才能解密这个预主密钥。
- 生成会话密钥:客户端和服务器使用客户端随机数、服务器随机数和预主密钥,各自独立计算出相同的主密钥和会话密钥。
- 之后的通信将使用这个会话密钥进行对称加密。对称加密速度快,用于加密实际传输的数据。
- 加密通信:TLS握手完成后,所有的HTTP请求和响应数据都会在发送前用会话密钥加密,在接收后解密。
- 关闭连接:通信结束,断开TCP连接。
sequenceDiagram
participant C as 客户端 (Browser)
participant S as 服务器 (Server)
Note over C, S: 1. TCP三次握手 (端口443)
C->>S: SYN
S->>C: SYN-ACK
C->>S: ACK
Note over C, S: 2. TLS握手 (关键安全步骤)
C->>S: Client Hello (版本、加密套件、客户端随机数)
S->>C: Server Hello (版本、加密套件、服务器随机数) + Server Certificate (数字证书)
Note right of C: 验证证书合法性
C->>S: Pre-master secret (用证书公钥加密)
Note over C, S: 双方根据随机数和预主密钥<br>生成相同的会话密钥
Note over C, S: 3. 加密通信 (使用会话密钥)
C->>S: Encrypted HTTP Request
S->>C: Encrypted HTTP Response
Note over C, S: 4. 关闭连接
C->>S: FIN
S->>C: FIN-ACK
C->>S: ACK
为什么HTTPS既用非对称加密又用对称加密?
- 非对称加密 (RSA等):用于密钥交换。它安全但速度非常慢。用它来安全地传递生成会话密钥所需的“预主密钥”。
- 对称加密 (AES等):用于加密实际数据。它速度很快,适合加密大量数据。通信双方使用共享的会话密钥进行加解密。
这种组合兼顾了安全性和性能。
总结与类比
| 概念 | HTTP | HTTPS |
|---|---|---|
| 通俗比喻 | 寄明信片:内容公开,谁都能看,可被篡改。 | 寄带锁的保密信:内容加密,只有收件人有钥匙,信封密封防篡改,且需要验证收件人身份证。 |
| 安全性 | 无 | 极高(加密、身份认证、完整性校验) |
| SEO & 浏览器标记 | 现代浏览器(如Chrome)会将纯HTTP网站标记为**“不安全”**。 | 搜索引擎(如Google)给予排名提升。浏览器显示安全锁图标。 |
| 趋势 | 必须淘汰。任何涉及隐私的网站都不应使用HTTP。 | 现代网站的默认标准。无论是个人博客还是电商平台,都应使用HTTPS。 |
结论:HTTPS 是 HTTP 的安全升级版,通过 TLS/SSL 协议为数据传输提供了至关重要的安全保障,是当今互联网不可或缺的基础设施。
四 安全证书是什么,它在数据加密传输起到的作用是什么
一、一句话核心概括
安全证书的核心作用就像是公安机关颁发的“公司公章”或“个人身份证”。 它的首要目的不是加密数据,而是解决身份认证问题,确保你正在通信的对方(例如网站、服务器)不是冒牌货,从而为后续的安全加密传输建立一个可信的基础。
二、一个生动的比喻:公司之间的机密文件传递
想象两家公司(客户端和服务器)要通过快递员(网络)传递机密文件。他们担心文件被窃取或调包。
-
没有证书的情况 (只有加密):
- 客户收到文件时,无法确认这份文件是否真的来自真正的合作伙伴,还是由一个高明的骗子(中间人)伪造的。即使文件是加密的,如果加密的钥匙是骗子给你的,那骗子也能解密偷看。
-
有证书的情况 (HTTPS):
- 真正的合作伙伴公司会在公安局(证书颁发机构, CA)备案,并获得一个独一无二的、难以伪造的公司公章(数字证书)。
- 每次寄送文件前,他们都会在文件上盖上这个公章。
- 客户收到文件后,会去公安局查询这个公章的真伪。一旦确认公章是真的,就确信对方是真正的合作伙伴。
- 确认身份后,双方就可以放心地使用只有他们两家才知道的密码(会话密钥)来加密通信内容了。
在这个比喻中:
- 数字证书 = 在公安局备案的公司公章
- 证书颁发机构 (CA) = 公安局(一个公认的、可信的权威机构)
- 验证证书 = 客户去公安局核实公章真伪
- 建立加密通道 = 双方用只有彼此知道的密码通信
三、安全证书的正式定义与内容
安全证书(数字证书) 是一个数字文件,遵循X.509标准,它将一个实体的身份(通常是网站域名)与其公钥进行绑定,并由一个绝对可信的第三方——证书颁发机构(CA) 进行数字签名。
证书里包含以下关键信息:
- 主题信息:证书所有者的身份,最主要的是
通用名称 (CN),即网站的域名(如www.example.com)。 - 公钥 (Public Key):属于证书所有者的公钥。这是用于加密和验证签名的密钥。
- 签发者信息:签发此证书的证书颁发机构 (CA) 的信息。
- 有效期:证书的生效日期和过期日期。
- 数字签名:CA机构使用自己的私钥对证书的所有内容进行哈希计算并加密后得到的结果。这是证书可信的核心。
四、安全证书在数据加密传输中的作用(详细流程)
证书在HTTPS协议的TLS握手阶段扮演着最关键的角色。下图展示了包含证书验证的完整HTTPS建立流程:
sequenceDiagram
participant C as 客户端 (浏览器)
participant S as 服务器
participant CA as 证书颁发机构 (CA)
Note over C, S: 1. TCP连接建立
C->>S: SYN (连接到443端口)
S->>C: SYN-ACK
C->>S: ACK
Note over C, S: 2. TLS握手 (证书是关键!)
C->>S: Client Hello (支持版本、密码套件等)
S->>C: Server Hello (选定版本、密码套件等) + Server Certificate (数字证书)
Note right of C: 3. 证书验证 (身份认证)
C->>CA: 检查证书签名、有效期、域名等<br>(使用CA预置的根证书验证)
CA-->>C: 验证结果:证书有效 / 无效
alt 证书无效
C->>C: 显示红色警告页面,终止连接
end
Note right of C: 4. 生成共享密钥 (开始加密)
C->>S: Pre-Master Secret (用证书中的公钥加密)
Note over C, S: 双方生成相同的会话密钥
C->>S: Finished (加密后的消息)
S->>C: Finished (加密后的消息)
Note over C, S: 5. 安全加密通信
C->>S: Encrypted HTTP Request (使用会话密钥)
S->>C: Encrypted HTTP Response (使用会话密钥)
其核心作用可分解为以下几步:
-
身份认证 (Authentication) - 最主要的作用
- 当服务器将其证书发送给客户端时,客户端(浏览器或操作系统)会做一系列检查:
- 验证签发者:检查签发证书的CA是否是自己信任的CA列表中的一个(操作系统和浏览器都预置了所有可信CA的根证书)。
- 验证签名:使用该CA的公钥去解密证书上的数字签名,得到一个哈希值A。再对证书正文用同样算法计算一次哈希值B。如果
A == B,则证明证书内容在签发后没有被篡改过。 - 验证有效期:检查证书是否在有效期内。
- 验证域名:检查证书上写的域名是否与正在访问的域名一致。
- 只有所有这些检查都通过了,客户端才相信这个服务器就是它声称的那个实体。 这就解决了“中间人攻击”的问题,你不用担心你连的是黑客伪装的假网站。
- 当服务器将其证书发送给客户端时,客户端(浏览器或操作系统)会做一系列检查:
-
安全密钥交换 (Key Exchange) - 为加密奠定基础
- 身份确认之后,客户端就知道证书里的那个公钥确实是属于真实服务器的,可以放心使用。
- 客户端会生成一个用于本次会话的对称加密密钥(称为“预主密钥”)》,然后用服务器的公钥加密它,再发送给服务器。
- 只有拥有对应私钥的真实服务器才能解密这个信息,从而获得同一个“预主密钥”。双方随后会基于它生成相同的会话密钥。
- 此后,所有的数据传输都将使用这个高效的会话密钥进行对称加密。
五、总结:证书的作用
| 作用 | 解释 | 如果没有证书会怎样? |
|---|---|---|
| 身份认证 | 证明“我是我”,确保你连接的是真正的目标网站,而不是中间人伪装的陷阱。 | 无法确认通信方身份,极易遭受中间人攻击,即使加密,密钥也可能被窃取。 |
| 建立安全通道 | 提供可信的公钥,使得客户端能安全地与服务器协商出只有它们俩知道的会话密钥。 | 无法安全地交换加密密钥,加密过程可能被破坏。 |
| 建立信任 | 由可信的第三方(CA)背书,浏览器和操作系统信任由知名CA签发的证书。 | 网站会显示“不安全”警告,用户不敢访问,严重影响信誉。 |
简单来说:证书首先解决了“跟谁加密”的身份问题,然后才使得后续的“加密什么”变得安全可信。 它是整个HTTPS加密大厦的信任基石。
五 对称加密和非对称加密
好的,我们来详细讲解对称加密和非对称加密。这是现代密码学的两大基石,理解它们对理解网络安全(如HTTPS、SSH、比特币等)至关重要。
核心摘要
| 特性 | 对称加密 | 非对称加密 |
|---|---|---|
| 核心特点 | 加密和解密使用同一把密钥 | 加密和解密使用一对密钥:公钥和私钥 |
| 密钥数量 | 1把 | 2把 |
| 速度 | 快(算法简单,计算量小) | 慢(算法复杂,计算量大) |
| 安全性基础 | 密钥的保密性 | 数学难题(如大质数分解、椭圆曲线) |
| 主要用途 | 加密大量数据(如文件内容、通信消息) | 安全地交换对称密钥、数字签名 |
| 常见算法 | AES, DES, 3DES, ChaCha20 | RSA, ECC, DSA, Diffie-Hellman |
| 类比 | 传统的钥匙和锁 | 公开的投递箱和私有的开箱钥匙 |
一、对称加密 (Symmetric Encryption)
核心思想:加密和解密使用同一把秘密密钥。
就像一个带锁的盒子,只有一把钥匙。发送方和接收方都必须拥有完全相同的那把钥匙。
- 加密过程:
明文 + 密钥=>密文 - 解密过程:
密文 + 密钥=>明文
工作原理:
- 发送方(Alice)和接收方(Bob)预先通过一个绝对安全的渠道共享同一把密钥
K。 - Alice 想给 Bob 发送一条秘密消息
P(明文)。 - Alice 使用加密算法和共享的密钥
K对P进行加密,得到乱码一样的密文C。 - Alice 通过网络将密文
C发送给 Bob。 - Bob 收到
C后,使用相同的解密算法和同一把密钥K对C进行解密,恢复出原始明文P。
flowchart TD
A[发送方 Alice] -->|共享同一把密钥 K| B[接收方 Bob]
A --> P1[明文 P]
P1 --> E[加密算法]
E --> C[密文 C]
C -->|通过网络发送| D[解密算法]
D --> P2[明文 P]
B --> D
subgraph Key[对称密钥]
K[密钥 K]
end
Key --> E
Key --> D
优点与缺点:
- 优点:速度非常快,算法高效,适合加密海量数据。
- 缺点:密钥分发问题。如何安全地把密钥
K交给对方?如果网络是不安全的,那么发送密钥的过程本身就可能被窃听。如果有N个用户,需要管理N*(N-1)/2把密钥,管理复杂。
二、非对称加密 (Asymmetric Encryption)
核心思想:使用一对 mathematically related 的密钥:一个公钥(Public Key),一个私钥(Private Key)。
公钥可以公开给全世界,私钥必须严格保密。用公钥加密的内容,只有对应的私钥才能解密。反之,用私钥加密(签名)的内容,可以用公钥验证。
- 加密过程:
明文 + 接收方的公钥=>密文 - 解密过程:
密文 + 接收方的私钥=>明文
工作原理(用于加密):
- 接收方(Bob)生成自己的密钥对:一个公钥
PK_B,一个私钥SK_B。Bob 将他的公钥PK_B公开出去(比如放在个人网站上),自己牢牢保管私钥SK_B。 - 发送方(Alice)想给 Bob 发送一条秘密消息
P。 - Alice 获取 Bob 的公开的公钥
PK_B。 - Alice 使用加密算法和 Bob 的公钥
PK_B对明文P进行加密,得到密文C。 - Alice 将密文
C发送给 Bob。 - Bob 收到
C后,使用解密算法和自己的私钥SK_B对C进行解密,恢复出原始明文P。
关键点:即使黑客截获了密文 C 和公钥 PK_B,他也无法解密,因为解密必须使用从未公开的私钥 SK_B。
flowchart TD
A[发送方 Alice] -->|获取公钥| B_PK[Bob的公钥 PK_B]
B_PK --> E[加密算法]
A --> P1[明文 P]
P1 --> E
E --> C[密文 C]
C -->|通过网络发送| D[解密算法]
D --> P2[明文 P]
B[接收方 Bob] -->|持有私钥| B_SK[Bob的私钥 SK_B]
B_SK --> D
B --> D
优点与缺点:
- 优点:完美解决了密钥分发问题。公钥可以随便公开,无需安全通道。私钥永远不用发送给别人。
- 缺点:速度非常慢(比对称加密慢成百上千倍),不适合加密大量数据。
三、两者结合:HTTPS 的实际应用
正因为对称加密快和非对称加密安全,现代安全协议(如HTTPS、SSL/TLS)将它们结合起来使用,取长补短。
核心思想:用非对称加密的安全性来保护对称加密密钥的分发。
-
安全密钥交换(非对称加密的作用):
- 客户端连接到服务器后,服务器会发送其数字证书,其中包含服务器的公钥。
- 客户端生成一个随机的对称会话密钥(例如一个AES密钥)。
- 客户端使用服务器的公钥加密这个随机的会话密钥,然后发送给服务器。
- 只有拥有对应私钥的服务器才能解密这个信息,从而得到会话密钥。
- 至此,双方都安全地拥有了同一把对称密钥,而且从未在网络中明文传输过。
-
高效数据加密(对称加密的作用):
- 随后,客户端和服务器之间的所有通信(HTTP请求/响应),都使用刚才交换的那个对称会话密钥进行加密和解密。
- 因为数据量很大,所以使用高效的对称加密。
总结与类比
| 场景 | 对称加密 | 非对称加密 |
|---|---|---|
| 通信方式 | 打电话:双方必须事先知道同一个秘密(如暗号)。如果暗号被窃听,通信就不安全。 | 邮局信箱:你把信箱号码(公钥)公开,任何人都可以往里面投信。但只有你有信箱的钥匙(私钥)才能打开看信。 |
| 协作方式 | 各自保管同一把钥匙 | 你公开锁头(公钥),自己保管钥匙(私钥) |
简单来说:
- 对称加密像高速公路,速度快但路口(密钥分发)不安全。
- 非对称加密像安全的地下通道,非常安全但通行速度慢。
- HTTPS的做法是:先通过地下通道(非对称加密) 把一辆超级跑车(对称密钥)安全地送到对方手里,然后双方开着跑车在高速公路(对称加密) 上狂飙(传输数据)。
PS:创作不易 学会了记得,点赞,评论,收藏,分享