2012-04-11 53 views
1

我正在创建一个Android应用程序,它首先需要能够安全地将数据传输到服务器。所以我想到了RSA。一个用户的多个不对称密钥对?

我会将公钥发送给用户,让他做他必须做的事,然后通过私人接收和解密。这很好。

但现在看来,应该也有对另一方的某种加密。意思是说,应该有加密消息并将其发送给用户的方法,并且只允许特定用户能够阅读它。

这听起来像有两对密钥,并将一对公钥和另一对公钥从用户发送给用户,并将其余的用于服务器。

我看过对称密钥,但它们对我来说似乎不太安全。

我错过了什么,或者这是常见的吗?我对整个加密场景都有点新鲜感。

+0

使用普通HTTPS不起作用? – Thilo 2012-04-11 12:25:30

+0

由于各种原因,我无法控制,HTTPS现在不是一种选择。 – 2012-04-11 12:30:20

+0

每个用户应该有一个密钥对。要发送另一个方向,您使用该球员公钥进行加密。 – CodesInChaos 2012-04-11 12:41:04

回答

1

通常的建议适用:使用HTTPS,不要尝试发明安全的消息传递协议。你很可能会失败。如果您绝对需要这样做,通常的方法是使用RSA密钥来加密对称会话密钥并使用这些密钥加密数据。还要注意,您可以使用RSA密钥加密的数据大小受密钥大小(1024,2048等)限制。对于双向通信,每方都需要拥有另一方的公钥。因此,它是这样的:

  1. 爱丽丝递给她的公钥(RSA)安全鲍勃(见下文)
  2. 鲍勃递给他的公钥(RSA)安全爱丽丝
  3. 当Bob想与Alice进行通信,他生成一个会话密钥(比如说一个256位的AES密钥),然后使用她的公钥对其进行加密。
  4. Bob将加密的会话密钥发送给Alice。
  5. Bob使用会话密钥(AES)对消息进行加密,并将其发送给Alice。
  6. Alice使用她的私钥(RSA)来解密会话密钥(AES)。
  7. Alice使用会话密钥(AES)解密来自Bob的消息。

在步骤3到步骤7中将爱丽丝在鲍勃中的角色转换为另一种方式进行通信。

但是当然,如​​果你把公钥发给某人,他们怎么能确定它实际上是你的钥匙,而不是我的?如果您没有亲自递交并出示您的带照片的身份证件,这可不是微不足道的。

然后,你需要一些方法来验证Bob的(加密)消息没有被修改(你可以减半,它仍然是有效的和可解密的;当然还有其他更复杂的攻击)。

所以,只要说服你需要说服谁使用HTTPS或其他已建立的协议,并且不要试图重新发明轮子。

+0

做了一些令人信服的事情,而且是HTTPS,但有一些关键魔法用于内部。谢谢! – 2012-04-17 10:19:37