2009-07-26 41 views
1

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

是否有足够的安全性来确保某人没有修改我的程序集或在正确的位置提供了他们自己的DLL来返回公钥?

我看了一下混淆器做了什么,他们辞去了我的程序集,但他们实际上是在使用SNK还是他们正在阅读程序集的内部并重新使用它?

回答

3

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

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

如果要添加对security.dll的引用,运行时将确保在加载它时使用了正确的程序集。如果发现一个程序集具有相同的名称和版本,但具有不同的强名称,则会出现错误,因为该框架将按照与最初引用的程序集不同的程序集来分类。

查看MSDN docs了解更多信息。

2

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

+2

只要攻击者能够访问你的二进制文件,他们就可以改变它们,并用一个新的密钥让它们退出。他们也可以改变你的调用程序集以将它寻找的公钥转换为它们自己的公钥。 – 2009-07-27 14:03:22