我有一个项目,需要一些数据是加密的AES。但是,我在我的项目中硬编码AES密钥如下:
NSString *passwd = @"someStringAsKey";
NSData *encryptedData = [Encrypter encrypteData:unencryptedData];
如果有人想破解我的二进制文件来找到我硬编码的AES密钥,这会很容易吗?如果是的话,有什么更好的方法来存储AES密钥呢?
编辑:密钥用于加密和解密数据块,应用程序从服务器下载数据,然后应用程序对其进行加密并将加密数据保存在磁盘上。这个键是在每个设备的基础上使用的,这意味着每个设备都可以拥有自己的密钥,只要每次应用程序运行,它就知道如何生成密钥。
EDIT2:通过这种方式保护数据下载过程:客户机每次登录时都会生成一个随机的私钥对/公钥对。它将公钥发送到服务器,服务器使用公钥加密AES密钥,然后将加密的AES密钥发送给客户端。客户端解密AES密钥并将其放入内存中。然后由AES密钥加密的客户端和服务器传输数据。
我的目标是保护磁盘上的数据不被黑客解密。我认为黑客可以得到的是我的二进制图像和磁盘上的数据。此外,黑客可以在自己的设备上运行我的应用程序并分析内存。
我不需要保护这种攻击:黑客非常聪明,他写了一个病毒运行在越狱设备上,病毒可以分析我的应用程序的运行内存,以搜索内存中的一些密钥。因此,我们不需要担心网络传输的安全性。
发布于 2013-03-04 05:37:11
作为一个字符串,如果没有任何其他保护,那么在二进制文件中查找键就很简单了。一个人所需要的只是一个符号调试器,并且/或大致地了解一个键应该是什么样子(它应该有多大,以及有效值的范围)。
显然,iOS内置了一些安全内容,可以将敏感数据存储在恶意应用程序无法访问的范围内。问题是,其中很大一部分似乎是假设设备按预期运行。运行在越狱设备上的代码可能仍然可以访问大多数(如果不是全部)数据。
发布于 2013-03-04 05:42:36
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
在启动应用程序时只调用一次此方法,因此创建随机密钥:
-(NSString) generateKey{
char data[NUMBER_OF_CHARS];
for (int x=0;x<NUMBER_OF_CHARS;data[x++] = (char)('A' + (arc4random_uniform(26))));
return [[NSString alloc] initWithBytes:data length:NUMBER_OF_CHARS encoding:NSUTF8StringEncoding];
}
https://stackoverflow.com/questions/15194898
复制相似问题