LatticeArc/latticearc

GitHub: LatticeArc/latticearc

基于 Rust 的混合后量子密码学库,实现全部四项 NIST PQC 标准,通过用例驱动的自动算法选择简化向量子安全加密的过渡。

Stars: 0 | Forks: 0

# LatticeArc [![crates.io](https://img.shields.io/crates/v/latticearc.svg)](https://crates.io/crates/latticearc) [![docs.rs](https://docs.rs/latticearc/badge.svg)](https://docs.rs/latticearc) [![CI](https://static.pigsec.cn/wp-content/uploads/repos/2026/05/02a0c95763014839.svg)](https://github.com/LatticeArc/latticearc/actions/workflows/ci.yml) [![NIST PQC FIPS 203–206](https://img.shields.io/badge/NIST_PQC_FIPS_203--206-implemented-blue)](docs/NIST_COMPLIANCE.md) [![codecov](https://codecov.io/gh/LatticeArc/latticearc/branch/main/graph/badge.svg)](https://codecov.io/gh/LatticeArc/latticearc) [![许可证](https://img.shields.io/badge/license-Apache%202.0-blue.svg)](LICENSE) Rust 的后量子密码学。您只需描述要保护的内容——LatticeArc 会自动选择算法、安全级别和合规模式。默认为混合模式(PQ + 经典)。单一 crate。 | 您通常需要自己手动组合的部分 | 可能出现的问题 | |--------------------------------------|-------------------| | 从 4 个 NIST 标准和 11 个参数集中进行选择 | 选错安全级别、选错算法类型 | | 组合 ML-KEM + X25519 + HKDF + AES-GCM | 密钥组合器损坏、缺少域分离 | | 清零秘密、常数时间比较 | 通过 Debug 或计时侧信道发生泄露 | | FIPS 140-3、CNSA 2.0 模式限制 | 无声地选择了不合规的算法 | ``` use latticearc::{encrypt, decrypt, CryptoConfig, UseCase, EncryptKey, DecryptKey}; use latticearc::generate_hybrid_keypair_with_level; use latticearc::primitives::kem::ml_kem::MlKemSecurityLevel; // HealthcareRecords resolves to ML-KEM-1024 (NIST Level 5), so the keypair // must be generated at the matching level — `generate_hybrid_keypair()` // defaults to ML-KEM-768 and would be rejected by `validate_key_matches_scheme`. let (pk, sk) = generate_hybrid_keypair_with_level(MlKemSecurityLevel::MlKem1024)?; let encrypted = encrypt(b"patient records", EncryptKey::Hybrid(&pk), CryptoConfig::new().use_case(UseCase::HealthcareRecords))?; let decrypted = decrypt(&encrypted, DecryptKey::Hybrid(&sk), CryptoConfig::new())?; // ML-KEM-1024 + X25519 + HKDF-SHA256 + AES-256-GCM — selected automatically ``` ## 快速入门 ### 库 ``` [dependencies] latticearc = "0.8" ``` **混合加密**(默认 — PQ + 经典,攻击者必须同时攻破两者才能成功): ``` use latticearc::{encrypt, decrypt, CryptoConfig, EncryptKey, DecryptKey}; let (pk, sk) = latticearc::generate_hybrid_keypair()?; let encrypted = encrypt(b"secret data", EncryptKey::Hybrid(&pk), CryptoConfig::new())?; let decrypted = decrypt(&encrypted, DecryptKey::Hybrid(&sk), CryptoConfig::new())?; ``` **数字签名**(ML-DSA-65 + Ed25519 混合): ``` use latticearc::{generate_signing_keypair, sign_with_key, verify, CryptoConfig}; let config = CryptoConfig::new(); let (pk, sk, _scheme) = generate_signing_keypair(config.clone())?; let signed = sign_with_key(b"document", &sk, &pk, config.clone())?; assert!(verify(&signed, config)?); ``` ### 命令行工具 (CLI) ``` cargo install --path latticearc-cli ``` ``` # 签署法律文件 latticearc-cli keygen --use-case legal-documents --output ./keys latticearc-cli sign --input contract.pdf \ --key keys/hybrid-ml-dsa-87-ed25519.sec.json \ --public-key keys/hybrid-ml-dsa-87-ed25519.pub.json latticearc-cli verify --input contract.pdf \ --signature contract.pdf.sig.json \ --key keys/hybrid-ml-dsa-87-ed25519.pub.json # 加密医疗记录 latticearc-cli keygen --algorithm aes256 --output ./keys latticearc-cli encrypt --use-case healthcare-records \ --input patient.json --output patient.enc.json \ --key keys/aes256.key.json ``` ## 核心亮点 - **全部 4 项 NIST PQC 标准** — ML-KEM (FIPS 203)、ML-DSA (FIPS 204)、SLH-DSA (FIPS 205)、FN-DSA(FIPS 206 草案) - **默认混合模式** — PQ + 经典算法实现深度防御([NIST](https://csrc.nist.gov/projects/post-quantum-cryptography/faqs)、[NSA CNSA 2.0](https://media.defense.gov/2022/Sep/07/2003071834/-1/-1/0/CSA_CNSA_2.0_ALGORITHMS_.PDF)、[ENISA](https://www.enisa.europa.eu/publications/post-quantum-cryptography-current-state-and-quantum-mitigation));也可使用纯 PQ 模式 - **22 个用例** 提供自动算法选择 — `UseCase::HealthcareRecords` → ML-KEM-1024,`UseCase::IoTDevice` → ML-KEM-512 - **两个正交维度** — `SecurityLevel` (NIST 1/3/5) × `CryptoMode` (Hybrid/PqOnly) - **多层验证** — 形式化证明(Kani + SAW)、三路恒定时间门控、跨实现差分测试、31 个模糊测试目标、突变测试覆盖率达 80%。详见[验证](#verification)。 - **可选的 FIPS 后端** — `--features fips` 会将 AES-GCM、ML-KEM、HKDF、SHA-2 通过经过 CMVP 认证的 aws-lc-rs 构建路由。PQ 签名使用符合 NIST 标准但未经验证的 crate。详见[算法与后端](#algorithms--backends)。 - **单一 crate** — `cargo add latticearc` 即可使用 ## 适用与不适用场景 **在以下需求时使用 LatticeArc:** - 无需自行组合 ML-KEM + X25519 + HKDF + AES-GCM 即可实现 PQ + 经典混合加密/解密 - 基于用例的算法选择(22 种工作负载,3 种合规模式) - 运维团队无需编写 Rust 即可使用的命令行工具 - 无需修改代码即可启用 FIPS 路由 **在以下需求时请寻找其他方案:** - 单一低级原语 — 直接使用 `aws-lc-rs`、`fips204`、`fips205` 或 `fn-dsa` - 端到端的 CMVP 认证模块 — 目前尚无针对 PQ 签名的 CMVP 后端 - 跨语言绑定 — `liboqs` 支持 C、Python、Go、Java - `no_std` / 嵌入式环境 — `wolfCrypt` 在嵌入式 PQ 领域处于领先地位 - TLS 协议栈 — 使用 `rustls`、OpenSSL 3.5 或 wolfSSL ## 工作原理 ``` flowchart LR subgraph "You provide" DATA["Plaintext"] KEY["Key type"] CFG["CryptoConfig"] end subgraph "LatticeArc decides" ENGINE["Policy\nEngine"] end subgraph "Hybrid mode" H_KEM["ML-KEM\nencapsulate"] H_ECDH["X25519\nkey exchange"] H_HKDF["HKDF\ncombine"] H_AES["AES-256-GCM\nencrypt"] H_KEM --> H_HKDF H_ECDH --> H_HKDF H_HKDF --> H_AES end subgraph "PQ-only mode" P_KEM["ML-KEM\nencapsulate"] P_HKDF["HKDF\nderive"] P_AES["AES-256-GCM\nencrypt"] P_KEM --> P_HKDF P_HKDF --> P_AES end DATA --> ENGINE KEY --> ENGINE CFG --> ENGINE ENGINE -->|"CryptoMode::Hybrid"| H_KEM ENGINE -->|"CryptoMode::PqOnly"| P_KEM style ENGINE fill:#8b5cf6,stroke:#6d28d9,color:#fff style H_AES fill:#10b981,stroke:#059669,color:#fff style P_AES fill:#3b82f6,stroke:#1d4ed8,color:#fff ``` ## 算法与后端 算法合规性 ≠ 模块验证。`--features fips` 会将其涵盖的算法切换到 aws-lc-rs 经过 CMVP 认证的构建版本。PQ 签名始终使用未经验证的 crate。LatticeArc 本身**不是**一个经过 CMVP 认证的模块。 | 类别 | 算法 | 后端 | |----------|-----------|---------| | **PQ 密钥封装** | ML-KEM-512/768/1024 (FIPS 203) | aws-lc-rs — 启用 `--features fips` 时通过 FIPS 140-3 认证 | | **PQ 签名** | ML-DSA-44/65/87 (FIPS 204) | fips204 — 符合 NIST 标准,未经 CMVP 认证 | | **PQ 哈希签名** | SLH-DSA (FIPS 205) | fips205 — 符合 NIST 标准,未经 CMVP 认证 | | **PQ 格签名** | FN-DSA-512/1024 (FIPS 206 草案) | fn-dsa — 符合 NIST 标准,未经 CMVP 认证 | | **经典签名** | Ed25519 | ed25519-dalek — 已审计 | | **经典密钥交换** | X25519 | aws-lc-rs — 启用 `--features fips` 时通过 FIPS 140-3 认证 | | **对称加密** | AES-256-GCM | aws-lc-rs — 启用 `--features fips` 时通过 FIPS 140-3 认证 | | **对称加密** | ChaCha20-Poly1305 | chacha20poly1305 — 非 FIPS | | **哈希** | SHA-2 (256/384/512) | RustCrypto `sha2` crate — 广泛审查过,但未经 CMVP 认证。`--features fips` 标志**不会**将 SHA-2 切换至 aws-lc-rs(在 FIPS 下,只有 AES-GCM、ML-KEM、X25519 和 HKDF 会通过 aws-lc-rs 进行路由)。 | | **哈希** | SHA-3, BLAKE2 | sha3 / blake2 crate — 非 FIPS | | **KDF** | HKDF-SHA256 | aws-lc-rs — 启用 `--features fips` 时通过 FIPS 140-3 认证 | ## 验证 采用多层设计 — 每一层都能捕获其下一层无法捕获的问题。 ### 证明级别 | 工具 | 验证内容 | 范围 | |------|----------------|-------| | [SAW](https://github.com/awslabs/aws-lc-verification) (通过 aws-lc-rs 继承) | C 语言原语的机器验证正确性 | AES-GCM、HMAC-SHA2、SHA-256/384/512、ECDSA P-256/P-384 | | [Kani](https://github.com/model-checking/kani) | Rust 代码的有界模型检查 | 30 个证明;18 个为 PR 阻塞级别,全套计划在每夜构建中运行 | ### 基于属性与差分测试 | 工具 | 检测内容 | |------|-----------------| | [Proptest](https://proptest-rs.github.io/proptest/) | 往返、不可伪造性、单比特拒绝不变量(40 多个属性 × 256 个以上用例) | | 跨实现差分测试 | ML-KEM (fips203 对比 aws-lc-rs,每次运行 600 个往返)、ML-DSA (fips204 对比 pqcrypto-mldsa)、SLH-DSA (fips205 对比 pqcrypto-sphincsplus) — 跨这三个算法共 21 项测试 | | [Wycheproof](https://github.com/nicholasblaskey/wycheproof-rs) | 通过我们的 AES-GCM、ChaCha20-Poly1305、HMAC 和 HKDF 封装运行 555 个攻击者选择的向量 | ### 恒定时间验证(三路门控) | 工具 | 方法论 | 调度计划 | |------|-------------|----------| | Criterion | 输入类别之间的定性挂钟时间差异 | 每周(周日) | | [DudeCT](https://eprint.iacr.org/2016/1123) | 统计 Welch t 检验;`|max t| < 10` 门控 | 每周(周一) | | ctgrind (Valgrind memcheck) | 将秘密字节标记为未初始化;若存在任何依赖于它们的分支或索引则失败 | 每周(周二) | ### DoS 防护 | 工具 | 门控内容 | |------|---------------| | `stats_alloc` 分配预算 | 每次加密操作中每次 API 调用的分配上限;回归门控 | | DoS 模糊测试目标 | 有分配预算限制的对抗性输入;当分配超过 1 MiB/次时会导致模糊测试器发生 panic | | 资源限制覆盖脚本 | 如果任何接收 `&[u8]` 参数的公有函数没有声明大小上限,则 CI 将失败 | ### 持续模糊测试与突变测试 - **31 个 libfuzzer 目标**,涵盖 AEAD、KEM、签名、KDF、序列化和 DoS;每周计划矩阵。OSS-Fuzz 脚手架在 [`fuzz/oss-fuzz/`](fuzz/oss-fuzz/) 中提供。 - **`cargo-mutants --in-diff`**,80% 得分下限,对更改过加密文件的 PR 构成阻塞。 ### 运行时清理器 ASan、TSan 和 LSan 为阻塞级别。MSan 正在分阶段进行 — aws-lc-rs 1.16.3 添加了 `AWS_LC_SYS_SANITIZER=msan`,以通过 FFI 边界检测 C 代码;FIPS 路径正在等待 [aws/aws-lc#3167](https://github.com/aws/aws-lc/pull/3167)。 `#![forbid(unsafe_code)]` 在工作区级别强制执行。 ## 架构 ``` block-beta columns 3 block:API["Unified API"]:3 columns 3 encrypt["encrypt()"] decrypt["decrypt()"] sign["sign_with_key()"] end block:CONFIG["Configuration"]:3 columns 3 cc["CryptoConfig"] mode["CryptoMode"] level["SecurityLevel"] end block:HYBRID["Hybrid & PQ-Only Encryption"]:2 columns 2 henc["hybrid\nML-KEM + X25519\n+ HKDF + AES-GCM"] pqenc["pq_only\nML-KEM\n+ HKDF + AES-GCM"] end block:SIG["Signatures"]:1 columns 1 hsig["ML-DSA + Ed25519\nSLH-DSA · FN-DSA"] end block:PRIM["Primitives"]:3 columns 5 kem["ML-KEM\nFIPS 203"] dsa["ML-DSA\nFIPS 204"] slh["SLH-DSA\nFIPS 205"] fn["FN-DSA\ndraft FIPS 206"] sym["AES-GCM\nX25519 · Ed25519"] end block:BACK["Backends"]:3 columns 3 awslc["aws-lc-rs\n(FIPS opt-in)"] fips204["fips204 · fips205"] fndsa["fn-dsa · ed25519-dalek"] end style API fill:#3b82f6,stroke:#1d4ed8,color:#fff style CONFIG fill:#e2e8f0,stroke:#64748b style HYBRID fill:#10b981,stroke:#059669,color:#fff style SIG fill:#f59e0b,stroke:#d97706,color:#fff style PRIM fill:#e2e8f0,stroke:#94a3b8 style BACK fill:#374151,stroke:#1f2937,color:#fff ``` ## 安全性 基于任何单一算法都可能出现被攻破的假设进行设计 — 混合模式确保攻击者必须同时击败两个组件。密钥材料在 drop 时被清零,标签比较以恒定时间运行,秘密类型具有可隐藏内容的自定义 `Debug` 实现。 ### 限制 - **不是经过 CMVP 认证的加密模块。** 目前尚无针对 PQ 签名的 CMVP 后端。请使用 `--features fips` 来获取通过 aws-lc-rs 路由的子集。 - **未经独立审计。** 我们欢迎安全研究人员审查我们的代码。 - **1.0 版本之前的软件。** API 可能会随版本更新而发生变化。 ### 上游贡献 - **[aws-lc-rs#1029](https://github.com/aws/aws-lc-rs/pull/1029)** — ML-KEM `DecapsulationKey` 序列化(已在 v1.16.0 中发布) - **[aws-lc-rs#1034](https://github.com/aws/aws-lc-rs/pull/1034)** — 基于 ML-DSA 种子的确定性密钥生成(已在 v1.16.0 中发布) 如需报告安全问题,请联系:Security@LatticeArc.com — 详见 [SECURITY.md](SECURITY.md)。 ## 构建先决条件 需要 Rust 1.93+ 以及 C/C++ 编译器。如果是 FIPS 构建,还需要 CMake 和 Go。 ``` # Default cargo build # FIPS-validated backend brew install cmake go # macOS # sudo apt install cmake golang-go build-essential # Ubuntu cargo build --features fips ``` ### Cargo 特性 | 特性 | 默认 | 启用内容 | |---|:---:|---| | `fips` | 关闭 | 将 AES-GCM、ML-KEM、HKDF 和 SHA-2 路由至经过 CMVP 认证的 `aws-lc-rs` 构建。`ComplianceMode::Fips140_3` 和 `Cnsa2_0` 的必需选项。**传递性地启用了 `fips-self-test`**,从而按照 FIPS 140-3 §10.3.1 的要求运行开机 KAT。如果您仅需要经验证的后端而不需要自检布线,请设置 `default-features = false` 并直接启用 `aws-lc-rs/fips`。 | | `fips-self-test` | 关闭 | 针对 FIPS 边界算法(ML-KEM、AES-GCM、SHA-2、ML-DSA、SLH-DSA)的上电 KAT 自检。会被 `fips` 传递性地引入;也可以在非IPS 构建中单独启用,以获得自检 KAT 覆盖。 | | `tracing-init` | 关闭 | 暴露 `init_tracing` / `init_tracing_with_file` 辅助函数及其底层的 `tracing-subscriber` + `tracing-appender` 依赖。**库代码不应启用此特性** — 订阅者布线是二进制文件的责任,传递性库若调用 `init_tracing` 将导致下游第一个调用自身订阅者初始化的消费者发生 `panic!`。`latticearc-cli` 启用了此特性。 | | `secret-mlock` | 关闭 | 通过 `mlock(2)` / `VirtualLock` 将堆支持的 `SecretVec` 缓冲区锁定在 RAM 中,防止它们出现在交换空间或核心转储中。 | | `kat-test-vectors` | 关闭 | 暴露 `AeadCipher::new_allow_weak_key`,这是一个绕过 `AeadError::WeakKey` 对全零密钥拒绝机制的可选构造器。**仅限测试使用** — 重现使用全零密钥的 NIST AES-GCM 测试用例 1 和 2(McGrew & Viega)时需要。生产构建必须保持此特性关闭,以便未初始化内存的密钥能够安全地失效。 | | 错误 | 解决方法 | |-------|-----| | `CMake not found` | 安装 CMake(仅限 FIPS) | | `Go not found` | 安装 Go 1.18+(仅限 FIPS) | | `cc not found` (Linux) | `sudo apt install build-essential` | | 首次构建时间过长 | 首次构建会从源代码编译 AWS-LC(约 2-3 分钟) | ## 文档 | 文档 | 描述 | |----------|-------------| | [算法选择指南](docs/ALGORITHM_SELECTION.md) | 用例表格、安全级别映射、合规模式 | | [统一 API 指南](docs/UNIFIED_API_GUIDE.md) | 零信任会话、所有 22 个用例、纯 PQ 模式 | | [密钥格式规范](docs/KEY_FORMAT.md) | LatticeArc 便携式密钥 (LPK) 模式,JSON + CBOR | | [生态图](docs/ECOSYSTEM.md) | 与 OpenSSL、aws-lc-rs、liboqs、RustCrypto、age、Sequoia 的比较 | | [NIST 合规性](docs/NIST_COMPLIANCE.md) | 每种算法的 FIPS 合规状态 | | [形式化验证](docs/FORMAL_VERIFICATION.md) | 完整的 Kani 证明清单 | | [设计与架构](docs/DESIGN.md) | Crate 结构、模块边界、设计决策 | | [设计模式](docs/DESIGN_PATTERNS.md) | 配置、加密安全和测试模式 | | [CLI 参考](latticearc-cli/README.md) | latticearc-cli 的完整命令参考 | ## 许可证 Apache 2.0。详见[许可证](LICENSE)。 ## 贡献 详见 [CONTRIBUTING.md](CONTRIBUTING.md)。
标签:AES-GCM, CNSA 2.0, FIPS 140-3, ML-KEM, NIST FIPS 203-206, PQC, ProjectDiscovery, Rust, X25519, 内存安全, 医疗数据安全, 可视化界面, 后量子密码学, 安全合规, 密码学库, 密码算法, 密钥封装, 恒定时间算法, 抗量子加密, 数据保护, 数据加密, 机密性, 格密码学, 混合加密, 网络代理, 网络安全, 网络流量审计, 蓝队防御, 通知系统, 隐私保护, 零知识侧信道防护