systemslibrarian/PostQuantum.CryptographicBillOfMaterials

GitHub: systemslibrarian/PostQuantum.CryptographicBillOfMaterials

基于 Roslyn 静态分析的 .NET 密码学物料清单生成器,自动清点加密用法并评估后量子迁移就绪度,输出标准 CycloneDX 和 SARIF 报告。

Stars: 0 | Forks: 0

# PostQuantum.CryptographicBillOfMaterials (`dotnet-cbom`) 一款针对 .NET 的密码学物料清单 (CBOM) 生成器。它利用 Roslyn 静态分析来 **清点密码学使用情况、评估量子风险分类,并展示后量子 (PQC) 迁移 进度** —— 采用审计人员信任且现有工具已支持的格式。 专为普通的 .NET 团队( county IT 、图书馆、SaaS 供应商、国防分包商)打造,这些团队必须 应对联邦政府的 PQC 迁移时间表,且通常**没有内部密码学家**。 ## 功能简介 - **发现**跨 `System.Security.Cryptography` 、JWT 验证、TLS/证书处理以及后量子 API (ML-KEM/ML-DSA/SLH-DSA) 的加密操作,并为每项发现提供**检测置信度**。 - **分类**每项发现的**两个独立维度** —— 经典弱点(例如 ECB、MD5)和量子脆弱性(Shor 算法攻破 RSA/ECC;Grover 算法降低 AES-128 的安全边际)—— 从而避免混淆评估建议。每个结论都附带**文档化依据**(FIPS/NIST/CWE 引用)。 - **评分**透明:提供 0-100 的发现风险评分和展示了计算过程的 **PQC 就绪度评分**,绝不是黑盒。 - **报告**生成格式包括 **CycloneDX 1.6** (一种标准化的 CBOM,而非专有格式)、**SARIF 2.1.0**、Markdown、HTML 以及执行摘要 —— 现在以**审计包**形式提供:包含首要迁移操作、相较于基线的变更内容、修复状态和豁免情况。 - **跟踪进度**:使用 `diff`/`--baseline`:“量子脆弱性发现 1 → 0,就绪度 64 → 100”,并为每项发现标记 新增 / 未变 / 退化 / 豁免 状态。 - **自我验证**:生成的 CBOM 会根据**官方 CycloneDX 1.6 JSON Schema** (内置,支持离线)以及 `dotnet-cbom` 配置文件进行校验 —— 适用于 `validate` 命令和 CI 环境。 - **超越源码的洞察**:通过 Bouncy Castle 检测第三方加密操作并进行**包清单清点**( `project.assets.json` / `PackageReference` ),让依赖项中的加密操作也清晰可见。 ## 安装说明 ``` dotnet tool install -g PostQuantum.CryptographicBillOfMaterials.Cli ``` (扫描 `.sln`/`.csproj` 需要安装 .NET SDK;目录扫描无需该 SDK。) ## 快速开始 ``` # 扫描 solution、project、目录或单个文件 dotnet-cbom scan ./MyApp.sln # 选择 formats、policy posture 和 CI gate dotnet-cbom scan ./src --format cyclonedx,sarif,html --profile cnsa2 --fail-on critical # 显示相对于上一次运行的迁移进度(在 findings 上标记 New/Regressed/Unchanged) dotnet-cbom scan ./src --baseline ./last.cbom.json dotnet-cbom diff ./last.cbom.json ./cbom-out/cbom.cbom.json # 根据官方 CycloneDX 1.6 schema 和 dotnet-cbom profile 验证 CBOM dotnet-cbom validate ./cbom-out/cbom.cbom.json ``` ### 策略配置文件 `--profile` 用于选择安全姿态(记录在 CBOM 中)。配置文件只能**提升**严重级别或要求更多证据 —— 绝不会静默降低风险。 | 配置文件 | 安全姿态 | |---|---| | `general` | 保守的商业默认设置(草案指导标注为草案) | | `federal` | 以 NIST 为中心;易受 Shor 算法攻击的公钥加密至少为高风险 | | `cnsa2` | CNSA 2.0 / NSS ;AES-128 不充分(需使用 AES-256 );提供详细的依据 | | `audit` | 最大化证据;豁免项用于注释而非抑制 | | `developer` | 低噪音本地模式(风险分类保持不变) | ### 实用的扫描选项 `--changed-files a.cs,b.cs` (支持感知 PR ), `--config cbom.config.json` , `--restore`/`--no-restore` , `--msbuild-property name=value` , `--allow-partial` , `-q` 。 ### 退出代码(对 CI 友好,安全失效) | 代码 | 含义 | |---|---| | 0 | 执行完成;没有达到或超过 `--fail-on` 设定的问题 | | 1 | 存在达到或超过 `--fail-on` (默认为 `high` )的问题 | | 2 | 部分分析 —— 某个项目加载失败(绝不会被报告为“无问题”) | | 3 | 使用/配置错误 · 4 内部错误 | ## CI / GitHub Actions 使用官方复合操作(内置 SARIF 上传和制品保留): ``` - uses: actions/setup-dotnet@v4 with: { dotnet-version: '8.0.x' } - uses: systemslibrarian/CryptographicBillOfMaterials@v1 with: target: ./MyApp.sln formats: cyclonedx,sarif,markdown,summary profile: general fail-on: ${{ github.event_name == 'pull_request' && 'none' || 'high' }} baseline: baseline/cbom.cbom.json ``` 适用于 **GitHub Actions** (带有 PR 基线差异注释)、**Azure DevOps** 和 **GitLab CI** 的完整可直接复制流程位于 [`examples/ci/`](examples/ci/) 中。建议从 `--fail-on critical` 开始,随着清点工作成熟逐渐降低阈值;SARIF 可点亮代码扫描功能,而 CBOM 制品则可提供给 Dependency-Track 或审计人员使用。 ## 风险与就绪度的计算方式(透明) - **发现风险** = `0.45·Q + 0.35·C + 0.20·X` (量子、经典弱点、使用暴露因素),带有安全失效底线(例如,禁用证书验证和硬编码密钥始终 ≥ 严重)。 - **PQC 就绪度** = `100 × 安全权重 / 总权重` ,仅针对量子相关算法进行计算;经典和配置问题将单独报告,以免扭曲 PQC 的评估情况。 完整的方法论和 CycloneDX 配置文件差异详见 [`docs/TECHNICAL-DESIGN.md`](docs/TECHNICAL-DESIGN.md)。 ## 标准对齐 输出的是有效的 **CycloneDX 1.6** BOM (即上游引入 CBOM 的版本) —— 每次运行都会通过官方 JSON Schema 进行验证。PQC/风险字段位于 `cbom:` 命名空间下指定的 `properties`/`evidence` 扩展点中,因此任何支持 CycloneDX 的工具都能对其进行解析。结论引用了 FIPS 203/204/205、NIST SP 800-131A/800-52、NIST IR 8547 (⚠ 草案)、CNSA 2.0 和 CWE —— 详见 [`docs/RULES.md`](docs/RULES.md) 中的引用状态表。 配置( `cbom.config.json` ):规则开关记录为**豁免**(理由/批准人/有效期)、**针对单个算法**的调整、仅提升级别的严重性底线、路径匹配符,以及按路径或命名空间( `ns:` )划分的**数据敏感性提示**,这些提示会提高对“先收集后解密”风险的评估级别。所有应用的操作都会记录回 CBOM 中。详见 [`samples/cbom.config.example.json`](samples/cbom.config.example.json)。 ## 项目布局 ``` src/ PostQuantum.CryptographicBillOfMaterials core model · risk · scoring · knowledge base PostQuantum.CryptographicBillOfMaterials.Analysis Roslyn detectors + scan engine PostQuantum.CryptographicBillOfMaterials.Reporting CycloneDX / SARIF / Markdown / HTML / diff PostQuantum.CryptographicBillOfMaterials.Cli dotnet-cbom docs/ TECHNICAL-DESIGN.md · THREAT-MODEL.md · KNOWN-GAPS.md · RULES.md · ROADMAP.md RULE-CHANGELOG.md · COMPATIBILITY.md · ACCURACY-AND-LIMITATIONS.md examples/ci/ github-actions.yml · azure-pipelines.yml · gitlab-ci.yml ``` ## 状态 正在积极开发中。目前已实现:扫描(解决方案/项目/目录)、**16 条规则**、作为审计包的所有报告格式、带有修复状态的差异/基线比对、**策略配置文件**、富有表现力的配置、**官方 CycloneDX 1.6 模式验证**、GitHub Action + CI 示例,以及工具 SBOM。关于静态分析能检测到和无法检测到的内容,请参阅 [`docs/ACCURACY-AND-LIMITATIONS.md`](docs/ACCURACY-AND-LIMITATIONS.md) 和 [`docs/KNOWN-GAPS.md`](docs/KNOWN-GAPS.md) 。 ## 许可证 Apache-2.0。
标签:CycloneDX, Roslyn, 云安全监控, 后量子密码, 多人体追踪, 密码学, 手动系统调用, 静态分析