Skip to content

[r2cn] Mono GPG commit 签名管理与校验功能 #1333

Description

@benjamin-747

[任务] Mono GPG commit 签名管理与校验功能

[任务分值] 25 分

[背景描述]

Mono 项目目前在代码提交过程中,允许开发者通过 GPG(GNU Privacy Guard)对 Git commit 进行签名,以确保提交的来源可信、内容未被篡改。
在 PR 合并、Release 构建等关键环节,对 commit 签名进行自动化校验,可以提升代码安全性与可追溯性。

[需求描述]
在 Mono 代码托管与 CI 流水线中,引入 GPG commit 签名校验功能,主要目标如下:

  1. 提交签名验证
  • 在 PR 合并前,系统自动检索所有相关 commit。
  • 验证每个 commit 是否存在 GPG 签名(gpgsig 字段)。
  • 校验签名是否有效,是否由受信任的公钥签发。
  1. 信任公钥管理
  • 支持在系统中维护一份受信任的 GPG 公钥列表(存储在数据库中)。
  • 仅允许列表中已登记的 Key ID(或 Fingerprint)通过验证。
  1. 反馈与审计
  • 校验失败时,提供明确的错误信息(如“缺少签名”“签名无效”“公钥未登记”)。
  • 保留签名验证日志,便于事后审计与追踪。
  1. 性能与可扩展性
  • 支持批量校验多个 commit,保证在大型 PR 或分支合并时不影响整体性能。
  • 后续可扩展至 X.509 代码签名或其他签名机制。

[代码标准]

  1. 所有 PR 提交必须签署 Signed-off-by 和 使用 GPG 签名,即提交代码时(使用 git commit 命令时)至少使用 -s -S 两个参数,参考 Contributing Guide
  2. 所有 PR 提交必须通过 GitHub Actions 自动化测试,提交 PR 后请关注 GitHub Actions 结果;
  3. 代码注释均需要使用英文;

[PR 提交地址] 提交到 mega 仓库的 main 分支 mono 目录;

[开发指导]

  1. 认领任务参考 r2cn 开源实习计划 - 任务认领与确认;

[导师及邮箱] 请申请此题目的同学使用邮件联系导师,或加入到 R2CN Discord 后在 #p-meta 频道和导师交流。

  1. Quanyi Ma genedna@gmail.com
  2. Tianxing Ye yetianxing2014@gmail.com

[备注]

  1. 认领实习任务的同学,必须完成测试任务和注册流程,请参考: r2cn 开源实习计划 - 测试任务r2cn 开源实习计划 - 学生注册与审核

Metadata

Metadata

Assignees

Type

Fields

No fields configured for Task.

Projects

No projects

Milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions