Keychain


위 그림에서 Item을 만들때 CFDictionary 타입의 query를 만드는데 이것은 어떻게 조합하는 것인가?
1. kSecClass: 이 키체인은 어떤 정보를 담고있는가
kSecClassGenericPassword: 일반적인 비밀번호
kSecClassInternetPassword: 웹사이트 비밀번호
kSecClassCertificate: 인증서
kSecClassKey: 개인 키
kSecClassIdentity: 인증서 + 개인키
2. Attributes
공통
- kSecAttrAccessible: 키체인 접근 권한 설정 key
- kSecAttrAccessibleWhenPasscodeSetThisDeviceOnly: 키체인 데이터가 디바이스 잠금 해제 시에만 접근 가능함. (+ passcode가 설정 돼 있을 때만 사용 가능함)
- kSecAttrAccessibleWhenUnlockedThisDeviceOnly: 사용자에의해 잠금이 해제되어있는 동안에만 접근 가능
- kSecAttrAccessibleWhenUnlocked: 사용자에의해 잠금이 해제되어있는 동안에만 접근 가능
- kSecAttrAccessibleAfterFirstUnlockThisDeviceOnly: 재시작 후 사용자가 한번 기기가 잠금해제 하기 전까지 접근이 불가능
- kSecAttrAccessibleAfterFirstUnlock: 재시작 후 사용자가 한번 기기가 잠금해제 하기 전까지 접근이 불가능
- kSecAttrSynchronizable: cloud 연동 여부
특정 클래스에서만 가능한 것들
- kSecAttrAccount: kSecClassGenericPassword, kSecClassInternetPasword일 때는 kSecAttrAccount에 대한 정보를 반드시 입력해줘야함
- GenericPassword
- kSecAttrAccess(macOS only)
- kSecAttrAccessControl
- kSecAttrAccessGroup (iOS; also macOS if kSecAttrSynchronizable specified)
- kSecAttrAccessible (iOS; also macOS if kSecAttrSynchronizable specified)
- kSecAttrCreationDate
- kSecAttrModificationDate
- kSecAttrDescription
- kSecAttrComment
- kSecAttrCreator
- kSecAttrType
- kSecAttrLabel
- kSecAttrIsInvisible
- kSecAttrIsNegative
- kSecAttrAccount
- kSecAttrService
- kSecAttrGeneric
- kSecAttrSynchronizable
- InternetPassword
- kSecAttrAccess (macOS only)
- kSecAttrAccessGroup(iOS; also macOS if kSecAttrSynchronizable specified)
- kSecAttrAccessible (iOS; also macOS if kSecAttrSynchronizable specified)
- kSecAttrCreationDate
- kSecAttrModificationDate
- kSecAttrDescription
- kSecAttrComment
- kSecAttrCreator
- kSecAttrType
- kSecAttrLabel
- kSecAttrIsInvisible
- kSecAttrIsNegative
- kSecAttrAccount
- kSecAttrSecurityDomain
- kSecAttrServer
- kSecAttrProtocol
- kSecAttrAuthenticationType
- kSecAttrPort
- kSecAttrPath
- kSecAttrSynchronizable
- Certificate
- kSecAttrAccess (macOS only)
- kSecAttrAccessGroup (iOS only)
- kSecAttrAccessible (iOS only)
- kSecAttrCertificateType
- kSecAttrCertificateEncoding
- kSecAttrLabel
- kSecAttrSubject
- kSecAttrIssuer
- kSecAttrSerialNumber
- kSecAttrSubjectKeyID
- kSecAttrPublicKeyHash
- Key
- kSecAttrAccess (macOS only)
- kSecAttrAccessGroup (iOS only)
- kSecAttrAccessible (iOS only)
- kSecAttrKeyClass
- kSecAttrLabel
- kSecAttrApplicationLabel
- kSecAttrIsPermanent
- kSecAttrApplicationTag
- kSecAttrKeyType
- kSecAttrPRF
- kSecAttrSalt
- kSecAttrRounds
- kSecAttrKeySizeInBits
- kSecAttrEffectiveKeySize
- kSecAttrCanEncrypt
- kSecAttrCanDecrypt
- kSecAttrCanDerive
- kSecAttrCanSign
- kSecAttrCanVerify
- kSecAttrCanWrap
- kSecAttrCanUnwrap
- Identity => Certification+key
3.키체인 만들기
- 키체인 만들기: SecItemAdd(attributes:CFDictionary, result) 사용
- 키체인 찾기: SecItemCopyMatching(query: CFDictionary, result)
- let kSecReturnData: data 타입 리턴
- let kSecReturnAttributes: attribute 리턴
- let kSecReturnRef: SecKeychainItem, SecKey, SecCertificate, SecIdentity, or CFData.
- let kSecReturnPersistentRef: 영구 저장되는 Data
- 키체인 지우기: SecItemDelete(query: CFDictionary)
- 키체인 수정: SecItemUpdate(query: CFDictionary, result)
텍스트