Keychain 백업

0

암호화된 키를 Keychain에 저장하는 경우가 있다. 예로 realm의 암호화된 사용 키를 keychain에 저장하지만 사정에 따라 기기를 변경하면 백업한 환경을 복원해도 앱을 시작하지 못하는 경우가 발생한다. 그래서 나름대로 키체인 백업을 어떻게 하고 사용할 수 있는지 체크해 보았다.

iTunes 백업

iTunes 백업에서 복원시, 암호화하여 백업한 경우와 그렇지 않는 경우 키체인이 백업대상이 되는지가 갈라진다. 기본값은 암호화가 해제된 상태로 되어 있다.

  • 암호화 백업 : Keychain도 백업대상이 됨
  • 암호화하지 않고 백업: Keychain은 백업대상이 안됨

단, Keychain의 kSecAttrAccessible은 다음중 하나일 경우에만 같다.

  • kSecAttrAccessibleWhenUnlocked
  • kSecAttrAccessibleAfterFirstUnlock
  • kSecAttrAccessibleAlways

kSecAttrAccessibleThisDeviceOnly를 지정하는 경우 다른 기기에서는 접근할 수 없다.

iCloud 백업

Keychain을 iCloud백업 대상으로 하려면 iOS 7 이상의 기기에서 다음과 같은 설정을 해야 한다.

Synchronizing Keychain items
· Items without kSecAttrSynchronizable = kCFBooleanTRUE are not synchronized (default)
· Limited to passwords (kSecClassGenericPassword and kSecClassInternetPassword)

Security and Privacy in iOS 7 https://developer.apple.com/videos/play/enterprise/17/

또한 사용자가 iCloud 설정에서 iCloud 키체인을 사용하지 않으면 Keychain이 백업되지 않는다.

키체인 오픈소스 라이브러리

  • SAMKeychain : kSecAttrSynchronizable은 기본적으로 ON이며 kSecClassGenericPassword만 가능하고 kSecAttrAccessible은 지정이 가능하다.
  • KeychainAccess :kSecAttrSynchronizable은 지정가능하며 kSecClassGenericPassword, kSecClassInternetPassword가능하고 kSecAttrAccessible은 지정이 가능하다.
  • LUKeychainAccess : kSecAttrSynchronizable은  안되지만 kSecClassGenericPassword은 가능하고 kSecAttrAccessible은 지정이 가능하다.

정리하자면, iTunes 백업 및 iCloud 백업에서 키체인이 대상이 되는 조건은 다르고, 키체인을 백업하는 용도로 사용한다면 오픈소스 라이브러리에서는 SAMKeychain, KeychainAccess가 좋을 것이다. 원래 사용자조작에 의한 영향이 크기 때문에 키체인에 넣은 데이터가 손실되는 것을 고려해서 앱을 설계하는 것을 추천한다.

Facebook Comments

No more articles