在后台或通知进程中使用加密领域?
Using an Encrypted Realm in a background or notification processes?
Realm 有一个很棒的 write up and sample code 用于加密您的数据库。本文档和示例按预期工作,直到您在以下时间尝试解密领域:
- 用户在 phone
上设置了密码
- 设备已锁定
- 当收到远程通知时,您的应用正在尝试使用 Realm
发生这种情况是因为我们无法访问钥匙串以获取(或创建)en/decrypt 领域的密钥。默认 kSecAttrAccessible
值为 kSecAttrAccessibleWhenUnlocked
我认为有几个选项:
- 将
kSecAttrAccessible
更改为 kSecAttrAccessibleAlways
。我不喜欢这个,因为它 a) 太开放 b) slated to be deprecated in iOS 9
- 将
kSecAttrAccessible
更改为 kSecAttrAccessibleAfterFirstUnlock
或 kSecAttrAccessibleAfterFirstUnlockThisDeviceOnly
。这更好,但对我来说仍然感觉太开放,即使 docs 状态:建议用于需要由后台应用程序访问的项目
- 创建第二个未加密的领域用作登台数据库。在此处存储通知数据,然后当应用程序从用户交互中唤醒时(设备将被解锁),将数据从暂存领域移动到加密的真实领域。这感觉也不对,因为我们暂时没有加密数据
- 合并 2 和 3 并加密 staging Realm,并用
kSecAttrAccessibleAfterFirstUnlockThisDeviceOnly
保护它的密钥
- ??
我目前正在尝试决定#2、#3 是否值得投入时间,或者我是否可以想出一个#5
这里有我应该使用的方法还是我错过的方法?
谢谢
我是 KeychainAccess 图书馆的作者。我强烈建议您使用 kSecAttrAccessibleAfterFirstUnlock
(第二个选项)。这是从后台访问钥匙串项目的最佳方式。
Realm 有一个很棒的 write up and sample code 用于加密您的数据库。本文档和示例按预期工作,直到您在以下时间尝试解密领域:
- 用户在 phone 上设置了密码
- 设备已锁定
- 当收到远程通知时,您的应用正在尝试使用 Realm
发生这种情况是因为我们无法访问钥匙串以获取(或创建)en/decrypt 领域的密钥。默认 kSecAttrAccessible
值为 kSecAttrAccessibleWhenUnlocked
我认为有几个选项:
- 将
kSecAttrAccessible
更改为kSecAttrAccessibleAlways
。我不喜欢这个,因为它 a) 太开放 b) slated to be deprecated in iOS 9 - 将
kSecAttrAccessible
更改为kSecAttrAccessibleAfterFirstUnlock
或kSecAttrAccessibleAfterFirstUnlockThisDeviceOnly
。这更好,但对我来说仍然感觉太开放,即使 docs 状态:建议用于需要由后台应用程序访问的项目 - 创建第二个未加密的领域用作登台数据库。在此处存储通知数据,然后当应用程序从用户交互中唤醒时(设备将被解锁),将数据从暂存领域移动到加密的真实领域。这感觉也不对,因为我们暂时没有加密数据
- 合并 2 和 3 并加密 staging Realm,并用
kSecAttrAccessibleAfterFirstUnlockThisDeviceOnly
保护它的密钥
- ??
我目前正在尝试决定#2、#3 是否值得投入时间,或者我是否可以想出一个#5
这里有我应该使用的方法还是我错过的方法?
谢谢
我是 KeychainAccess 图书馆的作者。我强烈建议您使用 kSecAttrAccessibleAfterFirstUnlock
(第二个选项)。这是从后台访问钥匙串项目的最佳方式。