2012-09-25 56 views
0

我有一个客户端服务器方案和一个有效载荷(x)。非对称加密,接收方可以解密 - 但必须完全不能加密数据

  • 服务器生成x和其加密:ENC(X)
  • ENC(x)被发送到客户端
  • 客户端解密数据以获得X

然而,限制我必须强制执行是:

  • 的加密和解密密钥必须是不同的
  • 客户不得有加密密钥

因此直线上升RSA是窗外,因为你需要公共和私有密钥解密,和公钥可以加密它。

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

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

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

+0

这听起来像是RSA签名的标准使用。你是否真的想要接收者解密,还是你希望接收者验证签名?如果是这样,为什么? – CodesInChaos

+1

[RSA#签名消息](http://en.wikipedia.org/wiki/RSA_(算法)#Signing_messages) – Rawling

+0

是接收方需要原始数据(它包含许可信息)并且需要能够验证其来源。 – PhonicUK

回答

1

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

+0

请你详细回答一下。我仍然没有看到有两个密钥对如何防止客户端能够产生自己的原始数据的加密版本。 – PhonicUK

4
  1. 使用类似AES与RSA加密数据
  2. 迹象加密数据
  3. 加密+签名的数据发送到客户
  4. 因为AES使用共享密钥的客户端可以解密数据
  5. 客户端可以使用RSA公钥验证签名

的缺点是:

  1. 客户端可以复制加密的消息,但它不会被签名(因为只有您拥有私钥)。
  2. 客户端可以使用自己的密钥对替换其末尾的公钥以签署/验证该消息。
+0

我不追随你的缺点2. – Rawling

+0

@Rawling显然他正在传输许可信息,他用公钥验证它是一个缺点恕我直言。 – Nasreddine

+0

啊我明白你的意思了。 – Rawling