iOS应用程序的安全设计

iOS应用程序的安全设计,ios,web-services,security,post,Ios,Web Services,Security,Post,我很难确定以下场景的最佳方法 我的应用程序发布到我的web服务 POST URL包括几个参数,包括设备信息+共享秘密 如果共享机密正确,则设备存储在我的数据库中 目前,这个共享秘密是在应用程序中硬编码的,并且通过SSL连接到我的web服务 这显然限制了人们发现共享秘密和滥用我的web服务 然而,这种方法并不像我希望的那样安全,因为有可能解码我的应用程序等并获取秘密 与共享秘密方法相比,有没有更好的方法来实现这一点?使用本地密钥时,几乎所有安全方法都可能被某些人以某种方式泄露。当然,这并不意味

我很难确定以下场景的最佳方法

  • 我的应用程序发布到我的web服务
  • POST URL包括几个参数,包括设备信息+共享秘密
  • 如果共享机密正确,则设备存储在我的数据库中
目前,这个共享秘密是在应用程序中硬编码的,并且通过SSL连接到我的web服务

这显然限制了人们发现共享秘密和滥用我的web服务

然而,这种方法并不像我希望的那样安全,因为有可能解码我的应用程序等并获取秘密


与共享秘密方法相比,有没有更好的方法来实现这一点?

使用本地密钥时,几乎所有安全方法都可能被某些人以某种方式泄露。当然,这并不意味着我们根本不需要付出任何努力。 如果有人下载你的应用程序,可以通过

但是,如果除了将密钥放入应用程序二进制文件之外,没有其他方法,那么您将得到一个(较弱的)替代方案,通常称为

有很多方法可以做到这一点,你可能会在互联网上找到很多关于这个话题的讨论,所以这里只是一些想法:

  • 将密钥拆分为多个类并贯穿整个代码
  • 将你的密钥伪装成可以在你的应用程序中正常使用的字符串
  • 在启动时散列一些数据或代码段,并将它们包含在密钥中
  • 同时使用上述所有方法
甚至还有一些框架,比如,可以帮助您实现逻辑


请记住,最好的方法始终是
不要在应用程序二进制文件中硬编码一个密钥
,而是以某种方式从您的服务器“加载”密钥,例如计算密钥…

当您允许人们下载并执行应用程序时,您就是在给他们目标代码。因此,没有任何解决方案是完全安全的,因为您必须以某种方式将“秘密”放入您的程序中,否则程序将无法运行。谢谢Alexander。关于你的最后一条评论——如果我没有将密钥存储在应用程序二进制文件中,我怎么知道访问我的API的人是安装了我的应用程序的合法设备……或者是使用CURL之类的东西的欺骗者。。?如果可以从服务器检索机密,则可能任何设备/pc/用户都可以获取API密钥…例如,您可以使用用户注册,并在用户成功管理后,与他(应用程序)共享机密。该应用程序将秘密存储在钥匙链中。当调用您的“安全api”时,应用程序可以(例如)将密钥链中的密钥放入授权头中,授权头中包括设备标识符和一些其他属性–看看使用hmac1_sha的amazon webservice概念: