验证连接客户端是否正确

时间:2014-02-25 22:21:45

标签: security

我正在构建一个桌面应用程序,它连接到Web服务器并通过基于套接字的API进行通信。我想确保我只与我的应用程序通信,而不是任何第三方黑客。通过https加密通信。另外,私钥/公钥对用于认证。基本上,时间密钥,私有密钥和公共密钥被一起散列并使用服务器的当前时间和公钥发送到服务器。

我担心如果其他人对应用程序进行反向工程,他们会发现散列函数,连接url和私钥,因为通常字符串以明文形式存储在已编译的应用程序中。

我有两点想法来缓解这个问题:

  • 使用一系列数学运算创建一个生成特定于应用程序的私钥的函数
  • 创建一个复杂的(长)秘密,然后将该秘密的一些模数发送到服务器(如Diffie-Hellman密钥交换算法)。

我是否在正确的轨道上?如何保密密钥?

1 个答案:

答案 0 :(得分:1)

加密不是正确的解决方案。无论您如何隐藏实施,具有足够时间的坚定的攻击者都可以对其进行逆向工程。

至少,攻击者可以确定加密/散列的位置,并在此之前转储进程的内存以检查明文中的秘密。

你最好的选择是a)混淆代码并添加反调试防御(不完美,但它会阻止脚本小子并减慢确定的攻击者)和b)强化尽可能多的服务器 - 侧

基本上,您永远不能依赖客户端,因为您无法控制它。最好的办法是确保任何关键处理都在服务器端完成,这样自定义客户端就无法做任何恶意的事情。

例如,如果您正在制作多人国际象棋游戏,您希望客户端只提交基本操作(移动),并在服务器上跟踪电路板状态。如果客户端被黑客攻击并不重要,因为如果提交了非法操作,则只返回错误。