我需要保护我的强名称密钥文件吗?这是一个关于开源项目的问题。

14

我正在创建一个入门套件,可以将开源项目编译后的程序集安装到GAC中,以便更容易地在模板中引用这些程序集。由于它们将被放置在GAC中,因此需要进行签名。

我是否需要密码保护和保护密钥文件,或者将其开放并包含在源代码控制中是否可以?

2个回答

10

强名称签名有几个目的(尽管常见误解是为了实险防程序篡改)- 在您的情况下,使用强密钥来唯一识别(和验证)特定程序集的特定版本,这是GAC所必需的。另一个用途是防止其他程序集进行欺骗,在这种情况下似乎不是必要的(如果我错了,请纠正我)。因此,我认为将密钥保持开放(不受密码保护)并将文件包含在源代码控制中是完全可以接受的。据我所知,通过对密钥进行密码保护,您无法阻止任何不想要的事情发生。(但是,如果您能提供更详细的安全上下文信息,我可能需要修改这个观点。)

此外,请参考此MSDN文章,深入讨论如何正确地使用强名称签名。


1
你能详细说明一下关于保护程序集防篡改的误解吗?这个看起来对我来说不正确(请参见https://dev59.com/0nRC5IYBdhLWcg3wOeWB#369477),但也许我漏掉了什么?然而,仅凭强名称显然无法验证权限(这需要类似Authenticode的证书机制)。 - Dirk Vollmar
@divo:到底哪里不正确?强密钥签名的问题在于您无法验证公钥的来源,因此它可以由另一个作者重新生成,并仍然与汇编一致(然后可以被篡改)。如果您认为链接的答案与我的观点不同(我相信它不会),那么请仔细阅读它(结合Mehrdad的答案,也很好)。这里有一些微妙之处,绝非易于理解。 - Noldorin

2
我建议在源代码控制中包含一个“development”密钥,以便更轻松地构建并避免强制人们创建和使用自己的密钥。源代码控制中的密钥在安全方面毫无意义,因为任何人都可以使用它进行签名。如果人们想要签署您的开源项目构建版本,他们可以替换他们自己可以随意管理的密钥。
您还可以提供已签名的二进制文件供下载,使用受保护的密钥签名(不向任何人提供),但是人们需要信任您才能使用这些二进制文件。您可信吗? :)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接