加密技术与 TLS 安全体系:从对称 / 非对称加密到量子通讯协议解析

一、对称加密的工作原理

对称加密是加密、解密使用同一密钥 的加密方式,核心特点是速度快、适合大流量数据,但存在 "密钥安全分发" 的难题。

1. 基础对称加密:XOR(异或)加密

XOR 是最简单的对称加密,基于 "按位异或" 运算(规则:0⊕0=0,1⊕1=0,0⊕1=1,1⊕0=1):

  • 加密过程:明文(二进制)与密钥(二进制)逐位异或,得到密文。
  • 解密过程:密文与同一密钥逐位异或,还原明文。
  • 示例:明文:1010(对应十进制 10)密钥:0110(对应十进制 6)加密:1010 ⊕ 0110 = 1100(密文)解密:1100 ⊕ 0110 = 1010(还原明文)
  • 缺点:安全性极低(密钥长度等于明文时才相对安全,但实际无法实现),仅用于理解对称加密逻辑,无工业应用。

2. 工业级对称加密:AES 算法

AES(Advanced Encryption Standard,高级加密标准)是目前全球通用的对称加密算法,支持 128/192/256 位密钥长度(密钥越长,安全性越高),属于分组密码(将明文分成固定长度的 "分组",逐组加密)。

AES 的核心流程(以 128 位密钥为例):

AES 的加密过程包含1 轮初始轮密钥加 + 9 轮主轮函数 + 1 轮最终轮函数,每轮操作由 4 个步骤组成:

  • 字节代换(SubBytes):通过 S 盒(预定义的置换表)将每个字节替换为另一个字节,实现非线性混淆。
  • 行移位(ShiftRows):将数据块的行进行循环移位(第 1 行不移,第 2 行移 1 位,第 3 行移 2 位,第 4 行移 3 位),实现扩散。
  • 列混合(MixColumns):将数据块的列按线性变换混合,进一步扩散数据。
  • 轮密钥加(AddRoundKey):将当前数据块与轮密钥(由原始密钥生成)逐位异或,注入密钥信息。
AES 的工作模式(解决分组拼接安全问题):
  • ECB(电子密码本):每个分组独立加密,相同明文分组会得到相同密文,易被破解(不推荐)。
  • CBC(密码分组链接):前一个密文分组与当前明文分组异或后再加密,需初始化向量(IV),安全性较高,但不支持并行加密。
  • GCM(伽罗瓦 / 计数器模式):同时提供加密和消息认证(MAC),支持并行加密 / 解密,是 TLS1.2 + 的主流选择。

二、非对称加密的工作原理

非对称加密(公钥加密)使用一对密钥(公钥 + 私钥):公钥公开,用于加密 / 验签;私钥保密,用于解密 / 签名。核心解决 "对称密钥的安全分发" 问题,但速度远慢于对称加密。

1. RSA 算法(基于大数分解难题)

RSA 是最经典的非对称加密算法,安全性基于 "大整数分解为两个素数的计算难度"。

RSA 的密钥生成流程:
  1. 选素数 :随机选择两个大素数pq(实际需数百位)。
  2. 算模数 :计算n = p × q(公钥和私钥的公共模数)。
  3. 欧拉函数 :计算φ(n) = (p-1) × (q-1)(表示 1~n 中与 n 互质的数的数量)。
  4. 选公钥 :选整数e,满足1 < e < φ(n)eφ(n)互质(常用e=65537)。
  5. 算私钥 :计算d,满足(e × d) mod φ(n) = 1de的模逆元)。
  • 最终:公钥为(e, n),私钥为(d, n)
RSA 的加密 / 解密流程:
  • 加密 (公钥加密):明文M(需M < n)→ 密文C = M^e mod n
  • 解密 (私钥解密):密文C→ 明文M = C^d mod n
