TCP安全连接 - 仅通过我的客户端

时间:2011-07-07 19:02:32

标签: security tcp network-programming

所以我的服务器和客户端之间有这个TCP连接,任何人都可以连接到我的服务器。但我想确保客户端真正使用我的客户端应用程序,而不仅仅是伪造来自虚假TCP客户端的消息。如何做到这一点,检查连接是否真的来自我的游戏客户端?

谢谢!

修改 如果我要使用TLS,我可以解决这个问题吗?

4 个答案:

答案 0 :(得分:2)

可能没有完整的问题解决方案,因为无论你做什么,另一方可能总是拿你的程序,在受监控的环境中运行它,操纵运行时数据并让它使用它的“安全”网络协议。由于客户端应用程序无法控制,因此您无法确定它是您自己的程序。

宝贝示例:我的应用程序运行您的应用程序并将数据回放到您的服务器,并将您的响应转发回应用程序。你怎么知道?

也就是说,使用SSL并将客户端的私钥硬编码到应用程序中可能是一种非常有前途的“99%”方法 - 您可以尝试使用一些技巧并使其难以找到(例如,看看Skype如何做到这一点) )。如果您还在程序中构建完整性检查,以确定是否有人在操作内存或调试您的程序,您可以尝试让潜在的对手更难一点。 (但请注意,您将始终 将私钥与您的应用程序一起发送,因此发现它并非真正安全。)

答案 1 :(得分:1)

其他人已经提出了有用的问题答案,但我会提出另一种方法。重新检查您的要求。

问自己为什么您想知道客户端程序的身份。是否可以信任您的客户端程序而不是您信任第三方客户端程序?

如果您需要信任已经发送给客户的软件的身份或完整性,我声称您的安全模型已损坏。一旦软件在客户端的PC上运行,即使您最初编写它,也应该认为它是邪恶的。

任何状态,任何命令,来自网络的任何数据都必须在依赖之前进行检查。

答案 2 :(得分:0)

我的默认回复是使用质询/响应身份验证。

连接后,从服务器向客户端发送随机数
然后,客户端使用散列/密钥/ ....响应消息计算并将其返回给服务器

如果响应与服务器计算相匹配,则您的真实性机会更好。请注意,您的客户的逆向工程师会将此方法置于欺诈之下。

答案 3 :(得分:0)

您可以使用公钥/私钥对来验证您是否是您所说的人。

http://en.wikipedia.org/wiki/RSA#Signing_messages