2.1–2.8 从零实现了每个密码学原语的算法细节。本节跳出具体实现,从知识架构视角构建第2章的完整概念网络,并建立工程速查表,帮助你在遇到实际问题时快速定位需要的工具。
2.9.1 第2章完整知识地图
graph TB
subgraph 基础原语_Foundation
HASH[哈希函数<br/>2.1, 2.2]
HASH --> CR[碰撞阻力]
HASH --> HID[隐藏性]
HASH --> PF[谜题友好性]
HASH --> SHA[SHA-256<br/>MD 结构]
HASH --> KEC[Keccak-256<br/>海绵结构]
end
subgraph 非对称密码_Asymmetric
ECC[椭圆曲线<br/>2.4]
ECC --> SECP[secp256k1<br/>y² = x³ + 7]
ECC --> PADD[点加法]
ECC --> SCM[标量乘法]
ECC --> ECDLP[离散对数难题]
SIG[数字签名<br/>2.5]
SIG --> ECDSA[ECDSA: r, s]
SIG --> SCH[Schnorr: 线性可聚合]
SIG --> KUNIQ[k 唯一性]
ECDSA --> V[验证: s⁻¹·(e·G + r·P)]
SCH --> MUSIG[MuSig2 多签]
end
subgraph 密钥管理_Management
ENT[密码学熵<br/>2.6]
ENT --> CSPRNG[CSPRNG]
CSPRNG --> BIP39[BIP-39 助记词]
BIP39 --> BIP32[BIP-32 HD 钱包]
BIP32 --> BIP44[BIP-44 路径]
BIP32 --> ADDR[地址派生]
end
subgraph 应用结构_Application
MT[Merkle 树<br/>2.7]
MT --> PROOF[O(log N) 证明]
MT --> SPV[SPV 轻量验证]
MT --> MPT[Merkle Patricia<br/>Trie 以太坊]
end
subgraph 安全工程_Security
COMP[原语对比<br/>2.8]
COMP --> Q[后量子威胁]
COMP --> ERR[十大常见错误]
end
HASH --> MT
ECC --> SIG
BIP32 --> SIG
2.9.2 核心公式速查表
| 概念 | 数学/公式 | 文件位置 |
|---|---|---|
| 哈希碰撞概率 | 02.01 | |
| 密码学承诺 | ,绑定+隐藏 | 02.01 |
| SHA-256 压缩 | 经 64 轮非线性更新 | 02.02 |
| Keccak 海绵 | 吸收阶段(异或+置换)+ 挤压阶段 | 02.02 |
| 模逆元 | (Fermat) | 02.04 |
| 点加法 | , | 02.04 |
| 标量乘法 | 二进制 Double-and-Add, | 02.04 |
| ECDSA 签名 | , | 02.05 |
| ECDSA 验证 | ,验证 | 02.05 |
| 固定 k 攻击 | ,恢复 | 02.05 |
| BIP-39 助记词 | 熵 + SHA-256 校验和 → 每 11 位一个词 | 02.06 |
| BIP-32 子密钥 | ,CKD 函数 | 02.06 |
| Merkle 证明大小 | 个兄弟哈希 | 02.07 |
| Merkle 验证 | 沿路径逐层哈希,比对根值 | 02.07 |
2.9.3 常见错误诊断矩阵
| 症状/场景 | 根因 | 章节 | 解决方案 |
|---|---|---|---|
| 相同消息两次签名结果不同 | 正常(应有不同 ) | 02.05 | 使用 RFC 6979 确定性签名可复现 |
| 相同消息两次签名 相同 | 致命: 重复 | 02.05 | 立即更换密钥,使用 HMAC-SHA256 生成 |
| 签名解析失败/长度可变 | DER 编码问题 | 02.05 | 采用 BIP-66 严格 DER,或切换到 64 字节固定(Schnorr) |
| 助记词校验失败 | 抄写错误或词表不匹配 | 02.06 | 重抄确认,使用标准 BIP-39 英文词表 |
| 派生地址与钱包不一致 | 路径/ hardened 索引错误 | 02.06 | 核对 m/44'/60'/0'/0/0 等完整路径 |
| 验证通过但交易被拒绝 | 链 ID/网络不匹配 | 02.08 | 在消息中包含链 ID 防止重放 |
| 哈希值与标准库输出不同 | 编码/字节序/填充差异 | 02.02 | 严格规定大端序、UTF-8、无 BOM |
| 公钥验证通过但地址错误 | 哈希函数选错 | 02.06 | 比特币用 RIPEMD160(SHA256),以太坊用 Keccak-256 |
| 加密后还"能看懂" | 流密码重复使用密钥流 | 02.03 | 流密码 nonce 不可重复(CTR 模式) |
| 性能突然下降 1000 倍 | 使用非对称加密做大量数据加密 | 02.03 | 混合加密:非对称分发密钥 + 对称加密数据 |
2.9.4 密码学决策速查
"我该用什么哈希?"
- 需要 128 位安全 + 兼容性 → SHA-256
- 需要防长度扩展 + 新设计 → Keccak-256
- 需要密码存储 → Argon2 / bcrypt(不是 MD5/SHA-1)
"我该用什么签名?"
- 比特币传统 / 公钥恢复 → ECDSA
- 需要多签/批验证/新系统 → Schnorr (BIP-340) + MuSig2
- 需要量子安全(长期)→ SPHINCS+ / Dilithium(实验阶段)
"我该用什么加密?"
- 数据保密(大量数据)→ AES-256-GCM
- 密钥交换 → ECDH(Diffie-Hellman 在椭圆曲线上)
- 最高安全需求 → ChaCha20-Poly1305(侧信道抗性优于 AES)
"我该用什么钱包?"
- 日常小额 → 软件热钱包(方便,接受一定风险)
- 大额长期存储 → 硬件钱包 + 助记词金属备份(物理隔离)
- 机构级 → Shamir 分片 + 多地离线存储(消除单点)
2.9.5 数学安全强度对照
text
安全级别 (位) 暴力破解难度 适用场景
─────────────────────────────────────────────────────────
64 位 小时级 (GPU 农场) ❌ 玩具/测试
80 位 月级 (小国家) ❌ 过渡,寿命<5年
112 位 年级 (大国级算力) ⚠️ 短期敏感数据
128 位 世纪级 (全球算力) ✅ 当前标准(加密货币)
192 位 宇宙级 ✅ 后量子预备(State of the Art)
256 位 物理不可能 ✅ 国家机密级核心结论:当前区块链使用的 128 位安全级别(如 secp256k1 提供约 128 位,因为最好攻击是 Pollard's Rho,约 次运算)在全球现有和可预见的计算能力下是计算不可行的。量子计算机需要约 4000 个逻辑量子比特才能威胁 ECC,当前最大公开进展约数百物理量子比特(纠错后更少),预计 10–20 年内不会构成实际威胁。
2.9.6 延伸阅读与资源
| 资源 | 类型 | 推荐理由 |
|---|---|---|
| bitcoin/bips | 标准文档 | BIP-32/39/44/66/340 的权威定义 |
| SEC2: Recommended Elliptic Curve | 标准文档 | secp256k1 的精确参数定义 |
| RFC 6979 | 标准文档 | 确定性 ECDSA 的权威规范 |
| Keccak Reference | 论文 | 海绵结构和 Keccak-f 置换的设计理论 |
| Daniel J. Bernstein: Curve25519 | 论文 | 对比 NIST 曲线,展示更简洁的 ECC 设计 |
| Rosetta Code: SHA-256 | 示例代码 | 多语言的 SHA-256 从零实现,适合对照学习 |
下一节:2.10 动手实验——从零构建一个密码学验证工具箱,将前面所有代码整合为可运行的验证库。
评论
0评论加载中…