2
Realm有很好的加密數據庫的write up和sample code。本文檔和示例工作按計劃,直到您嘗試解密境界時:在後臺或通知進程中使用加密領域?
- 用戶都有自己的手機上輸入密碼
- 設備被鎖定
- 您的應用程序正在試圖做的工作與境界時遠程通知進來
發生這種情況是因爲我們無法訪問鑰匙串來獲取(或創建)密鑰以解密/解密Realm。默認kSecAttrAccessible
值爲kSecAttrAccessibleWhenUnlocked
有幾個選項,我看到他們:
- 變化
kSecAttrAccessible
到kSecAttrAccessibleAlways
。我不喜歡這個,因爲它是a)太開放了,b)它在iOS 9中是slated to be deprecated - 更改
kSecAttrAccessible
到kSecAttrAccessibleAfterFirstUnlock
或kSecAttrAccessibleAfterFirstUnlockThisDeviceOnly
。雖然docs狀態爲:這建議用於需要由後臺應用程序訪問的項目 - 創建第二個未加密的Realm以用作臨時數據庫,但這仍然讓我感覺開放太多。將通知數據存儲在此處,然後當應用程序從用戶交互中喚醒(設備將被解鎖)時,將數據從分段Realm移動到加密的Realm中。這也不舒服,因爲我們暫時沒有加密數據
- 組合2和3並加密分段Realm,並用
kSecAttrAccessibleAfterFirstUnlockThisDeviceOnly
加密 - ??
我目前正試圖如果#2來決定,如果#3是值得投入時間到,或者如果我能想出一個#5
是否有辦法在這裏,我應該清楚使用還是我錯過了?
感謝
謝謝,通過kSecAttrAccessibleAfterFirstUnlockThisDeviceOnly?我傾向於這一點,但後來意識到,當用戶恢復他們的手機時(如果數據庫被複制,但它的關鍵沒有),它會變得非常快。 – timbroder
另外,真棒看圖書館 – timbroder
是'~ThisDeviceOnly'意味着項目永遠不會遷移到新設備(=未備份)。如果您沒有特殊原因,我建議使用'kSecAttrAccessibleAfterFirstUnlock'而不是'〜ThisDeviceOnly'。大多數用戶希望從加密備份恢復密碼。 –