我的领域数据库已加密。 encryptionKey存储在钥匙串中。有什么更安全的方法来管理此密钥?

当前,我正在调用的方法从application(application:didFinishLaunchingWithOptions:)设置defaultConfiguration(还设置了schemaVersion,migrationBlock,fileURL等,以及encryptionKey),然后再实例化任何领域。稍后,在整个应用程序中使用此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()

将加密密钥放入defaultConfiguration是否安全? defaultConfiguration在运行时存储在哪里,从中挤压密钥有多容易?

或者更可取的方法是在每个Realm实例上从钥匙串请求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)

最佳答案

将加密密钥放入defaultConfiguration是否安全? defaultConfiguration在运行时存储在哪里,从中挤压密钥有多容易?

密钥存储在Realm配置中的内存中。如果您想知道一个单独的进程突破iOS沙盒的可能性有多大,请检查应用程序的内存并从中提取密钥...让我们说这将是对最高OS的一种利用。学位和苹果将面临公关灾难。

所以说真的,您应该做最方便的事情。只要您不将加密密钥以明文形式保留在磁盘上,就可以像实际一样安全。

关于ios - 在defaultConfiguration中存储加密 key 是否安全?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40991523/

10-10 22:43