[swift] Swift에서 키체인에 데이터 저장할 때 파일 액세스 제한 설정하기
Swift를 사용하여 iOS 앱을 개발 중이라면, 사용자의 개인 데이터를 보호하기 위해 키체인을 사용하는 경우가 많을 것입니다. 키체인은 사용자의 인증 정보, 비밀번호, 민감한 데이터 등을 안전하게 저장할 수 있는 기능을 제공합니다.
하지만 키체인에 저장된 데이터에 대한 파일 액세스 제한 설정은 매우 중요한 부분입니다. 파일 액세스 제한을 설정하지 않으면 악의적인 앱이 액세스하여 사용자의 개인 정보를 탈취할 수 있습니다.
이번 블로그 포스트에서는 Swift에서 키체인에 데이터를 저장할 때 파일 액세스 제한을 설정하는 방법에 대해 알아보겠습니다.
1. 액세스 제한 설정하기
Keychain
라이브러리를 사용하여 키체인에 데이터를 저장할 때, 액세스 제한 속성을 지정할 수 있습니다. 주로 사용되는 속성 중 하나는 kSecAttrAccessible
입니다.
다음은 몇 가지 kSecAttrAccessible
의 값들입니다.
kSecAttrAccessibleWhenUnlocked
: 잠금이 해제된 상태에서만 데이터에 액세스 가능합니다.kSecAttrAccessibleAfterFirstUnlock
: 최초 해제 이후에는 항상 데이터에 액세스 가능합니다.kSecAttrAccessibleAlways
: 항상 데이터에 액세스 가능합니다.kSecAttrAccessibleWhenUnlockedThisDeviceOnly
: 잠금 해제 및 현재 디바이스에만 데이터에 액세스 가능합니다.
안전한 데이터를 저장해야 한다면, 보통 kSecAttrAccessibleWhenUnlocked
속성을 사용합니다. 이는 잠금이 해제된 상태에서만 데이터에 액세스할 수 있게 합니다.
다음은 예시 코드입니다.
import Security
let keychainItemWrapper = KeychainItemWrapper(identifier: "MyKeychainItem", accessGroup: nil)
// 데이터 저장
keychainItemWrapper.setObject(data, forKey: kSecValueData)
keychainItemWrapper.setObject(kSecAttrAccessibleWhenUnlocked, forKey: kSecAttrAccessible)
2. 액세스 제한 설정 확인하기
위에서 설정한 액세스 제한 속성이 정상적으로 적용되었는지 확인하는 것도 중요합니다. 키체인에서 데이터를 가져올 때, kSecAttrAccessible
속성을 확인하여 적절한 액세스 제한이 설정되어 있는지 확인할 수 있습니다.
import Security
let keychainItemWrapper = KeychainItemWrapper(identifier: "MyKeychainItem", accessGroup: nil)
// 데이터 가져오기
let data = keychainItemWrapper.objectForKey(kSecValueData) as? Data
let accessControl = keychainItemWrapper.objectForKey(kSecAttrAccessible) as? String
if accessControl != kSecAttrAccessibleWhenUnlocked {
// 액세스 제한이 적절하게 설정되지 않았음을 알림
}
3. 참고 자료
- Apple Developer Documentation - Keychain
- Stack Overflow - Setting keychain item inaccessible after first unlock