【问题标题】:Asymmetric encryption where the receiving party can decrypt - but must be completely unable to encrypt the data接收方可以解密的非对称加密 - 但必须完全无法加密数据
【发布时间】:2012-09-25 20:59:59
【问题描述】:

我拥有的是客户端服务器场景和有效负载 (x)。

  • 服务器生成x并加密:enc(x)
  • enc(x) 被发送到客户端
  • 客户端解密数据得到x

但是,我必须执行的限制是:

  • 加密和解密密钥必须不同
  • 客户端不得拥有加密密钥

所以直接 RSA 是不可能的,因为你需要公钥和私钥来解密,而公钥可以让你加密它。

因此,目标是双重的:让客户端能够解密一段数据,确保它来自已知来源 - 但让客户端无法生成自己的原始有效负载的加密版本。

理想情况下是 C#,但我可以接受类似的语言答案。

编辑:我被告知只需要私钥来解密而不是两个密钥 - 但是似乎没有办法让 .Net 中的 RSACryptoServiceProvider 做到这一点。

【问题讨论】:

  • 这听起来像是 RSA 签名的标准用法。您真的希望接收方解密,还是希望接收方验证签名?如果有,为什么?
  • 是的,接收方需要原始数据(其中包含许可信息)并且需要能够验证其来源。
  • Rawling - 您需要提供一个更具体的示例 - 该示例不会阻止接收者也能够创建自己的签名,因为他们拥有两个密钥。
  • 你为什么关心接收者是否可以创建加密消息?这些邮件很容易被拒绝,因为它们没有由发件人签名。

标签: c# encryption encryption-asymmetric


【解决方案1】:
  1. 使用 AES 之类的东西来加密数据
  2. 使用 RSA 对加密数据进行签名
  3. 将加密+签名的数据发送给您的客户
  4. 由于 AES 使用共享密钥,客户端可以解密数据
  5. 客户端可以使用公共 RSA 密钥验证签名

缺点是:

  1. 客户端可以复制加密消息,但不会对其进行签名(因为只有您拥有私钥)。
  2. 客户端可以用自己的密钥对替换自己的公钥来签名/验证消息。

【讨论】:

  • 我不遵循你的缺点 2.
  • @Rawling 显然他正在传输许可信息,并且正在使用公钥对其进行验证,恕我直言,这是一个缺点。
  • 啊,我明白你的意思了。
【解决方案2】:

只需使用两个密钥对,一个用于加密,一个用于签名。 RSA 很适合这个。

【讨论】:

  • 请您详细回答一下。我仍然不明白拥有两个密钥对如何阻止客户端生成自己的原始数据的加密版本。
猜你喜欢
  • 1970-01-01
  • 2013-04-22
  • 2013-06-04
  • 1970-01-01
  • 2016-06-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多