网络与信息安全技术 第 7 篇:密码学原理与安全认证机制

全文摘要

本文将带你深入理解密码学的基础理论和信息安全防护的核心机制。你将学到加密通信模型、传统加密算法、对称密钥加密(DES、AES)、公开密钥加密(RSA)、Diffie-Hellman密钥交换、散列函数(MD5、SHA)、消息完整性与数字签名、身份认证机制、密钥分发与公钥基础设施、访问控制模型。通过阅读本文,你将掌握密码学的核心原理,理解信息安全系统的设计基础。


一、密码学概述

密码学(Cryptography)是研究信息保密、认证和完整性的科学。密码学是信息安全的基石,为机密性、完整性、认证、不可否认性提供基础机制。

密码学的基本概念

明文(Plaintext):原始的、可理解的信息。

密文(Ciphertext):加密后的、不可理解的信息。

加密(Encryption):将明文转换为密文的过程。

解密(Decryption):将密文还原为明文的过程。

密钥(Key):控制加密和解密过程的参数。密钥是密码安全的核心,攻击者获取密钥就能破解密码。

密码分析(Cryptanalysis):在不知道密钥的情况下,从密文推导出明文或密钥的过程。

加密通信模型

flowchart LR
    subgraph Sender[发送方]
        A[明文输入]
        K1[密钥]
        E[加密算法]
    end

    subgraph Channel[不安全信道]
        C[密文传输<br/>可能被窃听/篡改]
    end

    subgraph Receiver[接收方]
        K2[密钥]
        D[解密算法]
        B[明文输出]
    end

    A --> E
    K1 --> E
    E --> C
    C --> D
    K2 --> D
    D --> B

    Attacker[攻击者<br/>窃听或篡改密文]

    Channel -.-> Attacker

    style Sender fill:#e3f2fd
    style Channel fill:#ffcdd2
    style Receiver fill:#c8e6c9

图表讲解:这张图展示了加密通信的基本模型——这是理解密码学作用的基础框架。

发送方有明文和密钥,通过加密算法生成密文。密文通过不安全信道传输,攻击者可以窃听或篡改密文,但无法理解密文内容(没有密钥)。接收方有密钥(通常与发送方的密钥相同或有数学关系),通过解密算法将密文还原为明文。

如果密文被篡改,解密后通常得到乱码或检测到完整性错误,接收方可以知道数据被篡改。这种机制保护了数据的机密性和完整性。

密码算法的分类

按密钥类型分类

  • 对称密钥密码(Symmetric-key Cryptography):加密和解密使用相同密钥或可相互推导的密钥。如DES、AES。
  • 公开密钥密码(Public-key Cryptography):加密和解密使用不同密钥,公钥加密、私钥解密。如RSA、ECC。

按处理方式分类

  • 分组密码(Block Cipher):将明文分成固定长度的分组,逐组加密。如DES、AES。
  • 流密码(Stream Cipher):逐位或逐字节加密,产生密钥流与明文异或。如RC4。

密码分析攻击类型

唯密文攻击(Ciphertext-only Attack):攻击者只有密文,试图推导出明文或密钥。这是最容易防范的攻击。

已知明文攻击(Known-plaintext Attack):攻击者有一些明文和对应的密文,试图推导出密钥。

选择明文攻击(Chosen-plaintext Attack):攻击者可以选择任意明文并获得对应密文,试图推导出密钥。

选择密文攻击(Chosen-ciphertext Attack):攻击者可以选择任意密文并获得对应明文,试图推导出密钥。

现代密码算法设计目标是:即使攻击者可以执行选择明文攻击和选择密文攻击,只要密钥长度足够,计算上不可能破解。


二、传统加密算法

传统加密算法主要用于理解密码学原理,现代密码学不再使用。

替代密码

简单替代密码(Monoalphabetic Substitution):将明文中的每个字母替换为另一个字母。凯撒密码(Caesar Cipher)是最简单的替代密码,将字母表移位(如A→D,B→E,…,W→Z,X→A,Y→B,Z→C)。

