git中带签名的可信开发路径
我想为软件开发建立一条可信的路径。这 意味着对代码的每次更改都必须由作者签名 和一名评审员,在被接受之前。这些签名是 更改必须在发布时可验证,否则必须有一些更改 确保存储库不可能已被删除的其他方法 篡改,或添加其他更改 我希望用于此目的的版本控制系统是 git,但也接受其他选项。签名可以通过 GnuPG或SSL证书 我认为工作流程大致如下: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 tag-s”,但我不确定如何将其应用于这个特定问题。git是一个很好的候选者,因为:
- 每个提交都已签名
- 每次提交的SHA1密钥足以确保所有repo未被修改
- git标记-s可用于签署某人未作出的承诺()
提到,自从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才起作用,并且提交不能在以后进行签名。不过,我希望这是错误的。您可以在之后进行签名,但需要在该提交的基础上重新设置基础,因为签名会更改提交哈希,并且需要为所有下一次提交传播该哈希。对于较旧的提交,这很不方便,因为您可能已经将它们推到了某个位置,因此需要在远程设备上替换它们。然而,这也意味着该签名对所有未来提交都有效,您可以跟踪回购完整性,每个不同的开发分支有一个签名