深色模式
按算法族组织: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 攻击)
常用曲线
| 曲线 | 用途 | 特点 |
|---|---|---|
| Curve25519 | X25519 密钥协商 | Montgomery 曲线;常数时间友好 |
| Ed25519 | EdDSA 签名 | 确定性签名;无随机 k 风险 |
| secp256k1 | 比特币/以太坊 | Koblitz 曲线 |
| P-256 | NIST 标准 | 广泛支持;参数生成有争议 |
<ul>
<li><strong>ECDH</strong>:椭圆曲线 Diffie-Hellman;TLS 1.3 默认</li>
<li><strong>ECDSA</strong>:签名;k 泄露可恢复私钥(见攻击节)</li>
</ul>
常见攻击
| 攻击 | 条件 | 思路 |
|---|---|---|
| Wiener | d < n^0.25 | 连分数求 d |
| Fermat | p ≈ 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
| 语言 | 库 | 说明 |
|---|---|---|
| Python | cryptography | RSA-OAEP/PSS、X25519、Ed25519 |
| Python | PyNaCl Box | X25519 + XSalsa20-Poly1305 |
| Rust | rsa、x25519-dalek、ed25519-dalek | 非对称原语 |
<p class="kb-note-inline">练习:ECDH 密钥协商。本站笔记 <span class="crypto-pending">待撰写</span>。</p>