gpt4 book ai didi

iphone - iOS:在我的代码中硬编码 AES key 是否安全?

转载 作者:可可西里 更新时间:2023-11-01 03:30:46 25 4
gpt4 key购买 nike

我有一个项目需要用 AES 加密一些数据。但是,我在我的项目中对 AES key 进行硬编码,如下所示:

NSString *passwd = @"someStringAsKey";
NSData *encryptedData = [Encrypter encrypteData:unencryptedData];

如果有人想破解我的二进制文件以找到我硬编码的 AES key ,这很容易吗?如果是,存储 AES key 的更好方法是什么?

编辑: key 用于加密和解密一 block 数据,应用程序从服务器下载数据,然后应用程序对其进行加密并将加密后的数据保存在磁盘上。此 key 在每个设备的基础上使用,这意味着每个设备都可以拥有自己的 key ,只要每次应用程序运行时,它都知道如何生成 key 。

编辑 2:数据下载过程受到这样的保护:客户端每次登录时生成一个随机的私钥/公钥对。它将公钥发送给服务器,服务器使用公钥加密AES key ,然后将加密后的AES key 发送给客户端。客户端解密 AES key 并将其放入内存。然后客户端和服务器传输由该 AES key 加密的数据。

我的目标是保护磁盘上的数据不被黑客解密。我假设黑客能得到的是我的二进制图像和磁盘上的数据。黑客也可以在他自己的设备上运行我的应用程序并分析内存。

我不需要保护这种攻击:黑客很聪明,他写了一个病毒在越狱设备上运行,病毒可以分析我的应用程序的运行内存来搜索内存中的一些 key 。所以我们不用担心网络传输的安全问题。

最佳答案

是的,它很可能很容易找到。事实上,不可能以完全安全的方式在本地存储 key 。您能做的最好的事情就是混淆视听,让潜在的攻击者不值得为此付出努力。比如把密码存到一个有一堆垃圾字母的文件里,在内存中挑出正确的。说密码是“密码”:

efgwhipbuobgweuaegiwhipsiphshipwgiewhp< b>oneifgwnpripndpad(我没有做任何广泛的研究,但我认为Blowfish 使用类似的内存缓冲区上的技术)

您可以将这样的大字符串存储为您想要的任何编码(晦涩的编码会更好),然后只需挑选并选择您想要的位。我能看到的唯一问题是你必须在某一时刻将它存储在内存中,如果它在内存中,那么据我所知,有决心的人可以使用 GDB 或 LLDB 获得它。为了使这更烦人,请避免将密码作为 NSString 存储在内存中(尽量使用 NSData)。不过,这确实值得。不幸的是,最终,您的数据在 iOS 设备上永远不会安全。

最好的情况是这个文件在服务器上。您下载该文件,对其施展魔法,将密码存储在钥匙串(keychain)中,然后删除该文件。从此以后,只需使用钥匙串(keychain)值即可。

请注意,我不是安全专家,这只是我想到的第一个想法。

编辑 我在假设您已预先加密数据的情况下工作。如果您的应用程序正在加密来自服务器的数据,那么是什么阻止了攻击者简单地从服务器下载数据呢?好吧,假设您为此设置了一些系统,您可以像其他一些答案所说的那样生成一个 key ,然后将其以混淆的形式存储在钥匙串(keychain)中。这样即使攻击者掌握了它,他们也暂时不知道如何处理它。

关于iphone - iOS:在我的代码中硬编码 AES key 是否安全?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15194898/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com