简单替代密码的密钥空间是26!(约4×10²⁶),看起来很大。但通过频率分析可以破解:不同语言中字母的出现频率不同(英语中E最常见,约占12.7%),分析密文中字母频率,推断明文。

多表替代密码(Polyalphabetic Substitution):使用多个替代表,明文的不同位置使用不同替代表。维吉尼亚密码(Vigenère Cipher)是著名的多表替代密码,使用密钥(如LEMON)控制替代表的选择,第一个字母用L移位,第二个用E移位,…

维吉尼亚密码一度被认为是不可破解的,但巴比奇(Babbage)和卡西斯基(Kasiski)独立找到了破解方法:分析重复模式,推断密钥长度,然后分解为多个简单替代密码。

换位密码

周期换位密码:将明文按行写入矩阵,按列读出密文。例如,明文”THISISASECRETMESSAGE”按4列矩阵:

T H I S
I S A S
E C R E
T M E S
S A G E

按列读出:TIETSHCCMAMIRAESGSSE

列换位密码:类似,但读出的列按密钥指定的顺序排列。

传统加密算法的主要问题是密钥管理困难(通信双方需要预先共享密钥)和抗分析能力弱(容易被频率分析破解)。


三、对称密钥加密算法

对称密钥加密算法是现代密码学的基础,广泛用于数据加密。

Feistel分组密码结构

Feistel结构是许多分组密码的基础,包括DES。Feistel结构将明文分成左半部分L和右半部分R,经过多轮迭代,每轮:

L_i = R_{i-1} R_i = L_{i-1} ⊕ F(R_{i-1}, K_i)

其中F是轮函数,K_i是轮密钥,⊕是异或。Feistel结构的优点是加密和解密使用相同算法(只是轮密钥逆序使用),简化实现。

DES算法

DES(Data Encryption Standard,数据加密标准)是IBM开发、1977年被美国政府采纳为标准的分组密码。DES使用64位密钥(有效56位,8位是校验位),64位分组,16轮Feistel结构。

DES的弱点

  • 密钥长度短:56位密钥只有2⁵⁶≈7×10¹⁶种可能,现代计算机可以暴力破解。
  • 半弱密钥:某些密钥产生相同的加密和解密结果。
  • 互补性:如果明文取反、密钥取反,密文也取反,可以减少搜索空间。

3DES(Triple DES):为了弥补DES的不足,使用3次DES。3DES-EEE(加密-加密-加密)使用两个密钥K1和K2,C = E_K1(E_K2(E_K1(P)))。3DES有效密钥长度112位,安全性比DES高,但速度慢3倍。

AES算法

AES(Advanced Encryption Standard,高级加密标准)是2001年取代DES的新标准。AES支持128、192、256位密钥,128位分组,使用替代-置换网络(SPN),不是Feistel结构。

AES的特点

  • 密钥长度灵活:AES-128、AES-192、AES-256,适应不同安全需求
  • 效率高:硬件和软件实现都很快,支持指令集加速(如Intel AES-NI)
  • 安全性好:目前没有已知的有效攻击

AES已成为最广泛使用的对称加密算法,用于WiFi(WPA2)、TLS、文件加密、磁盘加密等。

分组密码工作模式

分组密码加密固定长度的分组,但明文长度通常不是分组长度的整数倍。工作模式(Mode of Operation)定义如何处理超过一个分组的数据。

ECB(Electronic Codebook,电码本模式):每个分组独立加密。简单但安全性差,相同的明文分组产生相同的密文分组,无法隐藏数据模式。

CBC(Cipher Block Chaining,密码分组链接):每个明文分组先与前一个密文分组异或,再加密。第一个分组使用初始化向量(IV)。CBC隐藏了数据模式,相同的明文产生不同的密文。缺点是加密不能并行,解密可以并行。

CFB(Cipher Feedback,密码反馈):将分组密码转换为自同步流密码。每个密文分组反馈,影响下一个明文分组的加密。

OFB(Output Feedback,输出反馈):类似CFB,但输出反馈而非密文反馈,错误不传播。

CTR(Counter,计数器):将分组密码转换为流密码。计数器作为分组密码的输入,产生的密钥流与明文异或。CTR可以并行加密和解密,效率高。

流密码

流密码逐位或逐字节加密,产生密钥流与明文异或。流密码的优点是可以加密任意长度的数据(不需要填充),适合流式数据。缺点是密钥流不能重复(否则容易被分析)。

RC4是最著名的流密码,用于SSL/TLS、WEP。RC4的问题:密钥流的前几个字节有偏差(某些值出现概率更高),相关密钥攻击。现代协议已经弃用RC4,改用AES-GCM等。


四、公开密钥加密算法

公开密钥加密算法解决了密钥分发问题,是现代密码学的革命。

公开密钥密码的基本思想

公开密钥密码使用一对密钥:公钥(public key)和私钥(private key)。公钥公开,私钥保密。用公钥加密的数据只能用私钥解密;用私钥加密的数据只能用公钥解密。

单向陷门函数(Trapdoor One-way Function):正向计算容易,反向计算困难,但有陷门(私钥)可以轻松反向。RSA基于大整数分解的困难性,椭圆曲线密码基于离散对数问题的困难性。

RSA算法

RSA由Rivest、Shamir、Adleman在1977年提出,是最著名的公开密钥算法。

RSA密钥生成

  1. 选择两个大素数p和q
  2. 计算n = p×q,φ(n) = (p-1)×(q-1)
  3. 选择e,满足1 < e < φ(n)且gcd(e, φ(n)) = 1(通常e=65537)
  4. 计算d,满足e×d ≡ 1 (mod φ(n))
  5. 公钥是,私钥是

RSA加密:密文 = 明文^e mod n

RSA解密:明文 = 密文^d mod n

RSA的安全性:基于大整数分解的困难性。给定n,难以找到p和q。如果找到p和q,可以计算φ(n)和d。随着计算能力提高,RSA密钥长度需要增加。目前RSA-2048被认为是安全的,RSA-1024已不安全。

RSA的缺点

  • 速度慢:比DES/AES慢1000倍以上
  • 密钥尺寸大:RSA-2048的公钥256字节,AES-256的密钥32字节
  • 填充要求:原始RSA有确定性(相同明文产生相同密文),需要填充(如OAEP)

Diffie-Hellman密钥交换

Diffie-Hellman密钥交换协议由Diffie和Hellman在1976年提出,是第一个公开密钥算法(比RSA早一年)。DH不用于加密解密,用于在公开信道上协商密钥。

DH密钥交换过程

  1. 全局参数:大素数p和生成元g
  2. Alice选择随机数a,计算A = g^a mod p,发送A给Bob
  3. Bob选择随机数b,计算B = g^b mod p,发送B给Alice
  4. Alice计算s = B^a mod p = (g^b)^a mod p = g^(ab) mod p
  5. Bob计算s = A^b mod p = (g^a)^b mod p = g^(ab) mod p
  6. Alice和Bob获得相同的共享密钥s

窃听者知道p、g、A、B,但不知道a和b。离散对数问题使得从A、B推导a、b在计算上不可行。DH的安全性与RSA类似,基于离散对数问题的困难性。

椭圆曲线Diffie-Hellman(ECDH):在椭圆曲线上实现DH,可以使用更短的密钥(256位ECC相当于3072位RSA),计算更快,安全性更好。

数字签名

数字签名是公开密钥密码的重要应用,提供认证和不可否认性。

RSA签名

  1. 签名:签名 = 消息哈希^d mod n(用私钥)
  2. 验证:计算消息哈希,检查 哈希 ?= 签名^e mod n(用公钥)

只有私钥持有者可以生成签名,任何人可以用公钥验证签名。由于私钥保密,签名不可伪造,提供不可否认性。

DSA(Digital Signature Algorithm):美国数字签名标准,基于离散对数问题,比RSA签名略快但密钥更大。

ECDSA(Elliptic Curve DSA):椭圆曲线数字签名,密钥更小,签名更快。


五、散列函数

散列函数(Hash Function)将任意长度的消息映射为固定长度的哈希值(消息摘要)。

散列函数的性质

