跳转至

现代密码 / Modern cryptography

简述

现代密码(Modern cryptography) 通常可分成 对称密码(Symmetric cryptography)非对称密码(Asymmetric cryptography)散列函数(Hash function) 三类,实际应用中往往是多种机制组合使用。

与古典密码不同,现代密码学更多建立在数论、代数与计算复杂性理论之上。它所关注的不仅是“把消息藏起来”,还包括“消息有没有被改”“消息是不是由正确的人发出”“发送者是否可抵赖”等问题。

中文wiki-现代密码学

对称密码

对称密码是现代系统中最常用的一类密码体制。其特点是加密与解密使用同一把密钥,算法成熟,速度快,适合处理大量数据。

DES / 3DES

DES(Data Encryption Standard) 是历史上影响深远的分组密码,分组长度为64位,密钥有效长度为56位。由于密钥空间较小,DES在现代场景中已不再安全。

3DES(Triple DES) 通过多轮DES提升安全性,但其性能开销较大,在现代应用中也逐步被AES替代。

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 是历史上非常经典的流密码算法。其核心流程可分为两部分:

  1. KSA(Key Scheduling Algorithm):根据密钥初始化状态数组
  2. PRGA(Pseudo-Random Generation Algorithm):持续生成伪随机密钥流并进行异或

RC4实现简单、速度快,曾在WEP与早期TLS中被广泛使用。但由于其输出存在统计偏差,且在弱密钥或密钥复用场景下风险突出,现代协议中通常已不再推荐使用。

在CTF中,RC4常见考察点包括密钥复用、初始字节偏差、已知明文恢复等问题。

非对称密码

非对称密码使用一对密钥:公钥公开,私钥保密。它主要解决“密钥分发”问题,并承担加密、签名与密钥交换等能力。

RSA

RSA 是最常见的非对称密码之一,其安全性依赖大整数分解困难问题。

n = p * q,公开指数为 e,私钥指数为 d,满足:

e * d ≡ 1 (mod φ(n))

其基本形式可写为:

\[ \begin{align*} C &\equiv M^e \mod n \\ M &\equiv C^d \mod n \end{align*} \]

RSA在CTF中的常见问题通常并非“算法被彻底破解”,而是参数和实现不当,例如小指数、弱素数、信息泄露、填充错误等。

椭圆曲线密码 ECC

ECC(Elliptic Curve Cryptography) 在相同安全级别下通常具有更短密钥与更高效率,因此在现代协议中应用广泛。

椭圆曲线在有限域上的常见形式可写为:

\[ \begin{align*} y^2 \equiv x^3 + ax + b \pmod p \end{align*} \]

ECC的核心运算是点加法与标量乘法,其安全性依赖椭圆曲线离散对数问题难解。

ECC常见应用包括:

  • ECDH:椭圆曲线密钥交换
  • ECDSA:椭圆曲线数字签名
  • ECIES:基于椭圆曲线的加密方案

其中 ECDSA 对随机数 k 的质量要求非常高。若 k 重复或可预测,私钥可能被恢复,这是CTF中的高频考点。此外,若实现缺少点有效性验证,也可能引入额外攻击面。

Diffie-Hellman

Diffie-Hellman(DH) 用于在不安全信道中协商共享密钥。双方分别持有私密参数,通过交换公开参数后可计算出相同会话密钥。

其简化流程如下:

  1. 约定公开参数 p, g
  2. A选择私钥 a,发送 A = g^a mod p
  3. B选择私钥 b,发送 B = g^b mod p
  4. A计算 K = B^a mod p,B计算 K = A^b mod p
  5. 双方得到相同共享密钥 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初学者而言,先建立整体框架,再回到具体算法与漏洞细节,是更稳妥的学习方式。多数现代密码题并不是“算法本身失效”,而是“实现和使用方式出现问题”。

引用

评论