我有一个关于核心数据加密的问题。我将一些敏感的用户数据存储在Core Data SQLite数据库中。临界值都是可变换的,我正在使用AES256对它们进行加密和解密,包括每个值的个人IV。加密密钥是用户选择的密码的SHA512散列。迄今为止这工作得很好。核心数据加密
现在关于用户密码。当用户启动应用程序时,他被要求输入密码。密码正在使用SHA512散列并存储在iOS钥匙串中。对于每个写入或读取操作,NSValueTransformer将从钥匙串中获取密码。如果应用程序正在关闭,我将从密钥链中删除密码哈希。
在我的核心数据库中,我有一个特殊的实体,它有一个随机数!= 0,因为它只是一个值。要测试用户是否输入了正确的密码,我获取该实体并阅读该编号。如果是=! 0,我知道密码是正确的,因为当解密失败时,NSValueTransformer总是返回0.
现在我的实际问题:你认为这是一个好的加密方法吗?如果输入的密码正确,你还会测试其他什么?
我有点担心,在应用程序运行时将密码哈希存储在钥匙串中会让所有事情变得更慢,因为NSValueTransformer必须始终访问钥匙串。将密码散列保存在内存中是否足够安全,所以在应用程序关闭时它会被删除?
你能说明你的意思吗?“使用随密钥加密的随机生成的加密密钥和基于密码的密钥加密密钥?”我正在寻找加密我的核心数据存储的一些字段,并且正在寻找一个生成用于执行加密的密钥的最佳实践。我同意以密码为基础是没有道理的,因为它可以改变。 – 2013-04-23 05:35:41