如何在iOS/Cocoa应用程序中安全地包含密钥/签名

mxc*_*mxc 23 security cocoa objective-c ios

我想在iOS应用程序中包含一个密钥,以便应用程序可以向某个服务器"证明"请求来自应用程序本身而不是其他系统.我知道简单地将密钥硬编码到代码本身是非常容易的,因为任何人都可以越狱他们的手机并将GDB附加到我的应用程序的进程以获取密钥.有没有更安全的方法来做到这一点?是否有可能使密钥充分混淆,使其几乎不可能?

我认为这与序列号验证类似.不幸的是,这似乎经常被轻易破解.这有什么解决方案吗?

与我的服务器的所有通信都将通过HTTPS完成,因此至少嗅探/中间人攻击不应该是一个问题.

谢谢,M

nat*_*bro 20

我一直在想这个问题,并且基于这样一个前提,我想到了几个可能的解决方案:你想要的是将用户/密钥传递到你的应用程序的KeyChain(iOS和硬件非常强大的安全性)和根据需要将其拉出来使用:

  1. 使用特定于应用程序的iCloud ubiquity-container将秘密分发到您的应用程序.这些数据应该从备份到本地计算机中排除,据称使用硬件级安全性安全地传输到非越狱应用程序.专业人士:它不是在您的应用程序初始分发,因此更难发现,iCloud需要一个非越狱设备,您可以更新您的秘密,它将同步到您的所有应用程序.con:它不是真正的安全KeyChain,这意味着如果iCloud同步然后设备被越狱,它可能会被嗅出文件系统.

  2. 作为免费的应用商店托管的应用内购买内容,将您的应用秘密传递给您的应用.当它(通过应用商店安全地,仅通过非越狱设备)传送到应用程序时,将其传送到钥匙串.专业人士:它不是在您的应用程序初始分发,因此难以发现,app-store需要一个非越狱设备.con:更难以快速更改所有安装的秘密,即使是免费的App-store购买也可能需要用户身份验证,这是一个麻烦的用户体验.

一个理想的解决方案是,如果我们能够以某种方式将秘密(KeyChain键/值字典)捆绑到app中,当我们提交它以进行分发时,app-store会剥离这些并将它们安全地传送到OS以便注入KeyChain期间安装,但从与桌面计算机和iTunes同步的普通应用程序包中带外,它们不会出现在二进制文件中.除非Apple添加这样的功能,我认为没有真正可靠的解决方案.

  • 我还没有在iOS7中找到任何其他途径可以做到这一点(但并没有深入研究)。我确实发现,由于iCloud脆弱,使用iCloud分发此类数据在初次运行时可能会很尴尬。一旦获得了价值,这将是一个很好的解决方案,但是您无法确定它会在多久后进入设备。真希望苹果公司能增加一些支持。 (2认同)

小智 5

我担心这样做是不可能的.但据我所知,苹果将确保没有其他应用程序欺骗你的应用程序的秘密.如果是越狱手机,那么用户将承担全部责任,可能的损害应仅限于越狱手机用户的数据.

  • +1"for***无法保证这样的东西." 如果你将"秘密"放入应用程序,那就不是什么秘密了.这就像一条狗盖骨头.一点点挖掘就会发现......特别是草地看起来很滑稽的地方. (4认同)