我有一个关于核心数据加密的问题。我将一些敏感的用户数据存储在 Core Data SQLite 数据库中。关键值都是可转换的,我正在使用 AES256 对它们进行“动态”加密和解密,包括每个值的单独 IV。加密密钥是用户选择的密码的 SHA512 哈希。到目前为止,这非常有效。
现在关于用户密码。当用户启动应用程序时,系统会要求他输入密码。密码使用 SHA512 进行哈希处理并存储在 iOS 钥匙串中。对于每个写入或读取操作,NSValueTransformer 将从钥匙串中获取密码。如果应用程序正在关闭,我会从钥匙串中删除密码哈希。
在我的核心数据数据库中,我有一个特殊的实体,它有一个随机数!= 0,因为它是唯一的值。为了测试用户是否输入了正确的密码,我获取了这个实体并读取了这个数字。如果是=!0,我知道密码是正确的,因为当解密失败时 NSValueTransformer 总是返回 0。
现在我的实际问题是:您认为这是一种很好的加密方法吗?如果输入的密码正确,您将如何测试?
我有点担心在应用程序运行时将密码哈希存储在钥匙串中会使一切变慢,因为 NSValueTransformer 必须一直访问钥匙串。将密码哈希保存在内存中是否足够安全,以便在应用程序关闭时将其删除?