一个用户的多个非对称密钥对?

时间:2012-04-11 12:23:24

标签: android encryption rsa

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

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

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

这就像有两对密钥,从一对发送公钥,从另一对发送私钥到用户,并将其余部分保存到服务器。

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

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

2 个答案:

答案 0 :(得分:1)

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

  1. Alice将她的公钥(RSA)安全交给Bob(见下文)
  2. Bob将他的公钥(RSA)安全地交给Alice
  3. 当Bob想要与Alice通信时,他会生成会话密钥(例如,256位AES密钥),然后使用她的公钥对其进行加密。
  4. Bob将加密的会话密钥发送给Alice。
  5. Bob使用会话密钥(AES)加密消息,并将其发送给Alice。
  6. Alice使用她的私钥(RSA)来解密会话密钥(AES)。
  7. Alice使用会话密钥(AES)解密来自Bob的消息。
  8. 在步骤3到7中反转Alice在Bob中的角色,以便以其他方式进行通信。

    但是,当然,如果您向某人发送公钥,他们怎么能确定它实际上是您的钥匙,而不是我的钥匙?如果您不亲自亲自出示并出示带照片的身份证件,这绝非易事。

    然后,您需要某种方法来验证来自Bob的(加密)消息是否未被修改(您可以减少一半,它仍然有效并且可以解密;当然还有其他更复杂的攻击) 。

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

答案 1 :(得分:0)

  

这就像有两对密钥,将一对公钥和私钥从另一对发送给用户,并将其余密钥保存到服务器。

这不是公钥基础设施的运作方式。你们每个人生成你自己的密钥对,以及交换公钥。

客户端使用服务器的公钥来加密服务器的数据,并验证从服务器收到的消息的签名。

服务器使用服务器的私钥来解密来自客户端的消息并签署发送到客户端的消息。

客户密钥对的反向操作是相同的。