我几乎是密码学的新手,但我正在尝试加密一些数据并将其保存在 iOS 3 中的文件中,因为我不希望用户只是进入并编辑文件。在 iOS 3 中安全(相对)加密数据的正确方法是什么?我在网上找到的大多数文档都是针对 iOS 5 的。
任何帮助,将不胜感激!
谢谢,亚历克斯
我几乎是密码学的新手,但我正在尝试加密一些数据并将其保存在 iOS 3 中的文件中,因为我不希望用户只是进入并编辑文件。在 iOS 3 中安全(相对)加密数据的正确方法是什么?我在网上找到的大多数文档都是针对 iOS 5 的。
任何帮助,将不胜感激!
谢谢,亚历克斯
“正确”的做法是在 IOS 中使用 Apple 的钥匙串。不幸的是,正如这篇文章所说,这对于 IOs3 来说并不是那么安全。对于 ios4,它工作正常。
有人可能有一个付费的解决方案,但你很可能最终自己写一个。你会想要
使用密钥派生函数(例如PBKDF2 )从用户提供的密码中派生您的密钥。实际上,您需要派生两个密钥,因此您将使用两种不同的RANDOM盐运行它两次。
将 AES 与RANDOM IV 和您的派生密钥之一一起使用(这部分很重要,而我看到的所有示例代码都没有)。在密文中添加盐和 IV
对上述所有数据使用带有其他派生密钥的 hmac。预先设置。
要解密,使用带有密码和前置盐的密钥派生算法重新派生密钥,重新生成 hmac,获取生成密钥的 sha1 哈希值,并分别获取消息中密钥的 sha1 哈希值,并验证它们是否相同(不要直接直接比较 hmacs),然后使用另一个派生密钥和附加的 IV 解密数据。
这对用户来说是一种痛苦和烦恼,因为他们需要输入一个单独的密码,但是没有办法安全地做到这一点。如果您将密钥存储在 iPhone 上,则有人可以读取它并解密数据。是的,您可以加密密钥,但是您如何存储该密钥?
我不相信苹果对此有体面的客观 c 绑定,因此您需要使用通用的加密 c API。它记录在这里。似乎没用的 Objective-c API 记录在这里