如果我使用GPG签署提交(https://git-scm.com/book/zh/v2/Git-工具-签署你的工作),然后检查我刚创建的提交对象的内容:
git commit -a -S -m "This is a Signed commit"
git cat-file -p HEAD
我收到:
tree 1265193cc831c2bd47cedbb27f029e5d45fa0bb039d5bb5136f152a3e88c07b0
parent 16625976433ec56a26feb1478051b28b78684a3d68f475221afcfae2a7aaaa0d
author John Doe <john.doe@internet.www> 1612379624 +0100
committer John Doe <john.doe@internet.www> 1612379624 +0100
gpgsig-sha256 -----BEGIN PGP SIGNATURE-----
iQGzBAABCAAdFiEELgGt+L8yg4keIDJDpyYj1XHdLa8FAmAa9egACgkQpyYj1XHd
La+BogwA0VEoobCJPRLk2olHzW6iO9ioyxIrrW6uPAcLv6uernxrGDK6odYuywED
XeVEu3L9/HLG8MYSqgAGKDWfiOphRi5Lw1fLnSA3MNC1uh18OqdmD/PjyP9hMnbC
XayugJJ2dPkUHADxeDoQOGHg6wmfn+/4IsHit74YsAYXcDz1/QIHrEGMPCwROGCX
Nb1srMw2/8e+NM9U5h5KSw5ZYmBtSynIWCsHBC2w8eqvuhKMmKxbGV3izV7eOTfl
R8aC2FJSuSd/MhGprAki2sW1efiNr1EJNt/hvP2S9Eq/fkLUlVuWk5cyg/8tDJX5
VQO5RqCTR/Yz5mleoKMOeBBARzWK/r1l0bVQZYoraO8I8zxuLt5gkxqvqTOrhOKy
uTX58BdQHSlx1fU02UuPruimpbSZOBhwPFeVXl8Kj3zUWLNpTeQXZ/MSNZOiR1qF
xMdqKbuzh53B3tqvd02Cy7jdIssT8DwLM5V3IjYfv/GG/iQOE7BHGxYbPgEkv4e6
KvUBxEjj
=8gBZ
-----END PGP SIGNATURE-----
This is a Signed commit
具体要签名的摘要是什么?如果签名嵌入到提交对象中,那么它几乎不可能是提交哈希本身——因此它是树哈希吗?还是其他东西?
这是否意味着提交消息未被签名,可能会被篡改?
注意:我在这里使用了一个通过--object-type sha256初始化以使用基于SHA-256的哈希的git存储库(默认情况下,git使用SHA-1),但是对于使用SHA-1哈希的git存储库也适用我的问题(如果gpg签名对于SHA-1和SHA-256存储库的工作方式不同)。