0

我想创建一个游戏应用程序,因为我希望客户端将分数和其他应该加密的信息发送到服务器。

我知道有一种方法可以mcrypt使用公钥和私钥加密数据。所以客户端的应用程序将加密,但我是唯一能够解密它的人。我没有更多信息可以继续,我只想知道粘贴数据的最安全方法。

到目前为止我所理解的是这个例子:

如果我有:?username=foo&score=50&msg=hello
我可以将其加密为:(msgencrypted=fgus9g8uywe978ygt7923y5235sdfdsadfsd示例)

并且只有使用我服务器上的特定密钥才能解密它。

同样,我只是想找到向用户隐藏数据的最佳方法,这样他就无法解密它。

这意味着如果我加密了一条消息......该消息将无法发送两次。

因此,如果用户使用 firebug 查看发送的请求并尝试再次发送,则该消息将无效。我想我可以将它记录在数据库中。但如果有这样的方法,那就太好了。

我正在使用 PHP 5.4。

4

1 回答 1

0

您应该使用PKI(公钥基础设施)。公钥密码术(AKA 非对称密码术)是指一种密码算法,它需要两个单独的密钥(密钥对),其中一个是秘密(或私有),另一个是公钥。

您的客户端可以访问公钥并使用公钥加密消息,只有有权访问私钥的服务器才能解密消息。假设您可以使用 RSA 算法加密分数和其他信息并将其发送到服务器。这样可以防止参数篡改。您也可以使用MAC(消息验证码)来防止篡改。

但我建议 POST 数据而不是使用 GET;因为通常 URL 将记录在 Web 服务器或 ISP 中。因此,不将机密加密数据放在查询字符串中是合理的。

为了防止重放攻击,您可以使用计数器并将其与参数一起发送。在服务器端,您存储最后一个计数器的值(例如 123)。当您收到其计数器值等于或小于存储值的请求时,您必须拒绝该请求。例如,当您收到计数器值 <=123 的请求时。由于您正在加密所有参数,因此也没有人可以篡改计数器值。

实际上POS终端使用类似的方法来防止重放攻击。如果您想要更高级别的安全性,请尝试阅读有关 POS 交易安全性以及如何保护交易免受重放/中间人攻击的信息。

于 2014-04-15T14:14:53.063 回答