单向性(Preimage resistance):给定哈希值h,难以找到消息M使得Hash(M) = h。

弱抗碰撞性(Second preimage resistance):给定消息M1,难以找到M2使得Hash(M1) = Hash(M2)。

强抗碰撞性(Collision resistance):难以找到任意M1和M2使得Hash(M1) = Hash(M2)。

雪崩效应(Avalanche effect):输入的微小变化导致输出的巨大变化。

MD5

MD5(Message Digest 5)由Rivest设计,产生128位哈希值。MD5已被攻破,可以构造碰撞(两个不同消息产生相同哈希值)。不应用于安全目的,但可用于非加密的哈希(如文件校验)。

SHA家族

SHA(Secure Hash Algorithm)是美国国家标准。

SHA-1:产生160位哈希值。SHA-1已被攻破(Google碰撞攻击),不应用于安全目的。

SHA-2:包括SHA-224、SHA-256、SHA-384、SHA-512。SHA-256产生256位哈希值,目前被认为是安全的。

SHA-3:2015年标准化,基于Keccak算法,与SHA-2不同的结构,作为SHA-2的后备。

散列函数的应用

消息认证:在消息后附加哈希值,接收方重新计算哈希值,验证消息完整性。如果消息被篡改,哈希值不匹配。为防止攻击者同时修改消息和哈希值,使用HMAC(Hash-based MAC):HMAC(K, M) = Hash((K ⊕ opad) || Hash((K ⊕ ipad) || M)),其中K是密钥。

数字签名:对消息的哈希值签名,而不是对整个消息签名。哈希函数的固定输出长度使得签名长度固定。

口令存储:存储口令的哈希值而不是明文。为防止彩虹表攻击,使用盐(salt)随机值。存储 Hash(口令 || salt) 和 salt。


六、消息完整性与数字签名

消息完整性确保数据在传输或存储过程中不被篡改,数字签名同时提供完整性、认证和不可否认性。

报文认证码

MAC(Message Authentication Code,报文认证码)使用密钥生成定长的认证标签,附加在消息后。接收方用相同密钥重新计算MAC,验证消息完整性和真实性。

HMAC是基于散列函数的MAC,广泛使用。HMAC的安全性依赖于散列函数的安全性,如果散列函数安全,HMAC也安全。

数字签名

数字签名使用公开密钥密码,私钥签名,公钥验证。签名过程:计算消息的哈希值,用私钥加密哈希值。验证过程:用公钥解密签名,得到哈希值,重新计算消息哈希值,比较。

数字签名提供:

  • 消息完整性:如果消息被篡改,哈希值不匹配
  • 认证:只有私钥持有者可以生成签名
  • 不可否认性:私钥持有者无法否认签名(私钥保密)

证书与公钥基础设施(PKI)

如何信任公钥?如果攻击者替换公钥,可以用自己的私钥签名,冒充他人。

证书(Certificate)是由证书认证中心(CA,Certificate Authority)签名的文档,包含公钥、身份信息、CA签名。用户信任CA的公钥(预装在操作系统或浏览器中),验证证书的CA签名,信任证书中的公钥。

PKI(Public Key Infrastructure,公钥基础设施)是管理公钥证书的框架,包括:

  • CA:签发证书,维护证书废止列表(CRL)或在线证书状态协议(OCSP)
  • RA(注册中心):验证证书申请者的身份
  • 证书库:存储和发布证书
  • 应用:使用证书的应用程序(浏览器、邮件客户端)

七、身份认证

身份认证(Authentication)验证通信实体的身份,是访问控制的基础。

基于共享密钥的身份认证

挑战-响应(Challenge-Response):

  1. 认证方生成随机挑战(nonce)
  2. 证明方用共享密钥K计算响应 = Hash(挑战, K),发送响应
  3. 认证方用相同密钥计算Hash(挑战, K),验证响应

攻击者即使窃听了挑战和响应,也无法重放,因为下次挑战不同。

基于公开密钥的身份认证

挑战-响应

  1. 认证方生成随机挑战
  2. 证明方用私钥签名挑战,发送签名
  3. 认证方用证明方的公钥验证签名

