假设我需要从 iPhone 应用程序访问 Web 服务。此 Web 服务要求客户端对 HTTP 请求进行数字签名,以证明应用程序“知道”共享密钥;客户端密钥。请求签名存储在 HTTP 标头中,请求只是通过 HTTP(不是 HTTPS)发送。
此密钥必须始终保密,但需要由 iPhone 应用程序使用。
那么,鉴于您一直被告知永远不要在客户端存储任何敏感信息,您将如何安全地存储此密钥?
普通用户(99% 的用户)会很乐意使用该应用程序。会有人(敌人?)想要该秘密客户端密钥,以便通过冒充的方式对服务或客户端密钥所有者造成伤害。这样的人可能会越狱他们的手机,访问二进制文件,运行“字符串”或十六进制编辑器并四处寻找。因此,仅将密钥存储在源代码中是一个糟糕的主意。
另一个想法是将密钥存储在代码中,而不是字符串文字,而是存储在从字节文字创建的 NSMutableArray 中。
一个人可以使用钥匙串,但由于 iPhone 应用程序永远不必提供密码来存储钥匙串中的东西,我担心有权访问应用程序沙箱的人可以并且将能够简单地查看或简单地解码其中的项目。
编辑 - 所以我读到了关于钥匙串的内容:“在 iPhone OS 中,应用程序始终可以访问自己的钥匙串项目,而无法访问任何其他应用程序的项目。系统为钥匙串生成自己的密码,并存储密钥以任何应用程序都无法访问的方式在设备上。”
所以也许这是存储密钥的最佳位置......如果是这样,我如何将预先输入到应用程序钥匙串中的密钥发送?那可能吗?否则,如果密钥不在源代码中,您如何在首次启动时添加密钥?唔..
编辑 - 在http://bugreport.apple.com提交错误报告 # 6584858
谢谢。