6

在我的 iOS4+ 应用程序中,我在多个地方使用 AES 加密,整个应用程序必须非常安全。为了做到这一点,我必须在这个应用程序中硬编码几个密钥,然后当我需要加密某些东西时随机选择这些密钥......

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

#define SecretKeyString @"febd9a24d8b65c1c787d50a4ed3619a9"

如果用户在安装此应用程序的情况下越狱 iPhone,他不能得到那些硬编码的密钥吗?我怎样才能最有效地隐藏它们?

感谢您的任何建议...

4

2 回答 2

5

其他应用程序所做的是要求用户“登录”才能使用该应用程序。然后,您使用他们的用户 ID/密码作为密钥来加密密钥或使用安全的 Web 服务来获取该用户的密钥。

如果您使用#defineNSString 甚至 NSString,则有多种方法可以猜测密钥。显然,您必须真正愿意花费大量时间在编译后的代码中找到这些密钥,但是根据您正在寻找的安全级别和您要防范的人,这可能是一个问题。

于 2012-05-10T13:41:29.190 回答
2

我建议通过混淆阅读一些关于安全性的文章,这本质上是你想要实现的(至少所有建议都是这么说的)并且最终是不安全的。

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

其次,输入验证将是您的应用程序需要的下一个最重要的安全功能。如果您不验证所有输入(从用户输入的信息到网络响应到通过方案启动的应用程序),那么全面加密就没有任何意义。

最后,在必要的情况下,安全加密只有在您不进行硬核(或混淆您的硬编码)时才是安全的。mprivat 是正确的,您需要使用用户生成的数据(登录)、公钥加密(因此只有未包含的私钥可以解密)或使用 SSL 进行传输的服务器端加密。

我还要说,如果您的安全数据仅在您使用钥匙串 API 的设备上维护,特别是确保您使用要求用户登录以进行项目检索的表单。

如果您在设备上加密的数据在设备和另一台设备(如服务器)上都被解密,那么您就有一个基本的架构缺陷。加密解密只能是客户端-客户端(也就是用户的设备)或客户端-服务器(可以是用户设备到服务器或服务器到用户设备),这一点非常重要。将两者混合会导致漏洞。我在这里特别指的是相同的加密机制,对客户端-客户端与客户端-服务器使用单独的加密很好(有时是必要的)。

对于那些需要编写安全代码的人来说,这是必读的:http: //www.amazon.com/gp/aw/d/0735617228

于 2012-05-10T14:22:30.283 回答