【问题标题】:Verify connecting client is correct application验证连接客户端是正确的应用程序
【发布时间】:2014-03-28 11:06:00
【问题描述】:

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

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

我有两个想法可以缓解这种情况:

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

我在正确的轨道上吗?如何保密?

【问题讨论】:

  • 如果客户的私钥被泄露,则无法采取任何措施来防止假冒。无论如何,您不应该相信客户的输入。

标签: security


【解决方案1】:

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

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

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

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

例如,如果您正在制作多人国际象棋游戏,您希望客户端只提交基本动作(移动),然后在服务器上跟踪棋盘状态。客户端是否被黑客入侵无关紧要,因为如果提交了非法操作,您只会返回错误。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-10
    • 2011-12-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-08
    相关资源
    最近更新 更多