【发布时间】:2017-08-24 00:08:58
【问题描述】:
当我们谈论保护 iOS 应用程序时,我们经常忘记保护最关键的敏感信息,例如机密、密钥、令牌、加密密钥。此信息存储在 iOS 二进制文件中。因此,您的服务器端安全协议都不会为您提供帮助。
有很多建议我们不应该将此类信息存储在应用程序中,而应存储在服务器中并通过 SSL 安全 Web 服务调用获取。但这并非适用于所有应用程序。例如。如果我的应用程序根本不需要 Web 服务。
在 iOS 应用中,我们有以下选项来存储信息。
- UserDefault:不适合这种情况
- String 常量:不适合这种情况。可以反转 工程师检索或仅使用 strings command
- 安全数据库:存储在安全和加密的数据库中。 但同样有责任保护数据库用户名和密码。
- KeyChain:最好存储关键信息。但我们无法在安装应用程序之前保存信息。要存储在钥匙串中,我们首先需要打开应用程序,从某个源读取并存储在钥匙串中。也不适合我们的情况。
- 自定义哈希字符串常量:不直接使用来自服务提供商(mixpanel、paypal)的密钥、令牌、密钥,而是使用自定义密钥中该信息的哈希版本。这也不是完美的解决方案。但是在黑客攻击过程中增加了复杂性。
请为这个问题发送一些很棒的解决方案。
【问题讨论】:
-
我不知道没有服务器参与的解决方案。最后,您总是需要某种秘密(私钥、秘密哈希等)来解密您在应用程序中输入的任何信息。我知道确保此信息到达您的应用程序并且只有您的应用程序使用 Apple 推送通知的唯一方法,因为该服务保证只有受信任的端点可以接收您的有效负载。不幸的是,这需要用户为您的应用启用推送通知。
-
可以是一种选择。
-
如果 iOS 和 Android 为此提供了一个本地工具(例如,应用从您作为开发人员可以控制的应用商店获取的额外加密有效负载),这将是很好的,只能通过以下方式解密应用程序本身,无法通过二进制包访问。
-
这就是我所期待的。顺便说一句,到那时我们正在制作不安全的应用程序。
-
也许这可行?将秘密作为免费的应用商店托管的应用内购买内容提供给您的应用。当它被交付(由应用商店安全地,仅限于非越狱设备)到应用程序时,将其转移到钥匙串中。专业人士:最初分发时它不在您的应用程序中,因此更难发现,应用商店需要未越狱的设备。缺点:很难快速更改所有安装的密码,即使是免费的应用商店购买也可能需要用户身份验证,这对用户体验来说很麻烦。
标签: ios iphone data-security app-secret