现代密码 / Modern cryptography¶
简述¶
现代密码(Modern cryptography) 通常可分成 对称密码(Symmetric cryptography)、非对称密码(Asymmetric cryptography) 与 散列函数(Hash function) 三类,实际应用中往往是多种机制组合使用。
与古典密码不同,现代密码学更多建立在数论、代数与计算复杂性理论之上。它所关注的不仅是“把消息藏起来”,还包括“消息有没有被改”“消息是不是由正确的人发出”“发送者是否可抵赖”等问题。
对称密码¶
对称密码是现代系统中最常用的一类密码体制。其特点是加密与解密使用同一把密钥,算法成熟,速度快,适合处理大量数据。
DES / 3DES¶
DES(Data Encryption Standard) 是历史上影响深远的分组密码,分组长度为64位,密钥有效长度为56位。由于密钥空间较小,DES在现代场景中已不再安全。
AES¶
AES(Advanced Encryption Standard) 是当前最常见的分组密码标准,分组长度固定为128位,常见密钥长度为128/192/256位。
AES在实际使用中通常需要配合工作模式,例如ECB、CBC、CTR、GCM等。需要注意的是,模式并非“附加细节”,而是安全性的核心组成部分:
- ECB模式容易暴露明文结构,不建议用于安全场景
- CBC模式需要随机IV,填充处理不当时可能出现Padding Oracle问题
- CTR与GCM模式若重复使用nonce,风险非常高
SM4¶
SM4 是国产商用密码中的分组密码标准,分组长度与密钥长度均为128位。在国密相关生态与题目环境中,SM4较为常见。
流密码与 RC4¶
流密码按位或按字节生成密钥流,并与明文进行异或来得到密文。流密码的关键要求是同一密钥下不能重复使用同一个随机参数,否则会造成明文关系泄露。
RC4 是历史上非常经典的流密码算法。其核心流程可分为两部分:
- KSA(Key Scheduling Algorithm):根据密钥初始化状态数组
- PRGA(Pseudo-Random Generation Algorithm):持续生成伪随机密钥流并进行异或
RC4实现简单、速度快,曾在WEP与早期TLS中被广泛使用。但由于其输出存在统计偏差,且在弱密钥或密钥复用场景下风险突出,现代协议中通常已不再推荐使用。
在CTF中,RC4常见考察点包括密钥复用、初始字节偏差、已知明文恢复等问题。
非对称密码¶
非对称密码使用一对密钥:公钥公开,私钥保密。它主要解决“密钥分发”问题,并承担加密、签名与密钥交换等能力。
RSA¶
RSA 是最常见的非对称密码之一,其安全性依赖大整数分解困难问题。
设 n = p * q,公开指数为 e,私钥指数为 d,满足:
其基本形式可写为:
RSA在CTF中的常见问题通常并非“算法被彻底破解”,而是参数和实现不当,例如小指数、弱素数、信息泄露、填充错误等。
椭圆曲线密码 ECC¶
ECC(Elliptic Curve Cryptography) 在相同安全级别下通常具有更短密钥与更高效率,因此在现代协议中应用广泛。
椭圆曲线在有限域上的常见形式可写为:
ECC的核心运算是点加法与标量乘法,其安全性依赖椭圆曲线离散对数问题难解。
ECC常见应用包括:
- ECDH:椭圆曲线密钥交换
- ECDSA:椭圆曲线数字签名
- ECIES:基于椭圆曲线的加密方案
其中 ECDSA 对随机数 k 的质量要求非常高。若 k 重复或可预测,私钥可能被恢复,这是CTF中的高频考点。此外,若实现缺少点有效性验证,也可能引入额外攻击面。
Diffie-Hellman¶
Diffie-Hellman(DH) 用于在不安全信道中协商共享密钥。双方分别持有私密参数,通过交换公开参数后可计算出相同会话密钥。
其简化流程如下:
- 约定公开参数
p, g - A选择私钥
a,发送A = g^a mod p - B选择私钥
b,发送B = g^b mod p - A计算
K = B^a mod p,B计算K = A^b mod p - 双方得到相同共享密钥
K = g^(ab) mod p
散列与消息认证¶
散列与认证机制本身不承担“可逆加密解密”,但在现代密码系统中同样属于基础能力。
哈希(散列)¶
日常交流中常说“哈希加密”,但更准确的说法是“哈希(散列)”。散列函数用于把任意长度输入映射为固定长度摘要,典型算法有 SHA-256、SHA-3、SM3。
散列函数通常强调单向性、抗碰撞性与雪崩效应。它常用于完整性校验、签名预处理、文件指纹与口令存储等场景。
需要注意:哈希不是可逆算法,不能“解密回原文”。另外,MD5与SHA-1已出现可行碰撞攻击,不适合继续用于安全场景。
MAC 与 HMAC¶
MAC(Message Authentication Code) 用于验证消息完整性与来源。
HMAC 是“密钥 + 哈希”的常见构造方式,常用于API签名、会话校验、协议消息认证等场景。
数字签名¶
数字签名用于证明“消息确实来自某个私钥持有者,且未被篡改”。常见签名算法有 RSA-PSS、ECDSA、EdDSA。
其与MAC的主要区别在于:签名可公开验证,并具备更强的不可否认性。
CTF中现代密码常见考察点¶
现代密码题通常不是单纯考记忆算法,而是考查“参数是否安全、实现是否正确、流程是否完整”。
常见问题包括:
- IV/nonce重复导致信息泄露
- 随机数质量不足导致私钥恢复
- 填充模式与认证顺序处理错误
- RC4等旧算法使用不当
- RSA参数泄露或构造过弱
- ECDSA随机数复用与曲线校验缺失
- 哈希误用(长度扩展、弱哈希碰撞、口令散列策略错误)
小结¶
现代密码并非单一算法,而是一套组合体系:对称密码负责高效加密,非对称密码负责密钥协商与签名认证,散列与MAC负责完整性验证。
对CTF初学者而言,先建立整体框架,再回到具体算法与漏洞细节,是更稳妥的学习方式。多数现代密码题并不是“算法本身失效”,而是“实现和使用方式出现问题”。