mxc*_*mxc 23 security cocoa objective-c ios
我想在iOS应用程序中包含一个密钥,以便应用程序可以向某个服务器"证明"请求来自应用程序本身而不是其他系统.我知道简单地将密钥硬编码到代码本身是非常容易的,因为任何人都可以越狱他们的手机并将GDB附加到我的应用程序的进程以获取密钥.有没有更安全的方法来做到这一点?是否有可能使密钥充分混淆,使其几乎不可能?
我认为这与序列号验证类似.不幸的是,这似乎经常被轻易破解.这有什么解决方案吗?
与我的服务器的所有通信都将通过HTTPS完成,因此至少嗅探/中间人攻击不应该是一个问题.
谢谢,M
nat*_*bro 20
我一直在想这个问题,并且基于这样一个前提,我想到了几个可能的解决方案:你想要的是将用户/密钥传递到你的应用程序的KeyChain(iOS和硬件非常强大的安全性)和根据需要将其拉出来使用:
使用特定于应用程序的iCloud ubiquity-container将秘密分发到您的应用程序.这些数据应该从备份到本地计算机中排除,据称使用硬件级安全性安全地传输到非越狱应用程序.专业人士:它不是在您的应用程序初始分发,因此更难发现,iCloud需要一个非越狱设备,您可以更新您的秘密,它将同步到您的所有应用程序.con:它不是真正的安全KeyChain,这意味着如果iCloud同步然后设备被越狱,它可能会被嗅出文件系统.
作为免费的应用商店托管的应用内购买内容,将您的应用秘密传递给您的应用.当它(通过应用商店安全地,仅通过非越狱设备)传送到应用程序时,将其传送到钥匙串.专业人士:它不是在您的应用程序初始分发,因此难以发现,app-store需要一个非越狱设备.con:更难以快速更改所有安装的秘密,即使是免费的App-store购买也可能需要用户身份验证,这是一个麻烦的用户体验.
一个理想的解决方案是,如果我们能够以某种方式将秘密(KeyChain键/值字典)捆绑到app中,当我们提交它以进行分发时,app-store会剥离这些并将它们安全地传送到OS以便注入KeyChain期间安装,但从与桌面计算机和iTunes同步的普通应用程序包中带外,它们不会出现在二进制文件中.除非Apple添加这样的功能,我认为没有真正可靠的解决方案.
小智 5
我担心这样做是不可能的.但据我所知,苹果将确保没有其他应用程序欺骗你的应用程序的秘密.如果是越狱手机,那么用户将承担全部责任,可能的损害应仅限于越狱手机用户的数据.