基于公开密钥的认证不需要预先共享密钥,但需要验证公钥的真实性(通过证书)。

Kerberos

Kerberos是MIT开发的网络认证协议,基于对称密钥和可信第三方(KDC,Key Distribution Center)。

Kerberos的组成

  • AS(Authentication Service,认证服务):验证用户身份,发放TGT(Ticket Granting Ticket)
  • TGS(Ticket Granting Service,票据授予服务):发放服务票据
  • KDC(Key Distribution Center,密钥分发中心):包含AS和TGS

Kerberos的认证过程

  1. 用户向AS请求TGT,AS验证用户密码,返回加密的TGT
  2. 用户向TGS请求服务票据,发送TGT和认证者
  3. TGS验证TGT,返回服务票据
  4. 用户向服务请求服务,发送服务票据和认证者
  5. 服务验证票据,提供服务

Kerberos的优点:单点登录(登录一次访问多个服务),强密码学(不通过网络发送密码)。缺点:依赖时间同步,单点故障(KDC)。


八、密钥管理与分发

密钥管理是密码系统最脆弱的部分。加密算法可以公开,密钥必须保密。

对称密钥的分发

对称密钥的分发有两个基本问题:如何通信双方共享密钥?如何确保密钥分发的安全?

预共享密钥:通过安全通道(如当面交付、信使)预先共享密钥。适合小规模、固定的通信关系。

密钥分发中心(KDC):使用可信第三方分发密钥。Needham-Schroeder协议是经典的KDC协议,KDC与每个用户共享主密钥,用主密钥加密会话密钥。

Diffie-Hellman密钥交换:在公开信道上协商密钥,无需预先共享密钥。但DH容易受中间人攻击,需要认证(如数字签名)。

公开密钥的分发

公开密钥的分发问题是:如何确保公钥的真实性?如果攻击者替换公钥,可以用自己的私钥解密或签名。

证书:由CA签名的公钥证书。用户信任CA,验证证书签名,信任证书中的公钥。

PGP的信任模型:不依赖CA,通过信任网络(Web of Trust)验证公钥。用户互相签名公钥,形成信任链。

密钥更新与撤销

密钥更新:定期更换密钥,限制密钥泄露的影响。会话密钥(session key)用于单次通信,主密钥(master key)长期使用。

密钥撤销:密钥泄露或过期后,需要撤销。对称密钥无法撤销(不知道有多少副本),公开密钥可以通过证书撤销:CA维护CRL(证书废止列表)或提供OCSP(在线证书状态协议)查询。


九、访问控制

访问控制(Access Control)限制主体(Subject,如用户、进程)对客体(Object,如文件、资源)的访问。

访问控制的三要素

认证(Authentication):验证主体身份(“你是谁?”)

授权(Authorization):确定主体对客体的访问权限(“你能做什么?”)

审计(Auditing):记录访问行为,用于事后追责(“你做了什么?“)

访问控制策略

自主访问控制(Discretionary Access Control,DAC):资源拥有者决定访问权限。Unix文件系统是DAC的例子,文件拥有者可以设置读、写、执行权限。

强制访问控制(Mandatory Access Control,MAC):系统强制执行访问策略,用户不能改变。军事安全级别是MAC的例子,机密文件只能被有机密许可的人访问。

基于角色的访问控制(Role-Based Access Control,RBAC):用户被分配角色,角色有权限。RBAC简化管理,用户改变角色即可改变权限。

基于属性的访问控制(Attribute-Based Access Control,ABAC):基于主体、客体、环境的属性决定访问。ABAC更灵活,可以实现”上午9点到下午5点、在办公室、经理可以访问财务报表”这样的复杂策略。

访问控制的实现

访问控制列表(ACL):每个客体存储允许访问的主体和权限。ACL适合主体少、客体多的场景。

能力表(Capability List):每个主体存储可以访问的客体和权限。能力表适合主体多、客体少的场景。

访问控制矩阵:主体×客体的矩阵,每个单元是访问权限。ACL和能力表是访问控制矩阵的两种实现方式。


十、知识总结表

