代码之家  ›  专栏  ›  技术社区  ›  TangXC

我们应该在git存储库中共享用于检查签名的公钥吗?

  •  5
  • TangXC  · 技术社区  · 8 年前

    在Pro Git一书中,标记您的版本:

    它展示了一种在gitso中将公钥收集到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
    
    1 回复  |  直到 8 年前
        1
  •  5
  •   Jens Erat    8 年前

    共享签名密钥没有什么错,即使它当然不应该被视为已验证的密钥,除非通过其他方式进行验证。与根本不共享密钥相比,另一方必须通过签名中包含的指纹引用从密钥服务器获取密钥——密钥仍然不受信任,但依赖于密钥服务器。

    例如,为什么包含密钥可能会很有用:许多(企业)公司对服务器系统有非常严格的防火墙规则。您可能能够获得存储库服务器的许可(或者在默认情况下获得Github许可),但为关键服务器添加引用可能会很乏味。在构建软件时,您很可能会从存储库导入密钥,并基于硬编码的公钥指纹发出信任。不过,这比静态地将密钥存储在本地要好,例如滚动子密钥意味着除非更新本地密钥副本,否则构建会中断。当从存储库中提取密钥(并通过公钥指纹验证)时,无需采取任何操作。

    此外,还有豆腐的概念:“信任第一次使用”。当您第一次获取密钥时(例如,在初始开发期间),您希望没有攻击者在场,但希望确保以后不会分发任何被操纵的源。开发人员在其本地开发机器上获取密钥并将其设置为受信任可能已经很好了,这取决于您的攻击模型和可接受的风险。

    无论如何,还有钥匙(或者至少是指纹, never use short key IDs )正如你所提议的,在一个可信的来源上。一个网站可以通过HTTPs获得一个可信的证书,这是一个开始。特别是如果你喜欢开源项目,试着在开源会议上认证你的密钥(或者至少认证开发者密钥,然后开发者密钥可以认证项目密钥)。

    推荐文章