第十九章 安全与加密 — 保护信息
导读
当你在网上购物,输入信用卡号时,你怎么知道这些信息不会被中间的黑客截获?当你发送一条加密的微信消息,你怎么知道只有接收者能够阅读?当你登录银行账户,你怎么知道与你通信的确实是银行的服务器,而不是一个假冒的网站?
这些问题的答案都指向同一个领域——信息安全与密码学(Information Security and Cryptography)。在数字时代,信息的安全关乎个人隐私、商业利益、国家安全。密码学——这门起源于古代的"秘密书写"艺术——已经成为保护数字世界的核心技术。
本章将全面介绍信息安全与密码学的基本原理。我们将从安全的基本目标开始,了解机密性、完整性、可用性;然后深入探讨对称加密、非对称加密、哈希函数、数字签名等密码学工具;接着了解TLS/SSL、身份认证、网络安全等实际应用;最后探讨量子计算对密码学的挑战和后量子密码学的发展。
核心概念详解
19.1 信息安全的基本目标
信息安全的核心目标通常用CIA三元组来概括:
机密性(Confidentiality):确保信息只被授权的人访问。未授权的人无法获取信息的内容。
完整性(Integrity):确保信息在传输和存储过程中不被篡改。任何修改都能被检测到。
可用性(Availability):确保授权用户在需要时可以访问信息和资源。
除了CIA三元组,还有其他重要的安全目标:
- 认证(Authentication):验证用户或系统的身份
- 不可否认性(Non-repudiation):确保行为的发起者不能否认其行为
- 授权(Authorization):控制用户对资源的访问权限
19.2 密码学简史
密码学的历史可以追溯到几千年前。
古典密码
凯撒密码(Caesar Cipher):古罗马时期,凯撒大帝使用字母移位来加密军事通信。例如,将每个字母向后移3位:A→D, B→E, ..., Z→C。
替换密码(Substitution Cipher):将每个字母替换为另一个字母。密钥是一个字母表的排列。虽然密钥空间很大(26! ≈ 4×10²⁶),但可以通过频率分析来破解。
维吉尼亚密码(Vigenère Cipher):使用多个替换表,密钥是一个关键词。曾被认为是"不可破解的",直到19世纪被破解。
机械密码
恩尼格玛机(Enigma):二战期间德国使用的转子密码机。通过多个转子的旋转实现复杂的多表替换。盟军破译恩尼格玛的故事是密码学历史上最著名的篇章之一,阿兰·图灵(Alan Turing)在其中发挥了关键作用。
现代密码学
1970年代是现代密码学的分水岭:
- 1976年:Whitfield Diffie和Martin Hellman发表了《密码学新方向》,提出了公钥密码学的概念
- 1977年:RSA算法(Rivest-Shamir-Adleman)被提出——第一个实用的公钥加密和数字签名算法
- 1977年:DES(Data Encryption Standard)被采纳为联邦标准——第一个广泛使用的对称加密标准
- 2001年:AES(Advanced Encryption Standard)被采纳——取代DES成为新的标准
19.3 对称加密
对称加密(Symmetric Encryption)使用同一个密钥进行加密和解密。
明文 → [加密, 密钥K] → 密文 → [解密, 密钥K] → 明文优点:速度快,适合加密大量数据
缺点:密钥分发问题——如何安全地将密钥传递给通信对方?
经典对称加密算法
DES(Data Encryption Standard):
- 56位密钥,64位数据块
- 16轮Feistel网络结构
- 1977年标准化,2000年代被破解
3DES(Triple DES):
- 使用三个密钥对数据进行三次DES加密
- 有效密钥长度168位(实际安全性约112位)
- 速度慢,正在被淘汰
AES(Advanced Encryption Standard):
- 128位数据块,密钥长度128/192/256位
- 替代AES竞赛的获胜者(Rijndael算法)
- 使用替代-置换网络(SPN)结构
- 目前被认为是非常安全的,没有已知的实用攻击
工作模式
对称加密算法通常只能加密固定大小的数据块。为了加密任意长度的数据,需要使用工作模式(Mode of Operation):
- ECB(Electronic Codebook):每个块独立加密。相同明文块产生相同密文块,不安全。
- CBC(Cipher Block Chaining):每个明文块与前一个密文块异或后再加密。需要初始化向量(IV)。
- CTR(Counter):将块密码转换为流密码。可以并行加密,支持随机访问。
- GCM(Galois/Counter Mode):CTR模式加上认证标签,同时提供加密和完整性保护。
19.4 非对称加密(公钥密码学)
非对称加密(Asymmetric Encryption)使用一对密钥:公钥(Public Key)和私钥(Private Key)。公钥可以公开,私钥必须保密。
明文 → [加密, 公钥] → 密文 → [解密, 私钥] → 明文公钥加密的数据只有对应的私钥可以解密。反过来,用私钥签名的数据,任何人都可以用对应的公钥验证。
优点:解决了密钥分发问题
缺点:速度比对称加密慢几个数量级
RSA算法
RSA是最著名的公钥加密算法,基于大整数分解的困难性。
密钥生成:
选择两个大素数p和q(各1024位以上)
计算n = p × q
计算φ(n) = (p-1)(q-1)
选择e,使得1 < e < φ(n)且gcd(e, φ(n)) = 1
计算d,使得d × e ≡ 1 (mod φ(n))
公钥 = (n, e),私钥 = (n, d)
加密:密文 = 明文^e mod n
解密:明文 = 密文^d mod n
RSA的安全性基于:已知n,分解出p和q是计算上困难的(对于足够大的n)。
椭圆曲线密码学(ECC)
ECC(Elliptic Curve Cryptography)基于椭圆曲线上的离散对数问题。
与RSA相比,ECC在相同安全强度下使用更短的密钥:
- 256位ECC ≈ 3072位RSA
- 更短的密钥意味着更快的运算和更小的存储
ECC被广泛应用于移动设备、IoT设备和TLS中。
密钥交换
Diffie-Hellman密钥交换允许双方在不安全的信道上协商出一个共享密钥,而不需要预先共享任何秘密。
Alice Bob
│ │
│── g^a mod p ─────────→│ (a是Alice的私钥)
│ │
│←── g^b mod p ─────────│ (b是Bob的私钥)
│ │
│ 共享密钥 = g^(ab) mod p │即使攻击者截获了g^a和g^b,也无法计算出g^ab(离散对数问题)。
19.5 哈希函数
哈希函数(Hash Function)将任意长度的输入映射为固定长度的输出(哈希值/摘要)。
性质:
- 确定性:相同输入总是产生相同输出
- 快速计算:可以快速计算任意输入的哈希值
- 单向性:从哈希值无法推导出原始输入(抗原像)
- 抗碰撞:很难找到两个不同的输入产生相同的哈希值
- 雪崩效应:输入的微小变化导致输出的巨大变化
常见哈希算法
MD5:128位输出。已被破解,不应用于安全目的。
SHA-1:160位输出。已被破解,Google在2017年展示了SHA-1碰撞攻击。
SHA-2:包括SHA-256(256位)和SHA-512(512位)。目前安全,广泛使用。
SHA-3:基于Keccak算法,与SHA-2结构不同。提供额外的安全边际。
哈希的应用
- 密码存储:存储密码的哈希值而不是明文
- 数据完整性:计算文件的哈希值来验证是否被篡改
- 数字签名:对消息的哈希值签名,而不是对整个消息签名
- 区块链:工作量证明(PoW)基于哈希计算
- 消息认证码(MAC):HMAC使用密钥和哈希函数提供消息认证
19.6 数字签名
数字签名(Digital Signature)用于验证消息的真实性和完整性,同时提供不可否认性。
签名过程:
计算消息的哈希值
用发送者的私钥加密哈希值,得到签名
将消息和签名一起发送
验证过程:
接收者计算消息的哈希值
用发送者的公钥解密签名,得到原始哈希值
比较两个哈希值是否相同
数字签名提供了:
- 认证:只有持有私钥的人才能产生有效的签名
- 完整性:消息被篡改后哈希值会改变
- 不可否认性:签名者不能否认自己签过名
19.7 数字证书与PKI
数字证书(Digital Certificate)是一个电子文档,将一个实体(个人、组织、服务器)的身份与其公钥绑定在一起。证书由证书颁发机构(CA, Certificate Authority)签名。
X.509证书包含:
- 版本号
- 序列号
- 签名算法标识
- 颁发者(CA)
- 有效期
- 主体(证书持有者)
- 主体的公钥
- CA的数字签名
PKI(Public Key Infrastructure)是管理公钥和证书的整个体系,包括:
- CA:颁发和管理证书
- RA(Registration Authority):验证实体身份
- 证书库:存储和分发证书
- CRL/OCSP:证书吊销列表/在线证书状态协议
19.8 TLS/SSL
TLS(Transport Layer Security)及其前身SSL(Secure Sockets Layer)是在不可靠的网络上提供安全通信的协议。HTTPS就是HTTP over TLS。
TLS握手过程(TLS 1.3简化版)
客户端 服务器
│ │
│── ClientHello ────────────────────→│ 支持的密码套件、随机数
│ │
│←── ServerHello ───────────────────│ 选择的密码套件、随机数
│ Certificate ───────────────────│ 服务器证书
│ ServerKeyShare ────────────────│ 密钥交换参数
│ │
│── ClientKeyShare ─────────────────→│ 密钥交换参数
│ [Change cipher spec] ──────────→│
│ Finished ──────────────────────→│
│ │
│←── [Change cipher spec] ──────────│
│ Finished ──────────────────────│
│ │
│◄════ 加密的应用数据 ═════════════►│TLS 1.3相比之前版本的主要改进:
- 握手只需1-RTT(甚至0-RTT恢复)
- 移除了不安全的算法(RSA密钥传输、RC4、DES等)
- 强制使用前向保密(Forward Secrecy)
19.9 身份认证
身份认证是验证用户或系统身份的过程。
认证因素
- 你知道什么(Knowledge):密码、PIN码
- 你拥有什么(Possession):手机、硬件令牌、智能卡
- 你是谁(Inherence):指纹、面部、虹膜、声纹
多因素认证(MFA)结合两种或多种因素,大幅提高安全性。
密码安全
密码是最常见的认证方式,但也最容易被攻击:
- 暴力破解:尝试所有可能的密码组合
- 字典攻击:使用常见密码列表
- 彩虹表:预计算的哈希值查找表
- 钓鱼攻击:假冒网站骗取密码
密码安全实践:
- 使用长且复杂的密码
- 不同网站使用不同密码
- 使用密码管理器
- 启用多因素认证
- 密码存储使用bcrypt、scrypt或Argon2等慢哈希函数
生物识别
- 指纹识别:最广泛使用,但可能被伪造
- 面部识别:方便但受光照、角度影响
- 虹膜识别:准确性高但设备昂贵
- 声纹识别:可用于电话认证
19.10 网络安全
防火墙
防火墙(Firewall)是网络安全的第一道防线,根据预定义的规则过滤网络流量。
- 包过滤防火墙:基于IP地址、端口号、协议过滤
- 状态检测防火墙:跟踪连接状态,做出更智能的过滤决策
- 应用层防火墙:深入检查应用层协议的内容
入侵检测与防御
IDS(Intrusion Detection System):监控网络或系统活动,检测可疑行为。
IPS(Intrusion Prevention System):在IDS的基础上,可以主动阻止攻击。
DDoS攻击
DDoS(Distributed Denial of Service)攻击通过大量僵尸网络向目标发送请求,耗尽其资源,使合法用户无法访问。
防御措施:流量清洗、CDN分散、速率限制、Anycast路由。
中间人攻击
中间人攻击(Man-in-the-Middle, MitM)中,攻击者拦截并可能篡改两方之间的通信。
防御:使用TLS加密、验证证书、使用证书固定(Certificate Pinning)。
19.11 隐私保护
差分隐私
差分隐私(Differential Privacy)在数据集中添加精心计算的噪声,使得单个记录的加入或移除不会显著影响查询结果。这样可以在发布统计信息的同时保护个人隐私。
零知识证明
零知识证明(Zero-Knowledge Proof)允许证明者向验证者证明某个陈述为真,而不泄露除"该陈述为真"之外的任何信息。
应用:隐私加密货币(Zcash)、身份认证(证明年龄超过18岁而不泄露具体年龄)。
端到端加密
端到端加密(End-to-End Encryption, E2EE)确保消息只有发送者和接收者可以阅读,即使是服务提供商也无法解密。
Signal协议是目前最广泛使用的E2EE协议,被WhatsApp、Signal、Skype等采用。
19.12 量子计算与后量子密码学
量子计算的威胁
量子计算机使用量子比特(qubit),可以同时处于0和1的叠加态。某些量子算法可以对密码学构成严重威胁:
Shor算法:可以在多项式时间内分解大整数和求解离散对数。这意味着RSA、DSA、ECC等公钥密码在足够大的量子计算机面前将不再安全。
Grover算法:可以将对称加密的搜索空间减半。AES-128的安全性降至64位,但AES-256仍然安全(128位安全性)。
后量子密码学
后量子密码学(Post-Quantum Cryptography, PQC)研究能够抵抗量子计算机攻击的密码算法。
NIST在2022年公布了首批后量子密码标准:
- CRYSTALS-Kyber:密钥封装/密钥交换(基于格)
- CRYSTALS-Dilithium:数字签名(基于格)
- FALCON:数字签名(基于格)
- SPHINCS+:数字签名(基于哈希)
量子密钥分发
QKD(Quantum Key Distribution)利用量子力学原理(如海森堡不确定性原理)来安全地分发密钥。任何窃听行为都会改变量子态,从而被检测到。
19.13 安全开发生命周期
安全不仅仅是密码学的问题,还需要在整个软件开发过程中考虑安全:
威胁建模:在系统设计阶段识别潜在的安全威胁。
安全编码:避免常见的安全漏洞(SQL注入、XSS、缓冲区溢出等)。
代码审计:定期审查代码,查找安全问题。
渗透测试:模拟攻击者的行为,测试系统的安全性。
安全更新:及时修补已知的安全漏洞。
重要知识点
知识点一:CIA三元组是安全的基本目标
机密性、完整性、可用性——信息安全的三个核心目标。
知识点二:对称加密和非对称加密各有用途
对称加密速度快但密钥分发困难,非对称加密解决了密钥分发但速度慢。实际中通常结合使用。
知识点三:哈希函数提供了数据完整性验证
单向、抗碰撞的哈希函数是密码学的基石之一。
知识点四:数字签名提供认证和不可否认性
用私钥签名、公钥验证,确保消息来源可信且未被篡改。
知识点五:TLS保护了互联网通信安全
TLS通过握手协商密钥,然后加密应用数据,是HTTPS的基础。
知识点六:量子计算威胁当前公钥密码
Shor算法可以破解RSA和ECC,后量子密码学正在开发抗量子的替代方案。
常见误区
误区一:"加密了就是安全的"
加密只是安全的一个方面。密钥管理、身份认证、访问控制、物理安全等同样重要。一个加密系统如果密钥管理不当,可能比不加密更不安全。
误区二:"自己设计的加密算法更安全"
密码学算法的安全性需要经过广泛的公开审查和分析。自创的算法几乎总是存在未知的弱点。应该使用经过验证的标准算法。
误区三:"HTTPS意味着网站是可信的"
HTTPS只保证通信是加密的,服务器身份经过了验证。但它不能保证网站本身是合法的——钓鱼网站也可以使用HTTPS。
误区四:"密码足够复杂就安全了"
密码安全不仅取决于复杂度,还取决于是否重复使用、是否被泄露、存储方式是否安全等。多因素认证比单纯依赖复杂密码更有效。
实践应用
应用一:检查网站的TLS配置
使用浏览器查看网站的证书信息,或使用在线工具(如SSL Labs)测试网站的TLS配置。
应用二:计算哈希值
使用命令行工具计算文件的哈希值:
sha256sum filename
md5sum filename应用三:生成密钥对
使用OpenSSL生成RSA密钥对:
openssl genrsa -out private.pem 2048
openssl rsa -in private.pem -pubout -out public.pem应用四:密码强度测试
分析不同密码的熵值(信息量),评估其抵抗暴力破解的能力。
本章小结
本章全面介绍了信息安全与密码学的基本原理:
安全目标:CIA三元组——机密性、完整性、可用性。
密码学历史:从凯撒密码到恩尼格玛,从DES到AES,从RSA到ECC。
对称加密:DES、3DES、AES,以及ECB、CBC、CTR、GCM等工作模式。
非对称加密:RSA、ECC、Diffie-Hellman密钥交换。
哈希函数:MD5、SHA-1、SHA-2、SHA-3,以及应用。
数字签名:认证、完整性、不可否认性。
数字证书与PKI:X.509证书、CA、证书链。
TLS/SSL:安全通信协议,握手过程,TLS 1.3的改进。
身份认证:密码、生物识别、多因素认证。
网络安全:防火墙、IDS/IPS、DDoS防御、MitM防御。
隐私保护:差分隐私、零知识证明、端到端加密。
后量子密码学:量子计算的威胁和抗量子算法。
安全是一个持续的斗争——攻击者在不断寻找新的漏洞,防御者在不断完善保护措施。在下一章——也是最后一章中,我们将展望未来——计算技术将走向何方?