网络与信息安全技术 第 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密钥生成:
- 选择两个大素数p和q
- 计算n = p×q,φ(n) = (p-1)×(q-1)
- 选择e,满足1 < e < φ(n)且gcd(e, φ(n)) = 1(通常e=65537)
- 计算d,满足e×d ≡ 1 (mod φ(n))
- 公钥是,私钥是
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密钥交换过程:
- 全局参数:大素数p和生成元g
- Alice选择随机数a,计算A = g^a mod p,发送A给Bob
- Bob选择随机数b,计算B = g^b mod p,发送B给Alice
- Alice计算s = B^a mod p = (g^b)^a mod p = g^(ab) mod p
- Bob计算s = A^b mod p = (g^a)^b mod p = g^(ab) mod p
- Alice和Bob获得相同的共享密钥s
窃听者知道p、g、A、B,但不知道a和b。离散对数问题使得从A、B推导a、b在计算上不可行。DH的安全性与RSA类似,基于离散对数问题的困难性。
椭圆曲线Diffie-Hellman(ECDH):在椭圆曲线上实现DH,可以使用更短的密钥(256位ECC相当于3072位RSA),计算更快,安全性更好。
数字签名
数字签名是公开密钥密码的重要应用,提供认证和不可否认性。
RSA签名:
- 签名:签名 = 消息哈希^d mod n(用私钥)
- 验证:计算消息哈希,检查 哈希 ?= 签名^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):
- 认证方生成随机挑战(nonce)
- 证明方用共享密钥K计算响应 = Hash(挑战, K),发送响应
- 认证方用相同密钥计算Hash(挑战, K),验证响应
攻击者即使窃听了挑战和响应,也无法重放,因为下次挑战不同。
基于公开密钥的身份认证
挑战-响应:
- 认证方生成随机挑战
- 证明方用私钥签名挑战,发送签名
- 认证方用证明方的公钥验证签名
基于公开密钥的认证不需要预先共享密钥,但需要验证公钥的真实性(通过证书)。
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的认证过程:
- 用户向AS请求TGT,AS验证用户密码,返回加密的TGT
- 用户向TGS请求服务票据,发送TGT和认证者
- TGS验证TGT,返回服务票据
- 用户向服务请求服务,发送服务票据和认证者
- 服务验证票据,提供服务
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 认证