【问题标题】:Commercial .NET libraries for Public-key cryptography用于公钥加密的商业 .NET 库
【发布时间】:2012-04-26 13:17:21
【问题描述】:

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

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

场景:

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

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

【问题讨论】:

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


    【解决方案1】:

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

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

    关于加密库

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

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

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

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

    【讨论】:

    • 感谢您提供详细信息。再次感谢您提供指向 CNG 包装器的链接。我出售公钥的原因是 SSL 不起作用。 WinForms 客户端不会在离线模式下直接连接到服务器。相反,内容将由管理员下载并物理加载到每台客户端计算机上。将此视为没有互联网连接的在线考试场景。防篡改和来源身份验证至关重要。
    • 好的,SSL 和 DPAPI 都不起作用。你可以做我列出的其他事情。重要说明,用公钥加密数据并不能验证它的来源,因为我可以用我的代替你的消息,所以不能防止篡改。你想要的是一个数字签名,.net 和 cng 都提供。
    【解决方案2】:

    那么您应该查看的唯一库是下一代加密 (CNG) API。这些是 Windows 上的原生算法,已经过全面测试并实现了当今存在的几乎所有重要的、经过测试的算法。

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

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

    标准 RSA 算法非常适合您的工作,但您可能需要研究使用证书来注册公钥/私钥,因为这将使您的应用更具适应性和更易于管理。

    【讨论】:

    • 感谢您的洞察力。我需要了解有关证书的更多信息,但它可能不是候选人,因为该应用程序需要在没有管理员权限的情况下部署在我无法控制的系统上。我当然会考虑 CNG。 DPAPI 似乎也出现了,因为应用程序需要在离线模式下运行,下载的容器可以由用户自己加载到应用程序中。
    • 谁给了这个答案-1?这位先生理解这个问题并提供了很好的替代方案,我实际上正在考虑其中一个。在标记答案时,请考虑让用户知道,以便他们至少可以调整自己的答案。
    【解决方案3】:

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

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

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

    【讨论】:

    • 谢谢。与 SecureBlackBox 相关的许可费用目前不在我们的预算之内。但是,我们正在考虑将 ZipBlackBox 用于加密容器。尽管如此,我们仍然需要公钥加密。我对上述 Spence 的回复有任何问题吗?
    • @RaheelKhan 正如您所指出的,存在许多可用于个人许可的 SecureBlackbox 包,并且 BTW PKCS#7/CMS 功能包含在所有(包括 ZIPBlackbox)包中。我们有一个产品 SolFS,它是作为容器的 ZIP 的一个很好的替代品,并且 SolFS 的知识库包含几篇关于 DRM、容器的自定义加密等的文章。我建议你阅读 eldos.com/solfs/articles 上的这些文章,它们将解决您的一些 ZIP 和 DPAPI 相关问题。
    • 尤金,谢谢。如果我们找不到相当容易的托管实施,我们将研究建议的选项。
    猜你喜欢
    • 1970-01-01
    • 2023-03-20
    • 2011-07-24
    • 1970-01-01
    • 1970-01-01
    • 2011-11-30
    • 2022-01-15
    • 1970-01-01
    • 2014-11-04
    相关资源
    最近更新 更多