0

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

我想评估一些商业解决方案,因为我自己不是来自该领域,而是更愿意依赖成熟的产品。

设想:

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

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

4

3 回答 3

0

确保 SSL 不适用于您的想法。您似乎正在尝试在客户端和服务器之间进行安全通信和身份验证。为此使用 SSL。事实上,这可能是您在服务器端获得的最好的安全性,因为您将在哪里存储加密密钥。在这里查看我的答案以获得深入的解释。

如果您想保护客户端上的数据(不是来自用户,那将是 DRM),请使用 DPAPI 或其托管包装器。这实际上比您可以购买的任何东西都更安全,因为它解决了颁发的密钥存储问题。如果您在客户端上加密了数据并且需要离线访问,您最终要么将密钥存储在系统上,要么让用户插入某些东西,或者让他们输入单独的密码。第一个是不安全的,第二个是痛苦的。DPAPI 在从用户登录密码派生的密钥下加密(或智能卡或 Windows 的生物识别正在使用它们)

关于加密库的主题

.net 随附带有公钥加密的托管代码加密包和本地代码的包装器。它的System.security.cryptography 包及其免费且已安装在任何具有 .net 的 Windows 系统上。

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

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

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

于 2012-04-26T16:10:30.363 回答
0

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

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

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

于 2012-04-26T14:37:07.163 回答
0

然后,您应该查看的唯一库是下一代加密 (CNG) API。这些是 Windows 上的本机,已经过彻底测试并实现了当今存在的几乎所有重要的、经过测试的算法。

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

您可能还想查看 Windows 的 DPAPI 和 Windows 证书存储。请记住,尝试在客户端实施任何安全措施以阻止客户端调查您的应用程序是徒劳的。如果客户拥有盒子,他们就拥有您的应用程序以及您希望实施的任何安全措施。

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

于 2012-04-26T13:20:15.953 回答