引言 密码学是人类历史上最古老也最迷人的学科之一。从古罗马的军事密文,到现代的 TLS 加密,再到未来的量子密钥分发,密码学一直是我们保护秘密的最后一道防线。
古典密码时代 凯撒密码 凯撒密码是最早的替换式密码之一,由古罗马的凯撒大帝用于军事通信。
| 明文 | A | B | C | D | … | X | Y | Z | |——|—|—|—|—|—–|—|—|—|—| | 密文 | D | E | F | G | … | A | B | C |
原理很简单:将字母表中每个字母向后偏移 3 位。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 def caesar_encrypt (text: str , shift: int = 3 ) -> str : """凯撒密码加密""" result = "" for char in text.upper(): if char.isalpha(): shifted = (ord (char) - ord ('A' ) + shift) % 26 result += chr (shifted + ord ('A' )) else : result += char return result def caesar_decrypt (text: str , shift: int = 3 ) -> str : """凯撒密码解密""" return caesar_encrypt(text, -shift) encrypted = caesar_encrypt("ATTACK AT DAWN" ) print (f"密文: {encrypted} " ) print (f"解密: {caesar_decrypt(encrypted)} " )
凯撒密码的密钥空间只有 25(偏移 1-25 位),暴力破解秒秒钟完成。
维吉尼亚密码 维吉尼亚密码使用一个关键词来动态改变每个字母的偏移量,大大增加了破解难度。
1 2 3 4 5 6 明文: A T T A C K A T D A W N 密钥: K E Y K E Y K E Y K E Y 密文: K X R K G I K X C K A L 破解难度 = 26^(密钥长度) 密钥长度为 10 → 26^10 ≈ 141 万亿种可能
维吉尼亚密码在长达 300 年的时间里被认为是「不可破解的密码」。
Enigma 密码机 二战时期,德国使用的 Enigma 密码机是一个机电式转子密码设备。它每天更换转子配置和接线板设置,密钥空间达到 10²³ 的量级。
图灵等人在布莱切利庄园的工作,是对 Enigma 密码的成功破解,据估计将二战缩短了 2-4 年。
现代密码学 柯克霍夫原则 1 2 3 4 5 一个密码系统的安全性不应该依赖于算法的保密性, 而应该只依赖于密钥的保密性。 换言之:即使敌人知道你的全部加密算法, 只要他不知道密钥,密文就应该无法破解。
对称加密 发信方和收信方使用同一个密钥 。
AES (高级加密标准) 是目前最广泛使用的对称加密算法:
参数
AES-128
AES-256
密钥长度
128 bit
256 bit
轮数
10
14
暴力破解
目前不可行
量子计算机亦难破解
1 2 3 4 5 6 7 8 9 10 11 12 13 14 from cryptography.fernet import Fernetkey = Fernet.generate_key() cipher = Fernet(key) message = b"Secret message" encrypted = cipher.encrypt(message) print (f"加密后: {encrypted} " )decrypted = cipher.decrypt(encrypted) print (f"解密后: {decrypted.decode()} " )
非对称加密 发信方使用公钥 加密,收信方使用私钥 解密。
RSA 是最著名的非对称加密算法,其安全性基于大数分解的困难性:
1 2 3 4 5 6 7 8 9 10 11 12 13 RSA 核心数学原理: 1. 选择两个大质数 p 和 q 2. n = p × q 3. φ(n) = (p-1)(q-1) 4. 选择 e,使 1 < e < φ(n) 且 gcd(e, φ(n)) = 1 5. 计算 d = e^(-1) mod φ(n) 公钥: (n, e) 私钥: (n, d) 加密: c = m^e mod n 解密: m = c^d mod n
椭圆曲线加密 (ECC) 提供了与 RSA 同等的安全性,但密钥长度更短。256 位的 ECC 密钥约等于 3072 位的 RSA 密钥的安全强度。
算法
密钥长度
等效安全强度
性能
RSA
2048 bit
112 bit
慢
ECC
256 bit
128 bit
快
RSA
4096 bit
140 bit
很慢
哈希函数 哈希函数将任意长度的输入映射为固定长度的输出,且具有单向性。
SHA 家族 1 2 3 4 5 6 7 8 9 10 11 12 import hashlibmessage = "Hello, World!" sha256_hash = hashlib.sha256(message.encode()).hexdigest() print (f"SHA-256: {sha256_hash} " )sha512_hash = hashlib.sha512(message.encode()).hexdigest() print (f"SHA-512: {sha512_hash} " )
哈希的应用
应用场景
说明
密码存储
存储 hash(password + salt) 而非明文
数字签名
对文件哈希值签名而非整个文件
数据完整性
下载文件时比对哈希值
区块链
每个区块包含前一区块的哈希
Git
用 SHA-1 哈希标识每次提交
TLS/SSL 握手 当你访问 HTTPS 网站时,浏览器和服务器之间发生了什么?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 TLS 1.3 简化握手流程: Client Server │ │ │──── ClientHello ──────────────────→│ │ (支持的加密套件, 密钥共享) │ │ │ │←─── ServerHello ──────────────────│ │ (选择的加密套件, 证书, 密钥共享) │ │ │ │ 此时双方已拥有会话密钥 │ │ │ │←────── 加密的应用数据 ────────────→│ │ │ RTT: 1 round trip (比 TLS 1.2 的 2 RTT 快)
区块链中的密码学 工作量证明 比特币使用 SHA-256 作为工作量证明的哈希函数。矿工需要找到满足特定模式的 nonce 值:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 import hashlibdef proof_of_work (block_data: str , difficulty: int ) -> tuple : """简化的 PoW 演示""" prefix = '0' * difficulty nonce = 0 while True : hash_input = f"{block_data} {nonce} " .encode() hash_result = hashlib.sha256(hash_input).hexdigest() if hash_result.startswith(prefix): return nonce, hash_result nonce += 1 nonce, hash_val = proof_of_work("Block1: Alice pays Bob 1 BTC" , 4 ) print (f"Nonce: {nonce} , Hash: {hash_val} " )
数字签名 区块链交易使用椭圆曲线数字签名算法 (ECDSA) 来验证交易发起者的身份:
1 2 3 4 5 6 7 创建交易: 1. 交易数据 → 哈希 → 用发送方私钥签名 2. 广播交易 + 签名 + 发送方公钥 验证交易: 节点用发送方公钥验证签名 → 确认交易未被篡改 且确实由私钥持有者发起
量子计算的威胁 Shor 算法 1994 年,彼得·肖尔 (Peter Shor) 提出了一种量子算法,可以在多项式时间内分解大整数。
1 2 3 4 5 经典计算机分解 RSA-2048: → 约需要 10 亿年 量子计算机(有足够多稳定量子比特)运行 Shor 算法: → 约需要数小时
这意味着一旦大规模量子计算机成为现实,RSA 和 ECC 都将不再安全。
后量子密码学 NIST 正在推进后量子密码学标准的制定。2024 年已经选出了首批标准算法:
CRYSTALS-Kyber :密钥封装机制
CRYSTALS-Dilithium :数字签名
SPHINCS+ :基于哈希的数字签名(备选)
这些算法基于格理论 (Lattice-based)、编码理论 (Code-based) 等数学难题,被认为能够抵抗量子计算机的攻击。
总结 密码学的演进史本质上是 攻防双方的不断升级 :
古典密码 → 频率分析 → 多表替换
机电加密 → 图灵破解 → 数字加密
对称加密 → 密钥分发难题 → 非对称加密
经典安全 → 量子威胁 → 后量子密码学
下一阶段的密码学,必将在量子计算威胁和后量子密码方案的博弈中继续前进。唯一不变的是人类保护秘密的永恒渴望。