延迟签名和.net中的强名称究竟是什么?

时间:2011-12-06 01:47:59

标签: c# .net delay-sign

我在很多文章中都看过它 延迟签名和程序集的强名称可以防止它被高压。

这是什么意思?

我唯一知道的是没有强名称,您无法在GAC中安装程序集。 所以假设我有一个没有强名的集会,它可以被高压吗?

有人请澄清我的疑问。

1 个答案:

答案 0 :(得分:39)

在MSDN上有很多关于此的信息;例如:Strong NamingDelay Signing

总结基本理念:

强命名是一种使用简单的识别标记标记程序集的方法,稍后可以使用它来验证自部署之后它尚未被修改。强名称基本上是程序集名称,版本和开发人员独有的“强名称密钥”的哈希值。对强名称程序集的引用会经过更严格的验证,引用非强名称的程序集;特别是,强名称引用必须与版本号匹配,强名称哈希必须匹配。

这有助于避免程序中潜在安全漏洞的两个常见来源:

  1. 恶意用户使用具有相同文件名的不同程序集替换程序中的程序集,但该程序集包含恶意代码,并说服程序加载并执行它。
  2. 恶意用户使用同一程序集的不同版本替换程序中的程序集,但其中已知已修复的错误。
  3. 强名称进程将拒绝这两个操作,因为强名称数据将不匹配。这就是为什么GAC中的程序集必须具有强大的名称:它们无处不在地使用,否则它们将成为这种劫持的主要目标。

    但请注意,强名称绝对不会验证发布商的身份。任何人都可以发布一个声称是微软的名字很强的集合,并且强名称中没有任何东西可以反驳这个断言。验证身份验证是Authenticode数字签名的工作,与强命名不同。这两者经常一起使用,但它们是正交概念。

    延迟签名是一种在构建过程之外对程序集进行签名的技术。这里的想法是,您的公司可能有不允许在构建时使用强名称密钥的策略(可能它们保持脱机状态,或者在密码后面保护。)延迟签名程序集标记为空白强 - name key:它基本上为授权用户保留以后添加密钥的空间。同时,还包括一个部分强名称密钥 - 只有足够的信息可供其他程序集进行强引用,但不足以检测更改或修改。