用于公钥加密的商业.NET库

时间:2012-04-26 13:17:21

标签: c# .net cryptography public-key-encryption

在SO,代码项目等上有许多公钥加密实现的例子。

我想评估一些商业解决方案,因为我自己不依赖于成熟产品。

情景:

  • ASP .NET应用程序加密文件容器。
  • WinForms应用程序解密容器。
  • ASP .NET应用程序不应该访问WinForms的私钥。
  • WinForms的应用程序不应该访问ASP .NET应用程序的私钥。

结果:强大的加密,防篡改和身份验证。

3 个答案:

答案 0 :(得分:0)

然后,您应该关注的唯一库是下一代加密(CNG)API。这些都是Windows上的本机,已经过全面测试,并且实现了当今存在的所有重要的,经过测试的算法。

该库还有一个用于Windows的加密安全随机数生成器。

您可能还想查看Windows的DPAPI和Windows证书存储区。请记住,尝试在客户端实施任何安全性都是徒劳的,以阻止客户调查您的应用程序。如果客户拥有该框,则他们拥有您的应用程序以及您要实施的任何安全性。

标准RSA算法非常适合您正在做的事情,但是您可能希望使用证书来调查公钥/私钥,因为这将使您的应用程序更具适应性和易于管理。

答案 1 :(得分:0)

公钥加密很容易被滥用,而这种情况经常发生。例如,人们忘记的一件事是公钥加密非常慢并且加密任何有意义的数据量(对于1024位RSA密钥超过约100个字节),需要采用对称算法并生成会话密钥。这是出现安全漏洞的地方。

为了解决这个问题,存在几种使用公钥/私钥和证书加密/解密数据的标准。它们是PKCS#1和PKCS#7(后来的CMS)和OpenPGP等等。

我们的SecureBlackbox组件库是一个全面的安全解决方案,可为许多安全方案和标准提供实施,并提供广泛的示例和支持。

答案 2 :(得分:0)

确保SSL无法满足您的需求。您似乎正在尝试在客户端和服务器之间进行安全的通信和身份验证。为此使用SSL。实际上,由于存储加密密钥的位置,这可能是服务器端安全性最高的。请参阅我的回答here以获得深入解释。

如果要保护客户端(而不是用户,即DRM)的数据,请使用DPAPI或其managed wrapper。这实际上比你可以购买的任何东西更安全,因为它解决了发行的密钥存储。如果您在客户端上有加密数据并且需要离线访问,则最终要么将密钥存储在系统上,要么让用户插入内容,要么让他们输入单独的密码。第一个是不安全的,第二个是痛苦的。 DPAPI根据从用户的登录密码(或智能卡或Windows的生物识别技术使用它们)导出的密钥进行加密。

关于加密库的主题

.net发布带有公钥加密的托管代码加密包和本机代码的包装器。它是System.security.cryptography package并且它是免费的并且已经安装在任何有.net的Windows系统上。

最低限度,您可以使用它来处理公共私钥部分而无需任何实际工作(例如,从zipblackbox加密密钥)。

一些免费/开源库也支持从密码创建加密容器。想到了Truecrypt,tarsnap和7zip(尽管那些可能需要管理员权限才能安装)。还有alos dotNetZip进行加密,我不认为需要管理员权限才能安装,并且是非副本左侧许可证下的免费开源。

您也可以轻松制作您想要的加密容器,不过我可以理解为什么您可能会犹豫不决。只需使用由Microsoft CLR安全性人员编写的class,将文件写入该流,添加IV和标记,然后使用公钥加密对其提供的密钥进行加密。在另一端,解密密钥,读取iv,解密数据,验证标签匹配,然后你的好。