2013-08-18 81 views
1

我目前正在设计一个分布式iOs游戏。它必须包含一种身份验证(用户名,密码对我认为,但请给我其他想法,如果你有)。我打算通过一个简单的Perl编码的RESTful API来实现它。客户端 - 服务器游戏安全架构

我知道这是一种经典的问题。我在网上看到很多帖子都在谈论如何安全地做到这一点。但是,太多的信息会影响其信息量的目标。所以,我有点失落。不过,我已经尽力了出点基本概念,即:

  • 使用SSL(因此使用HTTPS URL),它可以让你不要去想加密
  • 采用嵌入式私钥的服务器和共享客户端,但如何嵌入它们是一个问题!它允许使用HMAC并进行一种认证。
  • 忘记绝对安全(因为您使用默默无闻的安全性):如果任何人都可以通过反编译您的应用程序来破坏您的安全,那么您会遇到问题!

这里有几个问题:

  • 如何共享私钥?
  • 要发送给服务器的内容是什么?用户名/密码加密?一些API密钥?
  • 我是否有正确的方法(确保个人安宁的api)?

谢谢!

回答

1

首先,这是一个相当广泛的问题。所以它可能会因此而关闭。

尝试将问题分解为子问题/分音符

1)首先,也是最重要的,正如你所指出。没有绝对的安全。你应该定义什么是有价值的(你有什么保护)和反对谁,你想保护:

  • 未经授权的用户
  • 未经授权的用户使用你的应用程序的内部知识(逆向工程)
  • 授权(反向工程)

1)https是“必须”。正如你想到的那样,你不必担心隐私和完整性。

2)在大多数情况下,应用程序应发送用户名和密码。这个密码应该被服务器散列(不要忘了给它添加一些盐)并且与你的数据库中存储的散列进行比较。

3)我不认为你需要共享客户端和服务器之间的私钥有以下几个原因:

  • SSL确保隐私(所以没有人可以窃听)
  • 加密任何参数的使用硬编码的共享密钥不会有太大帮助(它可能会被逆向设计并从您的应用中提取)
+0

谢谢您的回答。是的,我知道我的问题太广泛了。对不起!您如何建议我将用户名/密码对发送到服务器:使用SSL的简单GET请求?还是经典的http摘要认证?这里有安全问题吗?并且我必须发送凭证与每个请求或为下一个请求设置一张票的种类。 – user1553136

+0

我会说,这取决于你的服务器端。看看你的框架中有什么可用的,并使用它(不要重新发明自行车)。很常见的方法是发布长寿命的安全cookie(一般来说 - 一张票),它用于所有以下请求。 –