0

我对密码学还是很陌生,所以请原谅任何新手错误。我确信这已被问过几次,但我不知道要搜索什么。

所以,我有一个服务器,它通过 http 从我的智能手机接收命令。目前,所有内容都使用 AES 和密码加密,可以在服务器的配置中设置。

问题是,当有人拦截我的请求时,他无法解密命令,但他可以将加密的命令重新发送到我的服务器。

我想象的两个解决方案是:

  • 加密命令中的时间戳,因此它们在一段时间后无效,但缺点是仍然(在该期间内)可以重新发送命令。
  • 服务器向客户端发送一些随机内容,客户端必须对其进行加密并将加密的内容发回(我认为这会杀死我的 http 方法)

我确信有更好的方法(也许是另一种算法?),欢迎提供任何帮助。

同样,我在密码学方面没有太多经验,编程只是一种爱好:D

4

2 回答 2

4

请不要试图重新发明安全通信。SSL 和 SSH 是两个使用非常广泛且非常好的安全通信协议,它们都将解决重放以及您尚未想到的许多其他安全问题(重新排序、删除消息、从一个地方到另一个地方,等等)。

于 2013-10-08T17:17:02.187 回答
1

看来您需要加密和身份验证。

如其他人所述,请仅使用 SSL (HTTPS) 对 HTTP 请求进行加密。SSL 在加密方面非常出色。SSL 可以进行身份​​验证,但对于智能手机用户的身份验证有更好的解决方案。

对于用户的身份验证,有很多选项。对于智能手机连接,我建议您也不要发明自己的身份验证协议,而是使用久经考验的解决方案,例如OpenIDOATH。有很多库支持这一点。使用此类协议打开了使用现有 Google、Facebook、Twitter 帐户等对用户进行身份验证的可能性。

于 2013-10-09T00:35:18.017 回答