Skip to content

按算法族组织:RSA → Diffie-Hellman → 椭圆曲线 → 常见攻击。

RSA

参考:RFC 8017 PKCS#1 · CTF Wiki · RSA

密钥生成

  • 选大素数 p、q;n = pq;φ(n) = (p-1)(q-1)
  • 选 e 与 φ(n) 互素;求 d 使 ed ≡ 1 (mod φ(n))
  • 公钥 (n, e);私钥 (n, d);安全基于整数分解困难性

填充(禁止 textbook RSA)

用途填充说明
加密OAEP(SHA-256)IND-CCA 安全
签名PSS概率签名方案
密钥传输(旧)PKCS#1 v1.5仍有 Bleichenbacher 风险
<ul>
  <li>密钥长度至少 2048 bit;新部署建议 3072 或转 ECC</li>
</ul>

Diffie-Hellman

参考:RFC 3526 MODP Groups · RFC 7919 FFDHE

  • 公开素数 p、生成元 g;Alice 选 a,发 g^a;Bob 选 b,发 g^b
  • 共享秘密 g^{ab};离散对数困难性保障安全
  • 须验证 p 为 safe prime、群阶足够大;勿信任未知来源参数
  • 无身份认证 → 易受 MITM;须结合签名或预共享密钥
  • ElGamal:DH 扩展为加密与签名方案

椭圆曲线密码

参考:RFC 7748 X25519/X448 · RFC 8032 Ed25519

曲线运算

  • 点加、倍点、标量乘 kP;ECDLP:已知 P、kP 求 k 困难
  • 选曲线须避特殊弱点(MOV、Smart 攻击)

常用曲线

曲线用途特点
Curve25519X25519 密钥协商Montgomery 曲线;常数时间友好
Ed25519EdDSA 签名确定性签名;无随机 k 风险
secp256k1比特币/以太坊Koblitz 曲线
P-256NIST 标准广泛支持;参数生成有争议
<ul>
  <li><strong>ECDH</strong>:椭圆曲线 Diffie-Hellman;TLS 1.3 默认</li>
  <li><strong>ECDSA</strong>:签名;k 泄露可恢复私钥(见攻击节)</li>
</ul>

常见攻击

参考:CTF Wiki · RSA 攻击

攻击条件思路
Wienerd < n^0.25连分数求 d
Fermatp ≈ q差平方分解 n
小公钥指数e=3,短明文直接开 e 次方根
Coppersmith部分明文已知格求多项式小根
Hastad同 e 加密多用户CRT 组合后开方
ECDSA nonce 泄露两次签名 k 相关格恢复私钥
<p class="kb-note-inline">练习:CryptoHack · RSA Attacks。</p>

工程实践

  • 混合加密:ECDH/RSA-KEM 协商对称密钥 + AEAD 加密载荷
  • 新项目优先 Curve25519 / Ed25519
语言库说明
PythoncryptographyRSA-OAEP/PSS、X25519、Ed25519
PythonPyNaCl BoxX25519 + XSalsa20-Poly1305
Rustrsa、x25519-dalek、ed25519-dalek非对称原语
<p class="kb-note-inline">练习:ECDH 密钥协商。本站笔记 <span class="crypto-pending">待撰写</span>。</p>

WIZARD