【发布时间】:2016-12-06 09:07:44
【问题描述】:
我的 Realm 数据库已加密。加密密钥存储在钥匙串中。管理此密钥的更安全方法是什么?
目前我正在调用从application(application:didFinishLaunchingWithOptions:) 设置defaultConfiguration(schemaVersion、migrationBlock、fileURL 等和encryptionKey)的方法,然后实例化任何Realms。稍后,Realms 在整个应用程序中使用此 defaultConfiguration 实例化。
像这样:
// AppDelegate
var config = Realm.Configuration.defaultConfiguration
config.schemaVersion = 5
config.migrationBlock = { migration, oldSchemaVersion in ... }
config.encryptionKey = KeychainManager.getRealmEncryptionKey()
Realm.Configuration.defaultConfiguration = config
// Somewhere else, later
Realm()
将 encryptionKey 放入 defaultConfiguration 是否安全?运行时 defaultConfiguration 存储在哪里,从中提取密钥有多容易?
或者更好的方法是在每个 Realm 实例化时从 Keychain 请求加密密钥,并将其放入自定义配置中,该配置仅在 Realm 实例的生命周期内出现在内存中?像这样:
// AppDelegate
var config = Realm.Configuration.defaultConfiguration
config.schemaVersion = 5
config.migrationBlock = { migration, oldSchemaVersion in ... }
Realm.Configuration.defaultConfiguration = config
// Somewhere else, later
var configTemp = Realm.Configuration.defaultConfiguration
configTemp.encryptionKey = KeychainManager.getRealmEncryptionKey()
Realm(configuration: configTemp)
【问题讨论】:
标签: ios swift security realm keychain