在iOS中保存encryption密钥的安全方法

在我的iOS4 +应用程序中,我在几个地方使用AESencryption,整个应用程序必须非常安全。 为了做到这一点,我必须硬编码在这个应用程序中的几个键,然后随机挑选,当我需要encryption的东西…

我的问题是如何存储这些私钥? 使用NSString它们进行硬编码是否安全? 要么

 #define SecretKeyString @"febd9a24d8b65c1c787d50a4ed3619a9" 

如果用户安装了这个应用程序越狱iPhone,他不能得到这些硬编码的密钥? 我怎样才能最有效地隐藏它们?

感谢您的任何build议…

其他应用程序要做的是要求用户“login”才能使用应用程序。 然后,使用其用户名/密码作为密钥来encryption密钥或使用安全的Web服务来获取该用户的密钥。

如果你使用#define甚至是NSString,有办法猜测这些键。 显然,你必须真正愿意花费大量时间在编译代码中find这些密钥,但是根据你所寻找的安全级别以及你正在防范的人,这可能是一个问题。

我build议阅读一些关于安全性的文章,这些文章本质上就是你想要实现的(至less这就是所有的build议都是这样说的),并且最终是不安全的。

但是,iOS的沙盒是您的第一个也是最有效的安全forms。

其次,inputvalidation将是您的应用将需要的下一个最重要的安全function。 如果不validation所有input(从用户input的信息到通过scheme启动应用程序的networking响应),全部encryption意味着什么都没有意味着什么。

最后,安全的encryption,如果你不硬核(或混淆你的硬编码),只有在必要的时候才是安全的。 mprivat是正确的,您将需要使用用户生成的数据(login),公钥encryption(所以只有非包含的私钥可以解密)或使用SSL传输的服务器端encryption。

我还想说,如果您的安全数据只能在使用Keychain API的设备上进行维护,并且特别要确保使用要求用户login才能进行项目检索的表单。

如果在设备上和在另一台设备(如服务器)上解密的设备上有数据encryption,则存在基本的体系结构缺陷。 encryption解密只能是客户端客户端(也就是用户的设备)或客户端服务器(可以是服务器的用户设备或用户设备的服务器)是非常重要的。 混合两个结果的漏洞。 在这里,我特别指的是相同的encryption机制,对客户端客户端和客户端服务器使用单独的encryption是很好的(有时是必要的)。

以下是需要编写安全代码的人员必读: http : //www.amazon.com/gp/aw/d/0735617228