iOS Keychain은 애플이 제공하는 보안 데이터 저장소로, 민감한 정보를 안전하게 저장하고 접근할 수 있게 해줍니다. Keychain은 암호, 암호화 키, 인증서, 토큰과 같은 민감한 데이터를 저장하기에 적합합니다.
Keychain은 iOS의 보안 엔클레이브를 사용하여 데이터를 암호화하고 안전하게 저장합니다.
동일한 Apple ID를 사용하는 여러 기기 간에 데이터를 자동으로 동기화할 수 있습니다. (iCloud Keychain)
예시
import Security
func savePassword(service: String, account: String, password: String) -> Bool {
let data = password.data(using: .utf8)!
let query: [String: Any] = [
kSecClass as String: kSecClassGenericPassword,
kSecAttrService as String: service,
kSecAttrAccount as String: account,
kSecValueData as String: data
]
SecItemDelete(query as CFDictionary) // 기존 항목을 삭제
let status = SecItemAdd(query as CFDictionary, nil)
return status == errSecSuccess
}
func getPassword(service: String, account: String) -> String? {
let query: [String: Any] = [
kSecClass as String: kSecClassGenericPassword,
kSecAttrService as String: service,
kSecAttrAccount as String: account,
kSecReturnData as String: kCFBooleanTrue!,
kSecMatchLimit as String: kSecMatchLimitOne
]
var dataTypeRef: AnyObject? = nil
let status = SecItemCopyMatching(query as CFDictionary, &dataTypeRef)
if status == errSecSuccess {
if let data = dataTypeRef as? Data {
return String(data: data, encoding: .utf8)
}
}
return nil
}