My Realm数据库已加密。 encryptionKey存储在Keychain中。管理此密钥的安全方法是什么?
目前我正在调用方法,在实例化任何领域之前,从application(application:didFinishLaunchingWithOptions:)
设置defaultConfiguration(schemaVersion,migrationBlock,fileURL等以及encryptionKey)。稍后,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请求encryptionKey并将其放入自定义配置中,该配置仅在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)
答案 0 :(得分:0)
将encryptionKey放入defaultConfiguration是否安全? defaultConfiguration在运行时存储在哪里以及从中挤出密钥有多容易?
密钥存储在Realm配置的内存中。如果你想知道一个单独的进程突破iOS Sandbox的可能性,请检查应用程序的内存并从中提取密钥...让我们说这将是对最高操作系统的利用学位和苹果公司将面临公关灾难。
所以,你应该做对你最方便的事情。只要您没有将加密密钥保存在磁盘上的明文中,您就会像实际情况一样安全。