git中带签名的可信开发路径

git中带签名的可信开发路径,git,version-control,digital-signature,gnupg,Git,Version Control,Digital Signature,Gnupg,我想为软件开发建立一条可信的路径。这 意味着对代码的每次更改都必须由作者签名 和一名评审员,在被接受之前。这些签名是 更改必须在发布时可验证,否则必须有一些更改 确保存储库不可能已被删除的其他方法 篡改,或添加其他更改 我希望用于此目的的版本控制系统是 git,但也接受其他选项。签名可以通过 GnuPG或SSL证书 我认为工作流程大致如下: 当前验证的主干已分支 git checkout -b tag_for_last_verified_trunk_content test # branch t

我想为软件开发建立一条可信的路径。这 意味着对代码的每次更改都必须由作者签名 和一名评审员,在被接受之前。这些签名是 更改必须在发布时可验证,否则必须有一些更改 确保存储库不可能已被删除的其他方法 篡改,或添加其他更改

我希望用于此目的的版本控制系统是 git,但也接受其他选项。签名可以通过 GnuPG或SSL证书

我认为工作流程大致如下:

  • 当前验证的主干已分支
  • git checkout -b tag_for_last_verified_trunk_content test # branch test git checkout trunk & git merge tested
  • 更改由一个或多个开发人员在分支中开发
  • [work...] git commit -s -m "dev1 comment" ...
  • 一个或多个开发人员签署分支所做的更改
  • [work...] git commit -s -m "dev1 comment" ... git tag -m "tested" tested testing # put a tag on the same SHA1 than the "testing" tag
  • 审阅者审阅并测试更改
  • 审阅者对分支机构所做的更改进行签名
  • git tag -m "tested" tested testing # put a tag on the same SHA1 than the "testing" tag
  • 分支已“合并”到当前已验证的中继
  • git checkout trunk & git merge tested 合并不必像未经审查的那样万无一失 更改必须是无法聚合到主干上的—就在那之前 发布时,需要有一种方法来检查是否有 主干中未查看(未签名)的更改。一般来说,不需要防止篡改,只需要检测

    我想要一个关于如何设置和如何完成每个操作的简短指南。一旦我得到了一些建议,我就可以自己弄清楚细节了


    另外,我已经从技术上了解了“git tag-s”,但我不确定如何将其应用于这个特定问题。

    git是一个很好的候选者,因为:

    • 每个提交都已签名
    • 每次提交的SHA1密钥足以确保所有repo未被修改
    • git标记-s可用于签署某人未作出的承诺()
    因此:

  • 当前验证的主干已分支 git checkout -b tag_for_last_verified_trunk_content test # branch test git checkout trunk & git merge tested git checkout-b标记(用于(最后一次)验证(主干)内容测试(分支测试)
  • 更改由一个或多个开发人员在分支中开发 [work...] git commit -s -m "dev1 comment" ... [工作…]git提交-s-m“dev1注释”
  • 一个或多个开发人员签署分支所做的更改

    [work...] git commit -s -m "dev1 comment" ... git tag -m "tested" tested testing # put a tag on the same SHA1 than the "testing" tag 已完成提交,在提交消息的末尾添加一行签名:有关过程,请参阅此页面

    Signed-off-by: user name 签字人:用户名
  • 审阅者审阅并测试更改

    git tag -m "testing" testing # refer to current commit, allowing dev to go on with further changes git标记-m“testing”测试#指当前提交, 允许开发人员继续进行进一步的更改
  • 审阅者对分支机构所做的更改进行签名 git tag -m "tested" tested testing # put a tag on the same SHA1 than the "testing" tag git tag-m“tested”tested testing#在与 “测试”标签
  • 分支已“合并”到当前已验证的中继 git checkout trunk & git merge tested git签出中继和git合并已测试

  • 提到,自从git 1.7.9(2012年1月,在回答这个问题差不多2年后)以来,您可以使用
    git commit-S

    GPG签署任何您想要的提交
    (请参阅,最近在中进行了改进)

    您可以在tag
    git tag-s v0.1.0
    中使用GPG key with-s选项为标签签名:

    -


    但是您不能签署提交。

    在您标记之前,不会签署更改。在此之前的任何内容都可以由作者或其他带外机制进行验证,但不能从git内部进行验证

    git可以验证更改的传统是否正确,但只有签名的标记才能验证更改本身是否正确


    对于您的工作流程,您可能会发现自己做了很多标记。

    我不理解您的解释。每个提交是如何签名的?当然,提交包含所有回购协议的SHA1,但没有任何内容表明提交是由提交中给出的作者进行的。我不知道提交时有任何数字签名?@nakable:对不起,我忘记了提交时的
    -s
    选项。请记住,这是一个非常轻量级的签名过程(请参阅我在回答中添加的链接,此时不涉及“数字签名”,这与
    tag-s
    )不同)。嘿,实际上,自从git v1.7.9以来,您可以对任何提交进行GPG签名。使用
    git commit-S
    执行以下操作that@CyrylPłotnicki Chudyk观点正确。我已经在答案中包含了它,同时还提到了git提交,它引入了该功能。正如我在最初的问题中所说的,我已经知道git标记中的-s选项,但这并不能解决整个问题;实际上,自从GitV1.7.9以来,GPG可以签署任何您想要的提交。使用
    git commit-S
    可以做到这一点,因为还没有任何具体的答案给出所有的故事,所以我不打算透露。我自己正在尝试一些可能性,如果我提出了一个具体的可能性,我会在这里发布答案。似乎我必须自己找到具体的解决方案。@注意,到目前为止,个人提交可以用-S签名。签名可以通过“git log”的“-show signature”选项查看。感谢您提供的信息。但是,似乎只有在执行提交时-S才起作用,并且提交不能在以后进行签名。不过,我希望这是错误的。您可以在之后进行签名,但需要在该提交的基础上重新设置基础,因为签名会更改提交哈希,并且需要为所有下一次提交传播该哈希。对于较旧的提交,这很不方便,因为您可能已经将它们推到了某个位置,因此需要在远程设备上替换它们。然而,这也意味着该签名对所有未来提交都有效,您可以跟踪回购完整性,每个不同的开发分支有一个签名