【发布时间】:2009-07-26 23:17:19
【问题描述】:
我正在使用我正在编写的应用程序编写安全措施,其中我有一个包含并使用 SNK 签名的 securityDLL。如果此程序集存在,我会检查获取公钥时返回的字节数组,并将其与我的应用程序进行比较。
这是否足以确保有人没有修改我的程序集或在返回公钥的正确位置提供他们自己的 DLL?
我查看了混淆器做了什么,他们退出了我的程序集,但他们实际上是在使用 SNK,还是在读取程序集的内部并重新使用它?
【问题讨论】:
标签: .net
我正在使用我正在编写的应用程序编写安全措施,其中我有一个包含并使用 SNK 签名的 securityDLL。如果此程序集存在,我会检查获取公钥时返回的字节数组,并将其与我的应用程序进行比较。
这是否足以确保有人没有修改我的程序集或在返回公钥的正确位置提供他们自己的 DLL?
我查看了混淆器做了什么,他们退出了我的程序集,但他们实际上是在使用 SNK,还是在读取程序集的内部并重新使用它?
【问题讨论】:
标签: .net
如果您将用于对程序集进行签名的 .snk 文件保持安全,那么没有人应该能够使用相同的公钥创建新的安全 dll。
使用强名称对程序集进行签名需要加密密钥对。该对的私钥用于对程序集进行签名。如果有人要修改安全程序集,则需要重新签名,这需要原始 snk 文件。如果使用不同的 snk 文件,则程序集将具有不同的公钥。
如果您要添加对 security.dll 的引用,运行时将确保在加载它时使用正确的程序集。如果发现具有相同名称和版本但强名称不同的程序集,则会收到错误消息,因为框架会将其归类为与最初引用的程序集不同的程序集。
查看MSDN docs 了解更多信息。
【讨论】:
使用相同 SNK 签名的所有程序集都将具有相同的公钥,所以不,这不是任何身份的安全措施。请记住,对程序集进行强命名不是为了安全,而是为了版本控制和确保唯一性。
【讨论】: