班级图书馆安全&许可技术

时间:2011-01-21 18:54:14

标签: c# dll

我问了一个关于装配安全的问题,有人告诉我一些事情:

  

您可以在实例化库时调用许可技术。我过去所做的是将公钥作为dll的资源包括在内,然后查找带有使用我的私钥签名的加密签名的许可证xml文档。只要我密切关注我的私钥,就很难打败。

阅读本文后,我有一些问题:

  1. 如何在开发类库时调用我的许可技术?
  2. 如何将公钥作为资源添加到程序集中?
  3. 如何查找带有使用我的私钥签名的加密签名的许可证xml文档,以及从哪里&什么时候看?
  4. 如果有人请帮助我详细了解实现上述安全性的事情会更好。非常感谢。

1 个答案:

答案 0 :(得分:3)

“许可技术”基本上是他在本段其余部分详细介绍的方法。 “许可证”只不过是对演员(用户自己或代表他们运行的其他代码)使用代码的许可证明。它不一定是像SSL证书那样的通用标准。它只需要为您所知,并且很难被其他人伪造。

至于资源,这只是.Net中固有的东西。在VS Solution Explorer中,转到您希望能够从中访问受限DLL的项目。其扩展内容中的第一项将是Properties文件夹;在那之下你应该找到一个项目Resources.resx。打开它,您将获得一个GUI,允许您引用字符串,图像,纯文本文件等,这些文件可以在构建解决方案时编译到DLL中或与DLL一起保存。您可以在此处指定一个加密的已知值字符串。可能最安全的加密字符串可能是程序集的强名称或GUID,因为这样您就可以将解密的内容与调用程序的程序集信息进行比较,从而阻止某人从您的某个库中获取加密的字符串并使用它在他们的。在受限制的DLL中,您可以使用相同的功能存储解密密钥,用于解码调用DLL提供的字符串。

有许多资源可用于有关如何在.NET中使用RSA加密(此处推断的加密方法)的教程。有一个RsaCryptoServiceProvider将执行加密/解密,生成密钥等;所有你需要做的就是放弃它。可能令人困惑的是,在像RSA这样的非对称密钥算法中,数据通常使用“公共”密钥加密,并使用“私有”密钥解密。这是因为通常在公共通信通道上使用非对称密钥,并且您需要为远程方提供一个密钥,用于编写您将要解码的消息。但是,在这种情况下,受限制的DLL必须解密它需要比较的数据,因此它需要一个固定的“私钥”。这使得解密密钥对于使用.NET Reflector或类似反汇编程序的任何人来说都是“公开的”。但是,如果您(开发人员)是唯一可以为有权访问DLL的DLL提供加密字符串的人,那么您可以保密加密密钥。