前置知识: 计算机基础

信息安全基础

6 minIntermediate2026/6/14

信息安全基础:密码学原理、对称加密、非对称加密、哈希函数与数字签名

1. 信息安全概述

1.1 CIA 三元组

属性说明威胁
机密性(Confidentiality)信息不被未授权访问窃听、泄露
完整性(Integrity)信息不被未授权修改篡改、伪造
可用性(Availability)信息可被授权用户访问DDoS、破坏

1.2 安全服务

  • 认证:验证身份
  • 访问控制:限制资源访问
  • 数据机密性:防止信息泄露
  • 数据完整性:检测篡改
  • 不可否认:防止抵赖

2. 对称加密

2.1 基本原理

加密和解密使用相同密钥:

EK(M)=C,DK(C)=ME_K(M) = C, \quad D_K(C) = M

2.2 分组密码

AES(Advanced Encryption Standard)

参数AES-128AES-192AES-256
密钥长度128 位192 位256 位
轮数101214
分组大小128 位128 位128 位

AES 操作:

  1. SubBytes:S盒字节替换
  2. ShiftRows:行移位
  3. MixColumns:列混合
  4. AddRoundKey:轮密钥加

工作模式

模式并行加密并行解密随机访问错误传播
ECB1块
CBC2块
CTR1块
GCM1块

2.3 流密码

ChaCha20:Google 推荐的流密码,比 AES 在软件实现上更快。

密钥流=ChaCha20_Block(Key,Counter,Nonce)\text{密钥流} = \text{ChaCha20\_Block}(Key, Counter, Nonce)

Ci=Mi密钥流iC_i = M_i \oplus \text{密钥流}_i

3. 非对称加密

3.1 基本原理

使用一对密钥:公钥加密,私钥解密。

EPK(M)=C,DSK(C)=ME_{PK}(M) = C, \quad D_{SK}(C) = M

3.2 RSA

密钥生成

  1. 选择两个大素数 p,qp, q
  2. 计算 n=pqn = pqϕ(n)=(p1)(q1)\phi(n) = (p-1)(q-1)
  3. 选择 ee,满足 1<e<ϕ(n)1 < e < \phi(n)gcd(e,ϕ(n))=1\gcd(e, \phi(n)) = 1
  4. 计算 dd,满足 ed1(modϕ(n))ed \equiv 1 \pmod{\phi(n)}
  5. 公钥 (n,e)(n, e),私钥 (n,d)(n, d)

加密C=MemodnC = M^e \mod n

解密M=CdmodnM = C^d \mod n

正确性:由 Euler 定理,MedM(modn)M^{ed} \equiv M \pmod{n}

安全性:基于大整数分解困难性。推荐密钥长度 ≥ 2048 位。

3.3 椭圆曲线密码(ECC)

在有限域上的椭圆曲线上定义运算:

y2=x3+ax+b(modp)y^2 = x^3 + ax + b \pmod{p}

ECDSA:椭圆曲线数字签名算法。

ECDH:椭圆曲线 Diffie-Hellman 密钥交换。

优势:256 位 ECC ≈ 3072 位 RSA 的安全强度。

3.4 Diffie-Hellman 密钥交换

允许双方在不安全信道上协商共享密钥:

Alice: 选择私钥 a,计算 A = g^a mod p,发送 A
Bob:   选择私钥 b,计算 B = g^b mod p,发送 B
共享密钥: K = g^{ab} mod p
  Alice: K = B^a mod p
  Bob:   K = A^b mod p

安全性基于离散对数问题。

4. 哈希函数

4.1 性质

  • 抗原象性:给定 hh,难以找到 mm 使得 H(m)=hH(m) = h
  • 抗第二原象性:给定 m1m_1,难以找到 m2m1m_2 \neq m_1 使得 H(m1)=H(m2)H(m_1) = H(m_2)
  • 抗碰撞性:难以找到 m1m2m_1 \neq m_2 使得 H(m1)=H(m2)H(m_1) = H(m_2)

4.2 常用哈希算法

算法输出长度状态
MD5128 位已破解
SHA-1160 位已破解
SHA-256256 位安全
SHA-3可变安全
BLAKE3可变安全

4.3 SHA-256 结构

基于 Merkle-Damgård 结构:

  1. 填充消息使其长度 448(mod512)\equiv 448 \pmod{512}
  2. 附加原始长度(64位)
  3. 以 512 位块处理
  4. 每块进行 64 轮压缩

5. 数字签名

5.1 签名流程

签名:Sign(SK, M) = σ
验证:Verify(PK, M, σ) = True/False

通常先对消息哈希再签名:

σ=Sign(SK,H(M))\sigma = \text{Sign}(SK, H(M))

5.2 RSA 签名

σ=H(M)dmodn\sigma = H(M)^d \mod n

验证:σemodn=?H(M)\text{验证:} \sigma^e \mod n \stackrel{?}{=} H(M)

5.3 DSA 签名

  1. 选择随机 kk
  2. r=(gkmodp)modqr = (g^k \mod p) \mod q
  3. s=k1(H(M)+xr)modqs = k^{-1}(H(M) + xr) \mod q
  4. 签名为 (r,s)(r, s)

注意kk 必须随机且不可重复,否则可推导出私钥。

6. 公钥基础设施(PKI)

6.1 数字证书

X.509 证书结构:

版本 | 序列号 | 签名算法 | 颁发者 | 有效期 | 主体 | 公钥 | 签名

6.2 证书链

根 CA → 中间 CA → 终端证书

验证时沿证书链逐级验证签名,直到信任的根 CA。

6.3 TLS/SSL

TLS 握手流程(简化):

1. ClientHello: 支持的加密套件、随机数
2. ServerHello: 选定加密套件、证书、随机数
3. Client: 验证证书,生成预主密钥,用服务器公钥加密发送
4. 双方: 根据预主密钥和随机数生成会话密钥
5. 切换到对称加密通信

7. 密码分析

7.1 攻击

攻击攻击者已知
唯密文攻击仅密文
已知明文攻击部分明文-密文对
选择明文攻击可选择明文加密
选择密文攻击可选择密文解密

7.2 生日攻击

利用生日悖论寻找哈希碰撞:

碰撞概率1en2/(22m)\text{碰撞概率} \approx 1 - e^{-n^2/(2 \cdot 2^m)}

其中 mm 为哈希输出位数,nn 为尝试次数。

找到碰撞所需的尝试次数约为 2m/22^{m/2},远小于暴力搜索的 2m2^m