在DefaultConfiguration中存储加密密钥是否安全?
问题描述:
My Realm db已加密。 encryptionKey存储在Keychain中。什么是更安全的方式来管理这个关键?在DefaultConfiguration中存储加密密钥是否安全?
目前我打电话的方法谁设置了默认配置(schemaVersion,migrationBlock,fileURL等和encryptionKey以及)从application(application:didFinishLaunchingWithOptions:)
,之前任何境界将被实例化。后来Realm在整个应用程序中通过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在运行时存储在哪里以及从中挤出密钥有多简单?
还是最好的办法,是从钥匙扣上的每个领域实例化要求的encryptionKey,放入定制配置,这将只在领域实例的生命存在于内存中?就像这样:
// 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)
答
它是安全投入的encryptionKey到defaultConfiguration? defaultConfiguration在运行时存储在哪里以及从中挤出密钥有多简单?
的密钥被存储在领域配置存储器中。如果你想知道它是多么容易为一个单独的进程打破了iOS沙盒,检查您的应用程序的存储和提取,关键...让我们只说这将是一个利用最高的操作系统学位和苹果将在他们手中有一个公关灾难。
所以真的,你应该做的是您最方便的。只要你不在磁盘上以明文形式保存加密密钥,你就会像实际上一样安全。