这是防止iPhone应用客户端欺骗声音的计划吗?

时间:2009-07-24 20:34:51

标签: iphone security https

我正在设计一个通过HTTP与服务器通信的iPhone应用程序。

我只希望应用程序,而不是任意HTTP客户端,能够POST到服务器上的某些URL。所以我将服务器设置为仅验证包含秘密令牌的POST,并设置应用程序以包含该秘密令牌。包含此令牌的所有请求都将仅通过HTTPS连接发送,因此无法进行嗅探。

你认为这种推理存在任何缺陷吗?例如,是否可以使用“字符串”,十六进制编辑器等从已编译的应用程序中读取令牌?当然,我不会将此令牌存储为.plist或其他纯文本格式。

欢迎提供替代设计的建议。

6 个答案:

答案 0 :(得分:3)

一般情况下,假设确定的攻击者无法发现在其物理控制下的设备上嵌入应用程序的密钥(并且可能是他拥有的那个),这是没有根据的。看看依赖于这种假设的所有破坏的DRM方案。

真正重要的是谁在试图获得关键,以及他们的激励是什么。销售针对不急于窃取的人群的产品。为您的产品定价,以便购买它比发现钥匙更便宜。为您的客户提供良好的服务。这些都是营销和法律问题,而不是技术问题。

如果嵌入了密钥,请使用一种方法,要求每个客户端自己发现密钥,例如为每个客户端要求不同的密钥。您不希望一个攻击者可以发现密钥并将其发布,允许每个人访问。

iPhone does provide the "KeyChain" API,可以帮助应用程序隐藏设备所有者的秘密,无论好坏。但是,任何事情都是可以破解的。

答案 1 :(得分:1)

我理解它的方式,是的,可以通过这种或那种方式从应用程序中检索密钥。由于它的本质,几乎不可能在Objective-C运行时隐藏某些东西。据我所知,只有Omni用序列号管理它,显然是将关键代码保存在C(Cocoa Insecurity)中。

可能需要做很多工作(我不知道实现起来有多复杂),但您可能需要考虑使用推送通知每小时向程序发送一个有效期为一小时的身份验证密钥。这将大大减轻验证它是Apple的应用程序的问题。

答案 2 :(得分:0)

我建议根据发送的数据和您的应用和服务器知道的密钥添加一些校验和(md5 / sha1)。

答案 3 :(得分:0)

可以对应用程序进行反汇编,以便找到您的密钥。

答案 4 :(得分:0)

需要更多信息来确定方法是否合理。一个资产受到保护而另一个资产不健全可能是合理的,所有资产都是基于资产价值和资产被披露的成本。

早些时候的几张海报都提到了这样一个事实:设备上的任何东西都可以被坚定的攻击者揭示出来。因此,您所能做的最好的事情就是确定资产的价值,并为攻击者提供足够的障碍,使攻击成本超过资产价值。

可以为您的方案添加SSL的客户端证书。人们可以将这个证书和令牌的密钥埋在一些混淆代码中。人们可能会使用公钥/私钥密码术来制定一个方案来进一步模糊令牌。可以实现一个挑战/响应协议,该协议具有时间框响应时间,其中服务器挑战应用程序,并且应用程序在断开连接之前有X毫秒的响应时间。

障碍的数量和复杂程度都取决于资产的价值。

杰克

答案 5 :(得分:0)

您应该查看Entrust Technologies(www.entrust.com)产品系列,了解与各种细节相关的双因素身份验证(例如,设备,IMEI,应用程序序列号,用户ID等)