【问题标题】:encryption and decryption using certificates in C#在 C# 中使用证书进行加密和解密
【发布时间】:2016-02-26 16:04:30
【问题描述】:

我有一个大的 XML,需要在一台服务器上加密(由一个 c# 应用程序),并且需要在另一台服务器上解密(由另一个 c# 应用程序)。 XML 包含需要进行加密的关键信息。

我真正需要的是我的服务器应该知道公钥,而私钥只有进行解密的服务器知道。此外,此私钥应存储在服务器上的安全区域,例如证书。

应该有哪些步骤可以帮助我实现这一目标?

  1. 我能否生成我的私钥并将其存储在证书中,否则证书将自行生成私钥?
  2. 另外,如果证书生成公钥和私钥,是否可以将公钥从证书中分离出来并导出到必须进行加密的服务器?

【问题讨论】:

  • 除了服务器是安全的之外,通常没有办法在服务器上安全地存储私钥(或任何东西)。使服务器安全的主要步骤是两因素身份验证。但如果它位于共享计算机上,请注意服务器其他用户的 root 升级漏洞。

标签: c# certificate encryption-asymmetric


【解决方案1】:
  1. 如何生成密钥对和证书取决于所使用的软件。

  2. 可以从证书中获取私钥。

一般的方法是用AES等对称加密算法加密数据,用RSA或EC等非对称加密算法和公钥加密对称密钥。这样做有两个原因: 1. 与对称加密相比,非对称加密非常慢。 2. 非对称加密的数据长度受密钥大小的限制:典型的密钥大小为 2048 位,数据长度限制为 245 字节。

除了具有 HSM 或 TPM 访问权限的服务器之外,通常没有其他方法可以在服务器上安全地存储私钥(或任何东西)。使服务器安全的主要步骤是两因素身份验证。但如果它位于共享计算机上,请注意服务器其他用户的 root 升级漏洞。

HSM - Hardware Encryption Module
TPM - Trusted Platform Module

【讨论】:

  • 什么是根升级漏洞。如果可以,您可以重定向到任何好的网络资源吗?
【解决方案2】:

非对称加密占用大量处理器资源,因此速度非常慢。因此,它通常不用于加密大量数据。

通常做的是对称加密用于加密大量数据,而非对称加密(公钥)用于加密对称加密中使用的密钥。

加密密钥与加密数据一起传输。密钥被解密(私钥),然后使用对称密钥解密批量数据。

【讨论】:

  • 非对称加密还将数据长度限制为略小于密钥大小,因此对于 2048 位密钥,数据限制为 245 字节。
  • 非常感谢 Kevin 和 zaph 的回答。你的意思是我应该使用相同的密钥(对称)来加密和解密我的 XML 数据,并且我的两个服务器都必须知道这个密钥,对吗?此外,加密数据的对称密钥将使用非对称密钥(公共)进一步加密,并将使用非对称密钥(私有)解密。那么问题来了,我是否可以预先生成这些非对称的公钥和私钥并将私钥存储在证书中,以防止任何安全隐患?
  • 使用非对称加密来加密对称密钥的原因是为了不需要两个服务器都知道它们。事实上,它们通常是在加密时生成的。您在加密服务器上对其进行加密,然后将其与加密数据一起传输到解密服务器。
  • 此方案的“秘密”值是用于解密对称密钥的证书私钥。
【解决方案3】:

这就是我实现它的方式。 在我的服务器 2 上,我正在使用“makecert.exe”命令生成证书(.cer)和私钥(.pvk)。然后,使用“pvk2pfx.exe”,我正在生成一个 .pfx 文件。这是现在将存放证书和私钥的文件。 现在,我仅将带有公钥的证书导出到服务器 1,我在其中加密数据,并在服务器 2 上使用证书的私钥解密数据。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-05-26
    • 2014-03-14
    • 2012-03-04
    • 2017-11-25
    • 2013-06-30
    • 2011-10-22
    • 1970-01-01
    相关资源
    最近更新 更多