示例(简化版,实际用大素数):
  • p=3q=5n=15φ(n)=8
  • e=3(与 8 互质)→ 算d=3(因为3×3=9 mod 8=1)。
  • 公钥(3,15),私钥(3,15)
  • 加密明文M=2C=2^3 mod15=8
  • 解密密文C=8M=8^3 mod15=512 mod15=2

2. OpenSSL 实战验证 RSA

OpenSSL 是开源加密工具库,可快速实现 RSA 的密钥生成、加密、解密、签名、验签:

步骤 1:生成 RSA 密钥对(2048 位)
bash 复制代码
# 生成私钥(PEM格式,加密存储,需输入密码)
openssl genrsa -aes256 -out rsa_private.key 2048

# 从私钥中提取公钥
openssl rsa -in rsa_private.key -pubout -out rsa_public.pem
步骤 2:RSA 加密 / 解密文件
bash 复制代码
# 用公钥加密明文文件plain.txt
openssl pkeyutl -encrypt -in plain.txt -inkey rsa_public.pem -pubin -out cipher.bin

# 用私钥解密密文文件cipher.bin
openssl pkeyutl -decrypt -in cipher.bin -inkey rsa_private.key -out plain_decrypted.txt
步骤 3:RSA 签名 / 验签
bash 复制代码
# 用私钥对文件plain.txt签名(SHA256哈希)
openssl dgst -sha256 -sign rsa_private.key -out sign.sha256 plain.txt

# 用公钥验证签名
openssl dgst -sha256 -verify rsa_public.pem -signature sign.sha256 plain.txt
# 验证成功会输出:Verified OK

3. 非对称加密应用:PKI 证书体系

PKI(Public Key Infrastructure,公钥基础设施)是解决 "公钥信任" 的体系,核心是CA(证书颁发机构)

PKI 的核心组件:
  • CA:可信第三方,负责签发 / 吊销证书,拥有自己的根密钥对。
  • 数字证书:包含 "用户公钥 + 用户身份信息 + CA 签名" 的文件,证明 "公钥属于该用户"。
  • 证书链:根 CA 签发中间 CA 证书,中间 CA 签发终端用户证书,形成信任链(终端用户只需信任根 CA)。
证书验证流程:
  1. 客户端获取服务器证书,验证CA 签名(用 CA 公钥解密签名,对比证书哈希值)。
  2. 验证证书有效期吊销状态(通过 CRL 或 OCSP 查询)。
  3. 确认证书绑定的域名与服务器一致

4. 非对称加密应用:DH 密钥交换

DH(Diffie-Hellman)是一种密钥协商协议,允许双方在不安全信道上协商出共享对称密钥,核心是 "离散对数难题"。

DH 密钥协商流程:
  1. 双方公开约定:大素数p、生成元ggp的原根)。
  2. Alice :选私钥a→ 算公钥A = g^a mod p,发送A给 Bob。
  3. Bob :选私钥b→ 算公钥B = g^b mod p,发送B给 Alice。
  4. 共享密钥计算
    • Alice:K = B^a mod p
    • Bob:K = A^b mod p(因B^a = (g^b)^a = g^(ab) = (g^a)^b = A^b,故双方得到相同的K
缺点:无身份认证,易受 "中间人攻击"(TLS 中通常用 "认证 DH",如 ECDHE + 证书)。

三、ECC 椭圆曲线的特性与 DH 升级

ECC(Elliptic Curve Cryptography,椭圆曲线密码学)是基于 "椭圆曲线离散对数难题" 的非对称加密技术,核心优势是相同安全强度下,密钥更短、运算更快(256 位 ECC≈3072 位 RSA)。

1. ECC 的核心数学基础

ECC 基于有限域上的椭圆曲线方程y² = x³ + ax + ba,b是有限域中的常数)。

  • 点运算
    • 点加(P+Q):过 P、Q 两点的直线与曲线的第三个交点,关于 x 轴的对称点。
    • 点乘(kP):kP = P+P+...+P(k 次点加,k 是私钥,P 是基点)。
  • 椭圆曲线离散对数难题 :已知基点P和点Q=kP,求私钥k的计算难度极大(远高于 RSA 的大数分解)。

