【发布时间】:2017-09-20 09:43:23
【问题描述】:
在 Pro Git, Tagging Your Releases 一书中:
它展示了一种将公钥收集到 git 中的 blob 中的方法,因此同步它的用户可以添加该公钥并验证签名标签。
这种方式真的安全吗?有人可以更改公钥 blob 并重做签名。我认为我们应该从单独的授权方式获取公钥,对吧?
书中的命令粘贴如下:
$ git tag -s v1.5 -m 'my signed 1.5 tag'
You need a passphrase to unlock the secret key for
user: "Scott Chacon <schacon@gmail.com>"
1024-bit DSA key, ID F721C45A, created 2009-02-09
$ gpg --list-keys
/Users/schacon/.gnupg/pubring.gpg
---------------------------------
pub 1024D/F721C45A 2009-02-09 [expires: 2010-02-09]
uid Scott Chacon <schacon@gmail.com>
sub 2048g/45D02282 2009-02-09 [expires: 2010-02-09]
$ gpg -a --export F721C45A | git hash-object -w --stdin
659ef797d181633c87ec71ac3f9ba29fe5775b92
$ git tag -a maintainer-pgp-pub 659ef797d181633c87ec71ac3f9ba29fe5775b92
$ git show maintainer-pgp-pub | gpg --import
【问题讨论】:
-
为什么要接受 PR 更改公钥?
-
为什么要接受恶意拉取请求?这不是攻击模型:而是考虑攻击者以某种方式获取存储库凭据并能够上传恶意提交包括一个新密钥,而无需发出拉取请求。
-
我认为(也许我错了)通过从分离和授权的方式获取受信任的公钥来保证安全性,然后使用该密钥来验证签名标签,这也验证了提交标签指向和提交中的所有内容。所以无论我从哪里获得存储库,这都会验证它。根据你们的cmets,如果安全是由授权的git服务器保证的,为什么我们首先需要对标签进行签名?
-
我没有声称 git 服务器必须被授权;并且必须有一些额外的方式来发布信任(尽管有不同的方式这样做,只是告诉“嗯,这是我首先看到的密钥,应该没问题,但是用于标志代码不应该改变”甚至可以)。
标签: git code-signing gnupg pgp openpgp