协议/技术主要功能密钥长度安全性
DES对称加密56位已不安全
3DES对称加密112位安全但慢
AES对称加密128/192/256位安全
RSA公钥加密、签名2048位+安全
DH密钥交换2048位+安全
ECDSA签名256位安全
MD5散列函数128位已不安全
SHA-256散列函数256位安全
HMAC消息认证可变安全
Kerberos认证可变安全

常见问题解答

Q1:为什么不能用对称加密替代公钥加密?

:对称加密和公钥加密解决的问题不同。

对称加密提供机密性,但密钥分发困难:通信双方需要预先共享密钥,规模为N的网络需要N(N-1)/2个密钥,密钥管理复杂。

公钥加密解决了密钥分发问题,公钥可以公开,私钥保密。公钥加密更慢(比AES慢1000倍),不适合加密大量数据。

实际应用中,公钥加密用于分发密钥,对称加密用于数据加密(混合加密)。TLS/SSL就是这样工作:用RSA/ECDHE协商会话密钥,用AES加密数据。


Q2:什么是中间人攻击,如何防止?

:中间人攻击(MITM)是攻击者拦截并可能修改通信。

攻击者冒充接收方与发送方通信,冒充发送方与接收方通信,双方都认为在与对方通信,实际与攻击者通信。

防止中间人攻击需要认证:确保与正确的实体通信。公钥加密中,如果攻击者替换公钥,可以解密和签名。使用证书和PKI可以验证公钥的真实性。对称密钥交换中,DH容易受中间人攻击(攻击者与双方分别协商密钥)。

使用签名DH(签名参数和密钥)可以防止。总之,认证是防止中间人攻击的关键。


Q3:量子计算如何威胁密码学,后量子密码是什么?

:量子计算使用量子并行性,可以快速解决某些数学问题。

Shor算法可以高效分解大整数和计算离散对数,威胁RSA、DH、ECC。Grover算法可以加速无序搜索,将对称密钥安全性减半(AES-128变成64位安全)。

后量子密码是抗量子计算的密码算法,包括基于格的密码、基于编码的密码、多变量密码、哈希密码。NIST正在标准化后量子算法,预计2024年公布标准。

对于长期保密的数据(如国家机密、医疗记录),需要考虑量子威胁,现在就迁移到后量子密码。短期数据(如信用卡号)受威胁较小,因为量子计算机可能还需要10-20年才能实用。


Q4:什么是零知识证明,如何应用?

:零知识证明(Zero-Knowledge Proof,ZKP)允许证明者向验证者证明某个事实,但不透露任何额外信息。

例如,证明”我知道口令”但不透露口令本身,证明”我满足年龄要求”但不透露出生日期。

零知识证明有三个性质:完备性(如果事实为真,诚实的证明者可以说服验证者)、可靠性(如果事实为假,作弊的证明者无法说服验证者)、零知识(验证者除了事实的真假外学不到任何信息)。

应用:身份认证(证明知道口令但不泄露口令)、隐私保护(证明满足条件但不透露数据)、区块链(隐私交易,证明交易有效但不泄露交易详情)。zk-SNARK和zk-STARK是零知识证明的实现,用于Zcash等隐私币。


Q5:同态加密是什么,有什么应用?

:同态加密(Homomorphic Encryption)允许在密文上直接计算,解密结果等于在明文上计算的结果。

例如,加密的2和加密的3相乘,解密得到6。

同态加密分为:部分同态(支持一种运算,如加法或乘法),somewhat同态(支持有限次运算),全同态(支持任意次运算)。全同态加密(FHE)是密码学的圣杯,允许云服务器在加密数据上计算,而不知道数据内容。

应用:隐私保护计算(外包计算而不泄露数据)、医疗数据分析(医院加密病人数据发送给云端,云端分析而不知道病人隐私)、金融审计(加密交易数据,审计人员验证而不泄露交易细节)。FHE的计算开销很大(1000倍以上),实用化还在研究中。


更新时间:2026年3月2日 系列:网络与信息安全技术 标签:#密码学 对称加密 公钥加密 RSA AES 数字签名 PKI 认证