2. DH 协议升级:基于椭圆曲线的 ECDH

ECDH 是 DH 的椭圆曲线版本,用 "点乘" 代替 DH 的 "模幂运算",流程更高效:

ECDH 密钥协商流程:
  1. 双方公开约定:椭圆曲线参数(如 secp256r1)、基点G
  2. Alice :选私钥a→ 算公钥A = aG,发送A给 Bob。
  3. Bob :选私钥b→ 算公钥B = bG,发送B给 Alice。
  4. 共享密钥计算
    • Alice:K = aB = a(bG) = abG
    • Bob:K = bA = b(aG) = abG(双方得到相同的共享密钥K

ECDH 是 TLS1.2 + 的主流密钥交换算法(如 ECDHE,带 "临时" 属性,支持前向安全)。

四、TLS 协议的工作原理

TLS(Transport Layer Security,传输层安全)是运行在 TCP 之上的安全协议,为应用层(如 HTTP)提供机密性(加密)、完整性(MAC)、身份认证(证书)

TLS 的协议分层:

  1. 记录层:将应用数据分块,进行加密、MAC 计算,封装为 TLS 记录。
  2. 握手层:协商加密套件、认证身份、生成会话密钥(核心层)。
  3. 警报层:传递错误信息(如证书无效、加密失败)。
  4. 应用数据层:承载 HTTP 等应用层数据。

TLS1.2 的完整握手流程(以 ECDHE 加密套件为例):

  1. 客户端 Hello
    • 客户端发送:支持的 TLS 版本(如 TLS1.2)、加密套件列表(如 ECDHE-RSA-AES256-GCM-SHA384)、客户端随机数R1、支持的椭圆曲线参数。
  2. 服务器 Hello
    • 服务器回复:选定的 TLS 版本、加密套件、服务器随机数R2、选定的椭圆曲线参数。
  3. 服务器证书
    • 服务器发送数字证书(包含服务器公钥),证明身份。
  4. 服务器密钥交换
    • 服务器生成 ECDH 临时私钥b→ 算临时公钥B = bG,发送B(含签名,防止篡改)。
  5. 服务器 Hello Done:服务器通知握手请求阶段结束。
  6. 客户端密钥交换
    • 客户端生成 ECDH 临时私钥a→ 算临时公钥A = aG,发送A
    • 客户端计算预主密钥K_pre = aB(ECDH 共享密钥);
    • R1+R2+K_pre生成会话密钥(对称密钥,用于后续加密)。
  7. 客户端 Finished
    • 客户端用会话密钥加密 "Finished 消息"(包含之前握手消息的哈希),发送给服务器(验证密钥有效性)。
  8. 服务器 Finished
    • 服务器用会话密钥加密 "Finished 消息",发送给客户端(验证密钥有效性)。

握手完成后,双方用会话密钥加密应用数据。

五、TLS1.2 与 TLS1 的对比

TLS1 是早期版本(2000 年发布),TLS1.2(2008 年发布)是目前的主流安全版本,核心改进如下:

对比项 TLS1 TLS1.2
加密套件 仅支持 DES、3DES 等弱算法 支持 AES-GCM、ChaCha20 等强算法
哈希算法 仅支持 MD5、SHA-1(已被破解) 支持 SHA-256、SHA-384 等安全哈希
密钥交换 仅支持 RSA(无后向安全) 支持 ECDHE、DHE(带后向安全,即使私钥泄露,历史数据仍安全)
扩展性 几乎无扩展字段 支持扩展字段(如 ALPN、SNI)

六、TLS 握手的优化

TLS 握手默认需要 2~3 个 RTT(往返时间),通过以下优化可减少延迟:

1. Session 缓存(会话复用)

  • Session ID :服务器缓存会话密钥,客户端下次握手时发送Session ID,服务器直接复用密钥(无需重新协商),握手仅需 1 个 RTT。
  • Session Ticket:服务器将会话密钥加密为 "Ticket" 发送给客户端,客户端下次握手时携带 Ticket,服务器解密后复用密钥(无需服务器缓存)。

2. False Start(假启动)

客户端在发送Finished消息后,直接发送应用数据(无需等待服务器的Finished消息),减少 1 个 RTT。

3. 0-RTT(TLS1.3 特性)

客户端复用之前的会话密钥,在首次请求时直接发送加密的应用数据,实现 "0 往返" 握手(但存在重放攻击风险,需业务层防护)。

七、TLS 与量子通讯的原理

量子计算机的 "肖尔算法" 可快速破解 RSA、ECC 等传统加密算法,因此需要量子安全的加密方案,主要包括 "量子密钥分发(QKD)" 和 "后量子加密算法"。

量子通讯 BB84 协议的执行流程

BB84 是最经典的 QKD 协议,利用量子的 "叠加态" 和 "不可克隆定理",在不安全信道上生成安全的共享密钥(可用于 TLS 的会话密钥):

  1. Alice 生成量子比特

    • 选两组基:Z 基(测量结果为|0>|1>)、X 基(测量结果为|+>|->);
    • 随机生成明文密钥(如0101),随机选基对每个比特编码:
      • 若比特是0,选 Z 基则编码为|0>,选 X 基则编码为|+>
      • 若比特是1,选 Z 基则编码为|1>,选 X 基则编码为|->
    • 将编码后的量子比特(如光子)发送给 Bob。
  2. Bob 测量量子比特

    • Bob 随机选基(Z 或 X)测量每个量子比特,记录测量结果。
  3. 基比对(经典信道)

    • Alice 和 Bob 公开各自的选基信息,保留 "基相同" 的比特(基不同的比特丢弃),得到 "原始密钥"。
  4. 纠错与隐私放大

    • 双方通过经典信道验证原始密钥的误码率,纠正错误;
    • 对纠错后的密钥进行 "隐私放大"(缩短密钥长度,消除窃听者可能获取的信息),得到最终共享密钥。

该密钥可用于 TLS 的会话密钥,实现 "量子安全" 的加密通信。

我们用 "彩色卡片 + 正反面" 的生活场景,把 BB84 协议简化成 "Alice 和 Bob 偷偷生成共享密码,同时防 Eve 偷听" 的过程:

先定义 "量子工具" 的生活类比

  • 基(Z 基 / X 基):类比成 "卡片颜色"------ 红色卡片 = Z 基,蓝色卡片 = X 基(不同颜色代表不同的 "观察规则")。
  • 比特(0/1) :类比成 "卡片正反面"------
    • 用 ** 红色卡片(Z 基)** 时:正面 = 0,反面 = 1;
    • 用 ** 蓝色卡片(X 基)** 时:正面 = 0,反面 = 1;
  • 量子比特(光子):就是 "写了比特的彩色卡片"------ 比如 "红色正面卡"=Z 基的 0,"蓝色反面卡"=X 基的 1。
  • 不可克隆定理:Eve(窃听者)没法 "偷偷复制卡片",只要她碰了卡片,卡片的颜色 / 正反面会被改变。

BB84 协议简化流程(生成 2 位共享密码)

步骤 1:Alice 写卡片(生成量子比特)

Alice 要生成2 位密码,她做了 2 件事:

  1. 随机选 2 个比特(比如想生成的密码是0、1);
  2. 给每个比特随机选 "卡片颜色(基)",写好正反面:
    • 第 1 位比特0:选红色卡片(Z 基),写 "正面"(对应 Z 基的 0);
    • 第 2 位比特1:选蓝色卡片(X 基),写 "反面"(对应 X 基的 1)。

然后 Alice 把这 2 张卡片(红色正面、蓝色反面)偷偷传给 Bob。

步骤 2:Bob 看卡片(测量量子比特)

Bob 不知道 Alice 用了什么颜色的卡片,他只能 ** 随机选颜色(基)** 看卡片:

  • 看第 1 张卡片:Bob 选了红色(Z 基) ,看到是 "正面",记为0
  • 看第 2 张卡片:Bob 选了红色(Z 基) ,但这张实际是蓝色卡片(X 基)------ 按红色规则看蓝色卡片,结果会 "不准",他看到是 "反面",记为1
步骤 3:基比对(公开说颜色,不说正反面)

Alice 和 Bob 在 "公开聊天(经典信道)" 里只说卡片颜色(基),不说正反面(比特):

  • Alice 说:"第 1 张我用的红色,第 2 张蓝色";
  • Bob 说:"第 1 张我用的红色,第 2 张红色"。

他们保留颜色相同的卡片(因为颜色不同时,Bob 的结果肯定不准):

  • 第 1 张:Alice 和 Bob 都用了红色→保留;
  • 第 2 张:Alice 蓝色、Bob 红色→丢弃。

此时他们的原始密码 就是第 1 张的比特:0

步骤 4:纠错(确保结果一致)

如果他们多传几张卡片,比如传了 3 张,可能出现 "颜色相同但正反面记的不一样" 的情况(比如 Alice 记的是正面,Bob 记成反面)------ 这时候他们会在公开聊天里 "核对部分结果",把错误的比特改掉(比如发现第 3 张颜色相同但结果不同,改成一致的)。

步骤 5:隐私放大(防 Eve 偷看)

假设 Eve 偷偷碰了第 2 张卡片(蓝色反面):

  • Eve 选红色卡片看,会把 "蓝色反面卡" 改成 "红色某面卡";
  • 等 Bob 用红色看这张卡时,结果会和 Alice 的原始比特完全无关;
  • Alice 和 Bob 基比对时,发现 "颜色相同但结果对不上",就知道 "被偷听了",会废掉这次密码,重新生成。

如果没被偷听,他们会把原始密码缩短一点 (比如原始密码是010,缩短成01)------ 去掉可能被 Eve 偷偷获取的信息,得到最终的共享密码 (比如0)。

最终效果

Alice 和 Bob 拿到了相同的共享密码(比如0),这个密码可以用来当 TLS 的会话密钥 ------ 而且 Eve 要么没偷听到,要么一偷听就会被发现,完美实现 "量子安全" 的密钥共享。

0voice · GitHub

相关推荐
不知疲倦的仄仄11 小时前
第一天:从 ByteBuffer 内存模型到网络粘包处理实战
java·网络·nio
testpassportcn11 小时前
Technology Solutions Professional NS0-005 認證介紹【NetApp 官方認證
网络·学习·改行学it
C_心欲无痕11 小时前
网络相关 - http1.1 与 http2
前端·网络
小白电脑技术12 小时前
网络进阶教程:节点小宝中心节点策略的反向使用方法!
网络·电脑
lin张12 小时前
Kubernetes 核心网络方案与资源管理(一)
网络·容器·kubernetes
学烹饪的小胡桃12 小时前
WGCAT工单系统操作指南,如何将工单指派给多人处理
linux·运维·服务器·网络·工单系统
C_心欲无痕12 小时前
网络相关 - 跨域解决方式
前端·网络
liulilittle12 小时前
Windows WSL部署Ubuntu子系统到其它磁盘上
linux·运维·服务器·网络·windows·ubuntu·wsl
易天ETU12 小时前
2026年光模块市场分析与预见
大数据·运维·网络·人工智能·光模块·光通信
C_心欲无痕12 小时前
网络相关 - XSS跨站脚本攻击与防御
前端·网络·xss