【问题标题】:Using the Public Key of Signed Assembly as a Security Measure使用签名程序集的公钥作为安全措施
【发布时间】:2009-07-26 23:17:19
【问题描述】:

我正在使用我正在编写的应用程序编写安全措施,其中我有一个包含并使用 SNK 签名的 securityDLL。如果此程序集存在,我会检查获取公钥时返回的字节数组,并将其与我的应用程序进行比较。

这是否足以确保有人没有修改我的程序集或在返回公钥的正确位置提供他们自己的 DLL?

我查看了混淆器做了什么,他们退出了我的程序集,但他们实际上是在使用 SNK,还是在读取程序集的内部并重新使用它?

【问题讨论】:

    标签: .net


    【解决方案1】:

    如果您将用于对程序集进行签名的 .snk 文件保持安全,那么没有人应该能够使用相同的公钥创建新的安全 dll。

    使用强名称对程序集进行签名需要加密密钥对。该对的私钥用于对程序集进行签名。如果有人要修改安全程序集,则需要重新签名,这需要原始 snk 文件。如果使用不同的 snk 文件,则程序集将具有不同的公钥。

    如果您要添加对 security.dll 的引用,运行时将确保在加载它时使用正确的程序集。如果发现具有相同名称和版本但强名称不同的程序集,则会收到错误消息,因为框架会将其归类为与最初引用的程序集不同的程序集。

    查看MSDN docs 了解更多信息。

    【讨论】:

      【解决方案2】:

      使用相同 SNK 签名的所有程序集都将具有相同的公钥,所以不,这不是任何身份的安全措施。请记住,对程序集进行强命名不是为了安全,而是为了版本控制和确保唯一性。

      【讨论】:

      • 只要攻击者有权访问您的二进制文件,他们就可以更改它们并使用新密钥将其注销。他们还可以更改您的调用程序集,以将其查找的公钥更改为他们自己的一个。
      猜你喜欢
      • 2019-05-18
      • 2015-01-30
      • 2016-11-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-02-24
      • 2017-05-17
      相关资源
      最近更新 更多