【问题标题】:Exchanging Symmetric Keys交换对称密钥
【发布时间】:2011-06-21 16:55:03
【问题描述】:

我有一个将加密数据发送到 Web 服务的 WinForms 客户端。 WinForms 客户端创建一个 Symmetric RijndaelManaged sessionKey 并且还有一个“硬编码的 RSA 非对称公钥”。

我正在使用 EncryptedXml 类,这使得打包我的数据变得非常容易。

Web 服务具有“硬编码”的私钥和公钥,并且可以成功解密 SessionKey,然后使用它来解密我发送的实际数据。

这几乎是由 EncryptedData 类自动处理的。

我遇到的问题是,在 Web 服务端,当我想回复时,我似乎无法弄清楚如何获取发送过来的 SessionKey。

在我在 Web 服务端进行任何解密之前,我可以看到加密的会话密钥,但在我解密 XML 之后,它就消失了(因此我没有任何会话密钥用于我的回复)。

有什么办法可以得到这个未加密的密钥吗?

【问题讨论】:

  • 我们需要比“它消失了”更多的信息。代码sn-ps?对 RSA 密钥进行硬编码也不是一个好习惯。为什么不从 Windows 密钥库中读取证书并使用它们来加密/解密?
  • 这几乎是MSDN上代码的逐字记录:msdn.microsoft.com/en-us/library/ms229746.aspx在Decrypt()方法中,调用DecryptDocument后,我可以看到我的数据,但是我如何获取SessionKey(在Encrypt() 方法)以便我可以回复发件人?
  • 你为什么不简单地使用 SSL?

标签: encryption encryption-asymmetric public-key-encryption encryption-symmetric


【解决方案1】:

您看不到会话密钥的原因是它被自动解密和使用。通常它被认为是 XML 的一部分。如果你想得到它,只需使用

encryptedxml.decryptencryptedkey

你应该没事的。请注意,对于所有不太重要的安全警告,此处显示的代码易受中间人攻击和较小范围的填充预言攻击。不过,它应该有助于防止大多数窃听尝试。

最后,重用会话密钥也被认为是非常糟糕的安全做法。如果您重复使用它,至少考虑使用 IV,例如每个后续消息的计数器。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-01-14
    • 1970-01-01
    • 2010-10-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-20
    • 2016-07-31
    相关资源
    最近更新 更多