0

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

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

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

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

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

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

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

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

4

2 回答 2

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

缺点是:

  1. 客户端可以复制加密消息,但不会签名(因为只有您拥有私钥)。
  2. 客户端可以用自己的密钥对替换自己的公钥来签名/验证消息。
于 2012-09-25T12:59:22.190 回答
1

只需使用两个密钥对,一个用于加密,一个用于签名。RSA 对此很好。

于 2012-09-25T12:37:11.920 回答