提交签名如何工作?

Mar*_*sch 9 git signing git-commit

我目前想知道git commit签名是如何工作的.

试图找到这个,但找不到任何确切的技术文档.我知道如何进行git commit签名,但我想知道git在签名提交时究竟做了什么.

究竟是什么签署?它是给定提交中存储库内的完整数据,所以提交消息等数据和所有文件的数据?或者只是提交指向包含的文件等?

tor*_*rek 6

尽管在任何地方都没有记录,但是对源代码的检查表明它是提交对象的全部内容。然后修改这些内容以插入签名,以便验证过程必须将签名剥离到单独的缓冲区中,并将原始的,预先签名插入的数据传递给GPG签名者。

然后,GPG签名数据会在计算提交的SHA-1校验和以成为提交的哈希ID时发生。分别参见gpg-interface.ccommit.c,函数sign_bufferdo_sign_commit。标签签名在里面builtin/tag.c(见函数do_sign及其调用者);签名的标签会附加其签名,而不是插入其签名,但否则,其工作方式几乎相同。


小智 5

它是由git cat-file(已删除签名)返回的原始提交对象已签名。如果 HEAD 是签名提交,您可以手动验证签名,如下所示:

git cat-file commit HEAD > signed-commit
grep -B 9999 'BEGIN PGP SIGNATURE-----' signed-commit | head -n -1 > signed-commit.stripped
grep -A 9999 'END PGP SIGNATURE-----' signed-commit | tail -n +2 >> signed-commit.stripped
sed 's/^gpgsig //' signed-commit | sed 's/^ //' > signed-commit.sig
gpg --verify signed-commit.sig signed-commit.stripped 
Run Code Online (Sandbox Code Playgroud)