jusso-dev/Boab

GitHub: jusso-dev/Boab

Boab是一个Rust命令行工具,用于帮助组织准备和执行向后量子密码学的过渡,通过扫描和评估加密资产来生成迁移计划。

Stars: 0 | Forks: 0

Boab — Transitioning to Post-Quantum Security

# Boab Boab 是一款基于 Rust 的命令行工具,旨在帮助澳大利亚的组织机构 为向后量子密码学过渡做好准备并执行迁移。它扫描代码库、TLS 端点和证书存储; 生成去重的加密资产清单;根据与 ASD 指南对齐的已发布风险评估标准 对资产进行评分;针对 2026、2028 和 2030 里程碑生成迁移计划; 并将结果导出为 JSON、CycloneDX 1.6 CBOM 和 Markdown 报告。 Boab 默认为离线模式。其发出的唯一出站网络连接是 针对您提供的目标进行的 TLS 握手。 ## 为何存在 ### NIST 已标准化替代原语 2024 年 8 月,NIST 最终确定了三项后量子标准: - **FIPS 203 ML-KEM**(前身为 Kyber),一种密钥封装机制,用于混合 TLS 和其他密钥交换。 - **FIPS 204 ML-DSA**(前身为 Dilithium),一种数字签名方案,用于代码签名和证书。 - **FIPS 205 SLH-DSA**(前身为 SPHINCS+),一种基于哈希的签名方案,其安全性论证与 ML-DSA 不同。 草案 FIPS 206 FN-DSA(Falcon)预计将随后发布。这些标准是 Boab 在对资产进行分类时考虑为"抗量子"的标准。 ### 为何选择 CLI 而非平台 后量子密码学清单和规划是一个长尾数据问题。难点 不在于运行一次扫描;而在于生成一份全面、去重、可审计的记录, 记录您系统中密码学存在的每个位置,并保持其更新。一个可嵌入现有 CI 流水线 并生成机器可读制品的命令行工具,在对澳大利亚组织机构 至关重要的三个维度上优于 UI 主导的平台: 1. **默认离线。** 除针对您指定的目标进行 TLS 扫描外,Boab 不发出任何出站网络请求。 适用于保密网络和离线构建环境。 2. **可审计的制品。** 每个输出(清单、扫描记录、计划、报告)都是纯 JSON 或 Markdown 文件, 您可以进行差异比较、签名,并与代码一起提交。 3. **开放标准输出。** Boab 生成 CycloneDX 1.6 加密 BOM(CBOM), 这是加密资产清单交换的开放标准。董事会、监管机构和供应链合作伙伴 无需 Boab 许可证即可使用其输出。 ## Boab 的端到端功能 1. **清单。** 使用 `.gitignore` 语义遍历您的代码, 在 Rust、Go、Python、JavaScript/TypeScript、Java/Kotlin 和 .NET 中 检测算法引用,并通过扩展名识别证书和密钥库文件。 添加 TLS 端点和证书存储发现项。 2. **去重。** 一个共享流水线将原始发现项折叠为规范的清单条目: 算法按 `(algorithm, parameters, source root)` 去重,证书和密钥文件按 SHA-256 指纹去重, TLS 端点按 `(target, suite)` 去重。重新运行扫描不会引入重复项,并保留用户注释。 3. **评分。** 每个清单条目在五个维度上进行评分: 算法漏洞、数据敏感性、现在收割-稍后解密暴露风险、系统关键性和迁移难度。 加权评分使每个资产落入四个分流层级之一。 4. **计划。** 针对 2026、2028 和 2030 里程碑生成迁移计划,目标日期前置。 重新生成计划时,若底层资产未变更,则保留用户编辑(目标日期、负责人、备注、状态)。 5. **报告。** 将工作区状态导出为原生 JSON、CycloneDX 1.6 CBOM 或适合董事会阅读的 Markdown 就绪性报告。 ## 评分标准 资产风险评分为: ``` priority = round( algo_vuln * 0.30 + hndl * 0.30 + data_sens * 0.15 + sys_crit * 0.15 + mig_diff * 0.10, 1 ) ``` 分流层级: - **层级 1。** 优先级等于或高于 7 且迁移难度等于或低于 6。 必须在 2028 里程碑窗口内完成迁移。 - **层级 2。** 优先级等于或高于 6,或硬件锁定且明显存在漏洞。 适合在 2028 里程碑内完成,但难度较大。 - **层级 3。** 算法漏洞等于或高于 7,且迁移计划安排在 2029 至 2030 窗口内。 - **层级 4。** 仅监控。 算法漏洞类别(部分): | 分数 | 类别 | | ----- | ----- | | 10 | MD5, SHA-1, RSA-1024, DSA-1024, 3DES, RC4 | | 9 | RSA-2048, ECDSA P-256, DH-2048, ECDH P-256 | | 8 | RSA-3072 至 4096, ECDSA P-384/P-521, X25519, Ed25519 | | 5 | PQ/T 混合(例如 X25519MLKEM768) | | 1 | ML-KEM, ML-DSA, SLH-DSA, Kyber, Dilithium, Falcon | | 0 | AES-256, SHA-256+, ChaCha20, HMAC-SHA256+ | | 7 | 未知(保守默认值) | 完整的评估标准,包括每个算法类别和边界行为,位于 `src/scoring.rs` 中, 边界情况的单元测试覆盖率为 100%。 ## 安装 ``` cargo install boab ``` 预构建的二进制文件在发布时会在 GitHub Releases 页面上发布, 适用于 Linux(x86_64 musl、aarch64 musl)、macOS(x86_64、aarch64) 和 Windows(x86_64 MSVC)。 ## 快速入门 ``` # 1. Initialise a workspace inside your repo. boab init # 2. Describe the business systems in scope. Repeat per system. boab system add \ --name "Payments" \ --classification protected \ --criticality mission_critical \ --soci \ --lifetime-years 25 # 3. Scan a codebase. boab scan codebase . # 4. Scan a TLS endpoint or two. boab scan tls api.example.com:443 # 5. Scan a directory of certificate files. boab scan certs ./certs # 6. Inspect the deduplicated inventory. boab inventory list boab inventory list --tier 1 boab inventory list --pqc-status vulnerable # 7. Generate a transition plan for the 2028 milestone. boab plan generate --milestone 2028 # 8. Produce the three outputs: machine-readable, supply chain, and board pack. boab report --format json --output board-pack.json boab report --format cbom --output bom.cdx.json boab report --format md --output readiness.md ``` ## 示例输出 [`examples/`](./examples) 包含一个自包含的完整示例, 该示例针对故意设置的弱材料测试了每个扫描器: - 五个本地生成的证书(使用 SHA-1 的 RSA-1024、RSA-2048、 有效期 20 年的 RSA-4096、ECDSA P-256 以及一个已过期的 RSA-2048), - 一个导入 MD5、SHA-1、DES、DSA、RSA 和 ECDSA P-256 的小型 Python + Go 示例应用, - 八个公开的 [badssl.com](https://badssl.com) TLS 端点 (`expired`、`self-signed`、`rsa2048`、`rsa4096`、`sha1-intermediate`、 `tls-v1-0`、`tls-v1-1`,以及健康基线)。 提交的 [`examples/demo/reports/`](./examples/demo/reports/) 目录是此类运行的输出: - [`inventory.json`](./examples/demo/reports/inventory.json) — 原生 Boab 模式(18 个资产,12 个量子脆弱)。 - [`cbom.cdx.json`](./examples/demo/reports/cbom.cdx.json) — CycloneDX 1.6 CBOM,每个条目标记有 `nistQuantumSecurityLevel`。 - [`readiness.md`](./examples/demo/reports/readiness.md) — 适合董事会阅读的 Markdown 就绪性报告,按 LATICE 优先级排序。 示例清单行: | 资产 | 算法 | PQC 状态 | 优先级 | 层级 | |-------|-----------|------------|---------:|-----:| | 使用 SHA-1 签名的 RSA-1024 证书 | `sha1WithRSAEncryption` | 存在漏洞 | 5.4 | 3 | | `rsa2048.badssl.com` 叶证书 | `sha256WithRSAEncryption` | 存在漏洞 | 5.4 | 3 | | 演示应用中的 `MD5` 导入 | `MD5` | 存在漏洞 | 5.7 | 3 | | TLS 握手中的 `X25519` 组 | `X25519` | 存在漏洞 | 5.1 | 3 | | `TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256` | 套件 | 对称算法安全 | 2.7 | 4 | 在本地重现: ``` cargo build --release cd examples/demo ./run-demo.sh ../../target/release/boab ``` 参见 [`examples/README.md`](./examples/README.md) 了解完整演练。 ## 离线操作 `.boab/config.toml` 中的默认设置是 `scanner.air_gapped = true`。 在离线模式下,Boab 拒绝对 TLS 端点执行 HSTS 探测 (`--probe-hsts` 标志会返回错误)。TLS 扫描器本身仍然会连接到用户指定的目标 以完成标准握手;这是 Boab 发出的唯一出站流量。 对于完全离线的使用场景,请在面向互联网的中继器上运行 TLS 扫描, 并将生成的 `.boab/scans/.json` 文件传输到您的离线工作区。 ## 输出 ### 原生 JSON 完整的工作区状态,用于在不同扫描运行间进行差异比较。键顺序稳定。 ### CycloneDX 1.6 CBOM 开放标准的加密物料清单,JSON 编码。每个清单条目映射到一个 `components[].type = "cryptographic-asset"`,并带有相应的 `cryptoProperties` 块 (`algorithm`、`certificate`、`related-crypto-material` 或 `protocol`)。 Boab 为每个资产设置 `nistQuantumSecurityLevel`,以便使用者可以按 NIST 安全类别 1、2、3 或 5 排序。 ### Markdown 就绪性报告 适用于截屏放入董事会资料或粘贴到 SteCo 更新中的 GitHub 风格 Markdown。 章节包括:执行摘要、ASD LATICE 阶段状态、前 25 个优先资产、 分流层级分布、PQC 状态分布、供应商 PQC 依赖摘要、存档的计划、方法论附录、生成时间页脚。 ## Boab 检查内容 Boab 包含三个扫描器。每个扫描器将发现项发送到一个共享的去重流水线, 该流水线将其提升为规范清单。 ### 代码库扫描器:语言与模式 代码库扫描器使用 `.gitignore` 语义遍历目标路径 (默认排除:`node_modules`、`vendor`、`.venv`、`venv`、`target`、`dist`、`build`、`.git`)。 对于每个文件,Boab 应用一个语言无关的算法名称模式包和一个 按语言分类的加密库导入模式包。 **按文件扩展名检测的语言:** | 语言 | 扩展名 | | -------- | ---------- | | Rust | `.rs` | | Go | `.go` | | Python | `.py` | | JavaScript / TypeScript | `.js`、`.mjs`、`.cjs`、`.ts`、`.tsx`、`.jsx` | | Java / Kotlin | `.java`、`.kt`、`.kts` | | .NET (C#, VB, F#) | `.cs`、`.vb`、`.fs` | | 通用配置 | `.toml`、`.yaml`、`.yml`、`.json`、`.xml`、`.conf`、`.ini` | **在任何文件中检测到的算法字面量(高置信度):** | 类别 | 算法 | | ----- | ---------- | | 已破解的哈希 | MD5, SHA-1 | | 存在漏洞的 RSA | RSA-1024, RSA-2048, RSA-3072, RSA-4096 | | 存在漏洞的 ECC | ECDSA-P-256, ECDSA-P-384, Ed25519, X25519 | | 其他存在漏洞的原语 | 3DES, TripleDES, DES-EDE3, RC4 | | 对称(安全) | AES-128 (GCM/CBC/CCM/CTR), AES-256 (GCM/CBC/CCM/CTR), ChaCha20, ChaCha20-Poly1305 | | 现代哈希(安全) | SHA-256, SHA-384, SHA-512 | | PQC 标准 | ML-KEM (512/768/1024), ML-DSA (44/65/87), SLH-DSA, Kyber, Dilithium | | PQ 混合信号 | X25519MLKEM768 | **在源代码中检测到的 JWT / JWA `alg` 标记值:** | 标记 | 算法 | PQC 状态 | | ----- | --------- | ---------- | | `RS256` | RSA + SHA-256 | 存在漏洞 | | `ES256` | ECDSA P-256 | 存在漏洞 | | `EdDSA` | Ed25519 | 存在漏洞 | | `HS256` | HMAC-SHA-256 | 对称算法安全 | **检测到的加密库导入(中等置信度):** | 语言 | 库 | | -------- | --------- | | Rust | `ring`、`rustls`、`openssl`、`sha2` | | Go | `crypto/*` 标准库、`golang.org/x/crypto/*` | | Python | `cryptography`、`pycryptodome` (Crypto)、`hashlib`、`ssl`、`pyjwt` | | JavaScript / TypeScript | `node:crypto` (require/import)、`node-forge`、`tweetnacl`、`jsonwebtoken` | | Java / Kotlin | `javax.crypto`、`java.security`、BouncyCastle (`org.bouncycastle`) | | .NET | `System.Security.Cryptography` | **按扩展名检测到的证书和密钥文件(低置信度占位发现项):** `.pem`、`.crt`、`.cer`、`.der`、`.p7b`、 `.p12`、`.pfx`、`.jks`、`.key`。 ### TLS 端点扫描器:捕获内容 对于每个 `host:port` 目标,Boab 尝试进行 TLS 1.3 握手,必要时回退到 TLS 1.2。 针对每个目标记录: - 协商的 TLS 协议版本。 - 协商的密码套件(完整 IANA 名称)。 - 协商的 ALPN 协议(如有)。 - 完整的证书链。对于每个证书:主题、颁发者、签名算法(OID 和友好名称)、 公钥算法和近似密钥大小(比特)、有效期窗口(`notBefore` / `notAfter`)以及 SHA-256 指纹。 - 通过代码点识别 PQ 混合组,包括 `X25519MLKEM768` (`0x11EC`) 和 `X25519Kyber768Draft00` (`0x6399`)。 默认设置:10 秒连接超时,每秒 1 个主机的速率限制(可通过 `--rate-limit` 覆盖)。 HSTS 探测需要 `--probe-hsts` 标志,在离线模式下会被拒绝。 ### 证书存储扫描器:文件类型与字段 遍历目录,查找匹配 `.pem`、`.crt`、`.cer`、`.der`、 `.p7b`、`.p12`、`.pfx`、`.jks` 的文件。解析: | 格式 | 解析器 | 备注 | | ------ | ------ | ----- | | PEM (`.pem`, `.crt`, `.cer`, `.p7b`) | `x509-parser` | 支持多块文件。 | | DER (`.der`) | `x509-parser` | | | PKCS#12 (`.p12`, `.pfx`) | `p12-keystore` | 密码通过 `--password-file` 提供。 | | JKS (`.jks`) | 仅作为占位符 | 使用 `keytool` 转换为 PKCS12。 | 对于每个 X.509 证书,Boab 记录主题、颁发者、签名算法 OID 和友好名称、 公钥算法 OID 和友好名称、有效期窗口以及 DER 字节的 SHA-256 指纹。 密码永远不会被记录或存储在 `.boab/` 中。 ### 算法风险分类 每个检测到的算法都映射到一个 `pqc_status`: - `vulnerable`:在生产参数下可被 Shor 或 Grover 算法破解,例如 RSA、ECDSA、经典 DH。 - `hybrid`:PQ/T 混合,例如 `X25519MLKEM768`。目前提供经典安全性,长期提供后量子安全性。 - `resistant`:NIST FIPS 203/204/205 原语(ML-KEM、ML-DSA、SLH-DSA)及其第 3 轮前身(Kyber、Dilithium、Falcon)。 - `symmetric_ok`:AES-128 或更大,SHA-256 或更大,ChaCha20。在密钥大小加倍的情况下,对 Grover 算法具有抗量子性。 - `unknown`:Boab 无法分类(保守默认漏洞评分为 7)。 ## 供应商 PQC 依赖注册表 Boab 内置了一个初始注册表,涵盖了大多数澳大利亚组织在符合 ASD 标准的 ICT 系统中会遇到的供应商。 每个条目记录了供应商已发布的 PQC 状态和来源 URL。客户覆盖数据保存在 `.boab/vendor-overrides.json` 中, 并按 `(vendor, product)` 合并覆盖。 **内置覆盖范围(18 家供应商的 26 个产品):** | 供应商 | 产品 | 当前 PQC 状态 | | ------ | ------- | ------------------ | | Microsoft | Windows | unknown | | Microsoft | Azure | unknown | | Microsoft | M365 | unknown | | AWS | KMS | hybrid | | AWS | ACM | unknown | | AWS | TLS (s2n-tls) | hybrid | | Google | Cloud | hybrid | | Oracle | Database | unknown | | Oracle | WebLogic | unknown | | Cisco | IOS XE | unknown | | Cisco | ASA | unknown | | Cisco | Firepower | unknown | | Palo Alto Networks | PAN-OS | unknown | | Fortinet | FortiOS | unknown | | F5 | BIG-IP | unknown | | Citrix | NetScaler | unknown | | Apache | httpd | unknown | | Apache | Tomcat | unknown | | nginx | nginx | unknown | | OpenSSL | OpenSSL | hybrid | | BoringSSL | BoringSSL | hybrid | | BouncyCastle | Java | resistant | | HashiCorp | Vault | unknown | | CyberArk | PAM | unknown | | Thales | Luna HSM | hybrid | | Entrust | nShield | hybrid | 没有实时获取。注册表是一个代码制品,通过拉取请求刷新, 相关流程记录在 `docs/vendor-registry.md` 中。状态值遵循与 Boab 其他地方相同的五分类法 (`vulnerable`、`hybrid`、`resistant`、`symmetric_ok`、`unknown`)。 `unknown` 是对于任何尚未公开、有日期承诺的供应商的诚实默认值。 Boab 不会合成乐观的路线图日期。 ## 阅读列表 如果您是首次接触后量子密码学迁移,请按以下顺序学习: - ACSC 和 ASD 后量子密码学指南页面(最新版本,请在 cyber.gov.au 和 asd.gov.au 网站上搜索"post-quantum cryptography")。 - ASD 信息安全手册(ISM),特别是密码学章节和 AACA/AACP 清单。 - 《2023-2030 年网络安全战略》。 - NIST FIPS 203 (ML-KEM)、204 (ML-DSA) 和 205 (SLH-DSA)。 - NIST IR 8547 "向后量子密码学标准过渡"。 - CISA、NIST 和 NSA 联合指南"Quantum-Readiness: Migration to Post-Quantum Cryptography"(国际参考)。 - CycloneDX 1.6 规范,加密资产模型。 - Mosca 定理:`Y + X > Z`,其中 Y 是您需要数据保密的时间,X 是迁移所需的时间,Z 是直到量子计算机出现的时间。如果 `Y + X > Z`,您已经晚了。 ## Boab 如何与现有工具集成 Boab 定位明确。它不试图取代: - **SBOM 工具。** Boab 的 CBOM 与通过 `cargo cyclonedx`、`syft` 或 `cdxgen` 等工具生成的软件 BOM 互补。 Boab 记录密码学态势;SBOM 工具记录软件包态势。许多团队会同时生成两者。 - **漏洞扫描器。** Boab 不扫描 CVE。请将其与 Grype、Trivy 或商业扫描器配合使用。 - **密钥扫描器。** Boab 不扫描泄露的凭据。 - **KMS 或 HSM 管理。** Boab 会显示清单中存在 HSM,但不会为您管理密钥。 Boab 专注于做好一件事:生成一份可审计、符合 ASD 标准的视图, 展示您的密码学态势相对于 2026/2028/2030 里程碑时间线的状况。 ## v1 版本范围之外 KMS 扫描器、Kubernetes Secret 枚举、SSH 和 GPG 主机密钥清单、 实时供应商 PQC 路线图获取、自动修复、特定的 ISM 控制 ID 映射、 评分权重覆盖、HTML 报告、Web UI、守护进程模式和多机联合。 这些内容在 `docs/backlog-v1.1.md` 中跟踪。 ## 项目状态 Boab 分五个阶段构建: - 阶段 0:规划和 crate 选择。 - 阶段 1:工作区基础、模型、评分引擎、CLI 骨架。 - 阶段 2:带去重流水线的代码库扫描器。 - 阶段 3:TLS 端点和证书存储扫描器。 - 阶段 4:计划生成和供应商 PQC 注册表。 - 阶段 5:JSON、CBOM 和 Markdown 报告以及 CI。 参见 `PLAN.md` 了解规划文档,提交历史记录了分阶段构建过程。 ## 许可证 双重许可,可选择以下之一: - MIT 许可证 (`LICENSE-MIT`) - Apache 许可证,第 2.0 版 (`LICENSE-APACHE`) ## 关于名称 Boab 是一种原产于西澳大利亚金伯利地区的树。随着树龄增长,树干中空并储水, 这就是为什么金伯利地区的原住民数千年来一直将 Boab 树用作容器、庇护所和路标。 工具以此命名出于同样的原因:它是一个你走近去了解内部结构的坚固之物。
标签:ASD指导, CycloneDX CBOM, DInvoke, FIPS 203, FIPS 204, FIPS 205, JSON导出, Markdown报告, meg, NIST标准, Rust编程, TLS扫描, 信息安全, 可视化界面, 后量子密码学, 威胁建模, 安全合规, 密码学清单, 密码学迁移, 密码资产管理, 文档结构分析, 气隙安全, 澳大利亚网络安全, 网络代理, 网络安全, 证书扫描, 过渡计划, 通知系统, 隐私保护