systemslibrarian/crypto-compare
GitHub: systemslibrarian/crypto-compare
面向工程师和架构师的密码学算法决策支持系统,提供85种算法的对比、推荐理由和后量子迁移规划指南。
Stars: 0 | Forks: 0
# crypto::compare 🔐
**面向工程师、架构师和技术决策者的密码学算法决策系统。**
85 种算法。16 个类别。来源推荐。安全使用指导。参考架构。后量子迁移背景。
🌐 **[实时站点 →](https://systemslibrarian.github.io/crypto-compare/)**
## 这是什么
crypto::compare 是一个基于浏览器的决策支持工具,用于负责任地选择密码学算法。
它专为实际工程工作开始的那一刻设计:当有人必须决定在消息传递、存储、身份验证、签名或后量子迁移中使用什么时,需要比模糊的建议或随机的博客文章更好的参考。
本项目帮助您:
- 按用例而非热度选择算法
- 使用一致的字段并排比较原语
- 了解推荐在哪些方面是强有力的、有条件的或不确定的
- 在常见密码学错误演变为系统故障之前避免它们
本项目**不**:
- 实现密码学操作
- 为系统认证合规性
- 替代专业安全审查
- 保护您免受实现错误或操作失误的影响
## 从这里开始
如果您只在这个仓库花费 30 秒,请使用以下路径:
1. **需要快速决策?** 从 **如果您正在构建 X → 使用这个** 开始。
2. **需要比较选项?** 使用实时比较表和决策流程图。
3. **需要避免危险错误?** 在编写代码之前阅读**常见陷阱和安全使用**。

## 为什么信任这个
本项目试图以具体的方式赢得信任,而不是仅仅通过语气。
| 信号 | 含义 |
|--------|----------------|
| **85 种算法,涵盖 16 个类别** | 覆盖范围足够广泛以支持真正的设计权衡,而不仅仅是精选的候选列表 |
| **每个算法的来源** | 条目基于标准、密码分析、部署参考和审查日期 |
| **5 级推荐模型** | 推荐不是二元的;它们区分安全默认值、可接受、遗留、研究和避免 |
| **明确的权衡** | 条目包括"为什么不选这个?"、假设和"何时会改变"的条件 |
| **验证和测试** | 数据集验证使用 Zod 强制执行,并由大量自动化测试套件覆盖 |
| **静态架构** | 无后端、无账户、无遥测、无隐藏推荐引擎 |
这里的信任仍然有限:
- 推荐质量仅与底层来源和审查新鲜度一样好
- 实现安全性仍然取决于库和周围系统设计
- 没有机构支持、外部审计或保证的更新节奏
### 新鲜度快照
- 来源条目当前携带的审查日期范围从 **2026-03-16** 到 **2026-04-03**
- 每个算法记录在数据集来源中包含 `lastReviewed` 值
- 建议随着该审查窗口相对于新的密码分析、标准工作或部署变化而变旧时,推荐置信度应降低
## 如果您正在构建 X → 使用这个
这些是保守的默认值,不是普遍规律。它们旨在帮助有能力的工程师快速进入安全领域。
| 构建内容 | 推荐技术栈 | 为什么有效 | 现实模式 | 避免这个 | 何时改变 |
|----------|-------------------|--------------|--------------------|------------|-----------------|
| **安全消息传递** | XChaCha20-Poly1305 + X25519/ML-KEM-768 混合 + HKDF 棘轮 + 强身份签名 | AEAD 提供机密性和完整性,混合交换提供前向保密和 PQ 转换,棘轮提供隔离 | Signal 风格设计、PQXDH 风格迁移、现代端到端消息 | 静态 RSA、无棘轮、高消息量下无规范的随机 nonce AES-GCM | 随着生态系统支持成熟,更多转向 PQ 组件 |
| **密码存储 / 身份验证** | Argon2id 具有强内存成本、唯一盐、TLS 传输中 | 内存硬密码哈希在数据库泄露后显著提高攻击者成本 | 现代密码存储指导、密码管理器、当前 OWASP 方向 | MD5、SHA-1、SHA-256 单独使用、无盐哈希、低成本 PBKDF2 用于新系统 | 随着 commodity 硬件改进,向上调整参数 |
| **静态文件加密** | 存在硬件加速时使用 AES-256-GCM,否则使用 XChaCha20-Poly1305;HKDF 用于密钥分离 | AEAD 防止静默篡改;每个文件派生限制爆炸半径 | 全盘加密、备份加密、加密存档 | ECB、无认证的 CBC、nonce 重用、每个用途使用相同密钥 | 当长期机密性重要时添加 PQ 包装 |
| **API / Web 加密** | TLS 1.3 配合 AES-256-GCM 或 ChaCha20-Poly1305;X25519 配合混合 PQ(如果有) | 消除遗留协商问题,提供前向保密,与现代传输安全实践一致 | HTTPS、服务间 API、gRPC over TLS | TLS 1.0/1.1、RSA 密钥交换、跳过证书验证 | 随着 PQ 标准进入主流 PKI,证书和 KEM 选择会改变 |
| **长期敏感数据** | ML-KEM-1024 + AES-256 + 保守签名选择(如 SLH-DSA 用于归档场景) | 为可能需要经历经典到 PQ 转换的数据设计 | 政府、医疗、法律和归档机密性规划 | 等待"完美"迁移时刻,假设 RSA/ECC 用于数十年保密没问题 | 如果 PQ 密码分析实质性地改变当前假设的置信度,则重新评估 |
| **数字签名** | PQ 规划使用 ML-DSA;经典部署中适当使用 Ed25519 | 明确的现代默认值,具有强大的生态系统和比旧选项更少的操作陷阱 | 软件签名、文档签名、API 认证、提交签名 | RSA-1024、遗留 DSA、nonce 处理不良的脆弱 ECDSA 部署 | 工具链和合规要求可能在受监管环境中强制不同选择 |
实时工具通过详细的技术栈、理由、权衡和特定算法的链接扩展了这些内容
## 密码学现实
密码学算法是**公开标准和已发布的构造**,而不是秘方。AES、SHA-256、HKDF、ML-KEM 和 ML-DSA 是安全的,因为它们已经被公开研究、攻击、形式化、辩论和部署。
这也意味着算法选择只是问题的一部分。
大多数现实世界的失败发生在实现和操作中:
- nonce 重用
- 密钥管理破损
- 跳过证书验证
- 侧信道
- 不安全的默认值
- 应该在经过验证的库中使用自定义代码
**不要编写自己的密码学原语。**
使用成熟的库。将算法选择和实现质量视为独立但都很重要的决策
## 常见陷阱和安全使用
本节故意直接,因为密码学错误会严重失败。
### 关键规则
| 规则 | 为什么重要 |
|------|----------------|
| **永远不要重用 AES-GCM 或 ChaCha20-Poly1305 的 nonce** | 重用可能破坏机密性和真实性保证 |
| **永远不要在没有认证的情况下加密** | 没有完整性的机密性为攻击者留下操纵密文的空间 |
| **永远不要将快速通用哈希用于密码** | 密码存储需要内存硬函数如 Argon2id,而不是 SHA-256 |
| **永远不要使用 ECB 模式** | 它会泄露明文的结构信息 |
| **永远不要硬编码密钥** | 源代码控制或构建管道中的密钥最终会泄露 |
| **永远不要自己实现密码学** | 自定义原语和协议以难以检测的方式失败 |
| **永远不要禁用证书验证** | 这会把 TLS 变成一场秀 |
### 密钥管理基础
- 使用 CSPRNG 生成密钥,而不是通用 PRNG
- 按用途分离密钥:加密、MAC、签名和派生密钥不应互换
- 根据明确的策略而不是临时直觉轮换长期密钥
- 尽可能将密钥存储在硬件支持的存储或专用密钥管理系统中
- 为泄露做准备:撤销、重发和爆炸半径减少与初始生成同样重要
### 此工具不能保护什么
- 时序泄露、内存安全错误和侧信道漏洞
- 糟糕的协议组合
- 糟糕的密钥处理和薄弱的运营控制
- 不安全的框架默认值或不安全的部署配置
选择正确的原语有帮助。它本身并不能保证周围系统的安全
## 推荐库
算法安全性很大程度上取决于实现质量。如果您的代码库直接涉及密码学,请优先选择具有强大运营历史的成熟库。
| 类别 | 主要方向 | 常见选项 |
|----------|-------------------|----------------|
| **通用应用密码学** | libsodium | 跨主要语言的 NaCl 家族绑定 |
| **TLS 和传输安全** | BoringSSL 或 OpenSSL 3.x | 也包括基于验证原语的语言原生 TLS 栈 |
| **Rust 系统** | ring 和适当的 rustls | 在实际情况下使用生态系统原生包装器而不是原始绑定 |
| **后量子实验和集成** | liboqs 和 PQClean 衍生的包装器 | 用于评估和早期集成,而非盲目生产使用 |
| **浏览器密码学** | Web Crypto API | 使用原生浏览器原语而不是手写的 JavaScript |
| **Go 服务** | `crypto/*` 和 `x/crypto` | 优先使用标准库和官方扩展 |
| **JVM / .NET 生态系统** | Bouncy Castle(需要时) | 特别是需要更广泛的算法覆盖时 |
### 为什么是这些库
| 库 | 为什么受信任 | 常见于 |
|---------|-------------------|---------||
| **libsodium** | 误用抵抗 API 设计和广泛的语言支持 | 现代应用密码学、密封盒、消息加密 |
| **BoringSSL** | 强化的运营血统和大规模部署 | Chrome、Android、大型面向互联网的系统 |
| **OpenSSL 3.x** | 深入的生态系统渗透和合规相关性 | 服务器、设备、企业部署 |
| **ring** | 极简的攻击面和强大的 Rust 采用 | Rust TLS 和安全敏感基础设施 |
| **liboqs** | 紧密跟踪主流 PQ 标准化工作 | PQ 评估和迁移原型 |
| **Web Crypto API** | 原生浏览器实现路径 | 需要客户端密码学的 Web 应用 |
正确的模式通常是:**在这里选择合理的算法,然后通过这些库之一实现它,而不是自定义代码。**
## 参考架构
这些不是完整的协议。它们是系统级参考模式,显示了原语如何组合在一起。
### 安全消息传递
```
Identity Keys → Hybrid Session Setup → HKDF / Ratchet → AEAD Message Encryption → Transcript / State Binding
```
- **技术栈:** 身份签名、混合密钥建立、HKDF 派生的消息密钥、消息的 AEAD
- **安全属性:** 机密性、前向保密、隔离、认证的对等方身份
### Web API / TLS 风格传输
```
ClientHello → Certificate Validation → Ephemeral Key Agreement → Session Keys → AEAD Records
```
- **技术栈:** TLS 1.3、临时密钥协商、AEAD 记录保护、认证证书
- **安全属性:** 机密性、完整性、服务器认证、重放抵抗、前向保密
### 文件加密系统
```
Passphrase or Master Key → Strong KDF → Per-File Key → AEAD Encryption → Store Ciphertext + Metadata
```
- **技术栈:** Argon2id 或主密钥输入、HKDF 风格分离、AES-256-GCM 或 XChaCha20-Poly1305
- **安全属性:** 机密性、完整性、有限的爆炸半径、加密工件的便携性
### 身份验证系统
```
Password → Argon2id → Stored Hash + Salt + Parameters → TLS-Protected Login → Constant-Time Verification
```
- **技术栈:** Argon2id、每用户盐、TLS 传输、恒定时间比较、受控会话颁发
- **安全属性:** 泄露后的暴力抵抗、安全的验证流程、传输机密性
这些流程故意足够简单以便于教学,并且足够强大以指导架构讨论
## 设计理念与信任模型
### 目的
本项目存在是为了支持工程判断,而不是取代它。
目标是帮助读者从"我知道密码学很重要"转变为"我可以在架构审查中为这个算法选择辩护"。这与实现库、发布新研究或认证生产系统是不同的目标。
### 保守推荐理念
- 优先选择具有强大公开分析和有意义部署历史的算法
- 优先选择安全默认值而非新奇
- 将后量子迁移视为真正的规划问题,而非营销语言
- 明确显示不确定性,而不是将其隐藏在推荐标签后面
### 推荐级别如何运作
| 级别 | 含义 |
|-------|---------|
| **推荐** | 所述上下文中新系统的强默认 |
| **可接受** | 在有限场景、兼容性需求或过渡环境中合理 |
| **遗留** | 仍会遇到,但不是为新系统选择的方向 |
| **研究** | 有趣、有前景或相关,但不是普通部署的安全默认 |
| **避免** | 不安全、过时或对负责任的新使用而言失败风险太高 |
推荐级别基于以下组合:
- 公开标准化状态
- 密码分析成熟度
- 部署经验
- 实现生态系统质量
- 普通工程背景下的误用风险
- 与当前经典和后量子威胁模型的相关性
### 透明设计
每个算法条目不仅应该回答"它是什么?"
还应该回答:
- **为什么我选择它?**
- **为什么我避免它?**
- **我做了什么假设?**
- **什么会让这个推荐以后改变?**
这就是为什么数据集包含推荐理由、假设、权衡、估计方法和来源,而不仅仅是名称和密钥大小。
### 数据来源
项目基于:
- NIST FIPS 和 SP 800 出版物
- IETF RFC
- 相关时的 ISO 和国家标准
- 学术论文和密码分析文献
- 主要协议和库生态系统的部署证据
请参阅 [docs/data-sources.md](/workspaces/crypto-compare/docs/data-sources.md) 和 [src/data/provenance.ts](/workspaces/crypto-compare/src/data/provenance.ts) 获取来源支撑。
### 合理的专家可能在哪些方面不同意
密码学中的一些选择不是纯粹的正确或错误决定。它们是在不断变化的约束下的判断。
常见示例:
- **今天多积极地推动后量子迁移**,对于具有不同风险范围和兼容性预算的系统
- **Ed25519 vs ECDSA P-256**,在部署简单性和监管预期向不同方向拉动的环境中
- **ML-DSA vs 更保守的基于哈希的签名**,当长期置信度比大小或速度更重要时
- **Groth16 vs PLONK vs zk-STARKs**,当证明大小、可信设置假设、证明者成本和透明度以不同方式重要时
项目采取保守观点,但明确指出某些推荐边界是工程判断的问题,而不是永恒的真理。
### 诚实的局限性
- 这不是实现指南,不能细化到每个 API 调用和安全参数处理
- 这不是合规映射工具
- 这不是漏洞、审计或生态系统事件的实时提要
- 这不能保证永远保持最新;审查新鲜度很重要
- 这仍然是一个单人维护的项目
这种诚实是信任模型的一部分,而不是尽管它是弱点
## 您可以在应用中做什么
| 功能 | 为您提供什么 |
|-----------|--------------------|
| **按类别浏览** | 85 种算法,涵盖加密、KEM、签名、哈希、密码哈希、ZKPs、MPC、OT/PIR、阈值签名等 |
| **并排比较** | 一致的字段对字段比较,适用于特定类别的指标 |
| **使用决策流程图** | 从问题陈述到算法推荐的引导路径 |
| **下载论证报告** | 用于架构审查和设计讨论的 Markdown 输出 |
| **过滤和排序** | PQ 安全、标准轨道、NIST 状态、部署、来源、大小和安全维度 |
| **查看混合模式** | 用于实际迁移规划的经典加 PQ 构造 |
| **探索链接的演示项目** | 每个类别链接到工作开源项目,演示底层密码学概念 |
| **阅读安全和架构指导** | 用例内容、陷阱、库方向和系统级流程 |
### 覆盖概览
| 类别 | 示例 |
|----------|----------|
| CSPRNG | CSPRNG(操作系统)、基于 ChaCha20 的 DRBG |
| 对称加密 | AES-256-GCM、ChaCha20-Poly1305、XChaCha20-Poly1305 |
| 哈希 | SHA-2、SHA-3、BLAKE2b、BLAKE3 |
| MAC | HMAC-SHA-256、CMAC-AES、KMAC-256 |
| KDF | HKDF、Argon2-KDF |
| 密码哈希 | Argon2id、bcrypt、scrypt、PBKDF2 |
| 非对称加密 | RSA-OAEP、ECIES |
| KEM | ML-KEM、HQC、Classic McEliece、FrodoKEM |
| 签名 | ML-DSA、FALCON、SLH-DSA、XMSS |
| 阈值签名 | FROST、GG20 |
| 秘密共享 | Shamir、Feldman VSS、加法 |
| 同态加密 | TFHE、CKKS、BGV |
| ZKP | Groth16、zk-STARKs、PLONK |
| MPC | SPDZ、ABY、Garbled Circuits |
| OT / PIR | OT、SimplePIR、SealPIR |
| 隐写术 | LSB、DCT、扩频 |
## 技术栈
| 层级 | 技术 |
|-------|-----------|
| 框架 | Next.js 14 静态导出 |
| 语言 | 严格模式下的 TypeScript |
| 验证 | 基于 Zod 的数据集验证 |
| 测试 | Vitest + Testing Library |
| 样式 | Tailwind CSS |
| 部署 | GitHub Pages |
无后端。无账户。无 Cookie。无分析。
### 可访问响应性
应用包含语义地标、ARIA 状态和标签、键盘导航、focus-visible 支持、减少动画处理、触摸友好的控件和较小屏幕的移动布局
## 入门
```
git clone https://github.com/systemslibrarian/crypto-compare.git
cd crypto-compare
npm install
npm run dev
```
打开 。
| 命令 | 用途 |
|---------|---------|
| `npm run dev` | 启动本地开发服务器 |
| `npm run build` | 构建静态导出 |
| `npm run test` | 运行自动化测试套件 |
| `npm run type-check` | 运行 TypeScript 检查器 |
| `npm run lint` | 运行 linting |
## 项目结构
```
src/
├── app/ # routes and layout
├── components/ # UI, decision guides, architectures, safety content
├── data/ # algorithm dataset, categories, hybrid patterns, provenance
├── lib/ # comparison logic, validation, keyboard shortcuts
├── types/ # strict TypeScript data models
└── __tests__/ # behavioral and dataset tests
```
高价值文件:
- [src/components/CryptoCompare.tsx](/workspaces/crypto-compare/src/components/CryptoCompare.tsx)
- [src/components/DecisionFlowchart.tsx](/workspaces/crypto-compare/src/components/DecisionFlowchart.tsx)
- [src/components/UseCaseGuide.tsx](/workspaces/crypto-compare/src/components/UseCaseGuide.tsx)
- [src/components/SafeUsage.tsx](/workspaces/crypto-compare/src/components/SafeUsage.tsx)
- [src/components/ReferenceArchitectures.tsx](/workspaces/crypto-compare/src/components/ReferenceArchitectures.tsx)
- [src/components/DesignPhilosophy.tsx](/workspaces/crypto-compare/src/components/DesignPhilosophy.tsx)
- [src/data/algorithms.ts](/workspaces/crypto-compare/src/data/algorithms.ts)
- [src/data/provenance.ts](/workspaces/crypto-compare/src/data/provenance.ts)
## 相关项目
应用中的每个类别都链接到工作演示项目,说明密码学概念在实践中的应用。
| 项目 | 重点 |
|---------|-------|
| [Quantum Vault KPQC](https://github.com/systemslibrarian/crypto-lab-quantum-vault-kpqc) | 对称密码学、KEM、签名、KDF、MAC、秘密共享、CSPRNG |
| [Blind Oracle](https://github.com/systemslibrarian/crypto-lab-blind-oracle) | 全同态加密(TFHE) |
| [Silent Tally](https://github.com/systemslibrarian/crypto-lab-silent-tally) | 安全多方计算 |
| [FROST Threshold](https://github.com/systemslibrarian/crypto-lab-frost-threshold) | 阈值签名(FROST / Ed25519) |
| [Patron Shield](https://github.com/systemslibrarian/crypto-lab-patron-shield) | 私有信息检索(PIR) |
| [Iron Letter](https://github.com/systemslibrarian/crypto-lab-iron-letter) | 非对称 / 公钥加密(ECIES、RSA-OAEP) |
| [Shadow Vault](https://github.com/systemslibrarian/crypto-lab-shadow-vault) | 可否认的对称加密(ChaCha20-Poly1305) |
| [Dad Mode Morse](https://github.com/systemslibrarian/dad-mode-morse2) | 对称加密 + 数字签名 |
| [Corrupted Oracle](https://github.com/systemslibrarian/crypto-lab-corrupted-oracle) | CSPRNG 后门演示(Dual_EC_DRBG) |
| [ZK Proof Lab](https://github.com/systemslibrarian/crypto-lab-zk-proof-lab) | 零知识证明系统 |
| [Phantom Vault](https://github.com/systemslibrarian/crypto-lab-phantom-vault) | 无状态密码管理器(PBKDF2 + HMAC-DRBG) |
| [snow2](https://github.com/systemslibrarian/snow2) | 隐写术 / 隐蔽信道 |
| [Hybrid Wire](https://github.com/systemslibrarian/crypto-lab-hybrid-wire) | 混合后量子密钥交换(X25519 + ML-KEM-768) |
| [Kyber Vault](https://github.com/systemslibrarian/crypto-lab-kyber-vault) | ML-KEM(CRYSTALS-Kyber)密钥封装 — NIST FIPS 203 |
| [Dilithium Seal](https://github.com/systemslibrarian/crypto-lab-dilithium-seal) | ML-DSA(CRYSTALS-Dilithium)后量子签名 — NIST FIPS 204 |
| [SPHINCS+ Ledger](https://github.com/systemslibrarian/crypto-lab-sphincs-ledger) | SLH-DSA(SPHINCS+)基于哈希的 PQ 签名 — NIST FIPS 205 |
| [Ratchet Wire](https://github.com/systemslibrarian/crypto-lab-ratchet-wire) | 双棘轮算法(Signal 协议) |
| [Shamir Gate](https://github.com/systemslibrarian/crypto-lab-shamir-gate) | Shamir 秘密共享与多项式可视化 |
| [Iron Serpent](https://github.com/systemslibrarian/crypto-lab-iron-serpent) | Serpent-256 分组密码(AES 决赛入围者) |
| [Dead Sea Cipher](https://github.com/systemslibrarian/crypto-lab-dead-sea-cipher) | 密码学历史 — 从 Atbash 到 AES-256-GCM |
| [Biham Lens](https://github.com/systemslibrarian/crypto-lab-biham-lens) | 差分密码分析(Biham & Shamir、DES) |
## 贡献
请参阅 [CONTRIBUTING.md](/workspaces/crypto-compare/CONTRIBUTING.md)。
[GitHub: systemslibrarian](https://github.com/systemslibrarian)
## 许可证
MIT
标签:AES, CVE, HTTPS, Post-Quantum, RSA, SHA, TLS, 云配置检测, 决策支持工具, 分组密码, 加密库, 加密标准, 加密算法, 后量子密码学, 哈希函数, 存储加密, 安全架构, 密码学, 对称加密, 手动系统调用, 数字签名, 椭圆曲线密码, 流密码, 浏览器工具, 算法比较, 网络安全, 自动化审计, 自动化攻击, 认证, 迁移指南, 防御工具, 隐私保护, 非对称加密