Keychain 서비스에서 사용되는 dictionary 키입니다
kSecClass란?
kSecClass는 Keychain 서비스에서 사용되는 dictionary 키입니다. 이 키의 값은 Keychain item의 클래스를 나타냅니다. kSecClass는 어떤 종류의 item을 생성 또는 검색할지를 지정하는 데 사용됩니다.
쉽게 말해 키체인에서도 여러 종류의 데이터의 저장을 지원하는데 kSecClass를 통해서 어떤 유형의 데이터를 저장 또는 검색할지를 결정할 수 있으며 kSecClass는 dictionary key 값으로 지정하고 저장하는 싶은 데이터 유형은 value로 지정하여 저장할 수 있는 데이터의 종류도 달리할 수 있습니다.
다음은 dictionary의 key값을 kSecClass로 그리고 value값을 kSecClassInternetPassword로 설정한 예시 코드입니다.
let account = credentials.username
let password = credentials.password.data(using: String.Encoding.utf8)!
var query: [String: Any] = [kSecClass as String: kSecClassInternetPassword, // keychain Item Class
kSecAttrAccount as String: account, // 계정 ID 정보
kSecAttrServer as String: server, // 접속하려는 서버 정보
kSecValueData as String: password] // 저장할 아이템의 데이터
아래는 kSecClass와 같이 쓰이는 item class values(key) 들입니다.
KeyChain을 사용하기 위한 Dictionary 설정
let kSecClassGenericPassword: CFString
- 일반 비밀번호 항목을 나타내는 값입니다. 즉, 일반적인 비밀번호를 저장하는 항목입니다.
- Keychain Composite Primary Key Attributes: kSecClassGenericPassword를 식별하는데 사용되는 item(속성)들
- kSecAttrAccessGroup: Keychain에 대한 액세스 그룹을 나타내며, macOS에서만 해당되며, 데이터 보호 키체인이나 동기화 속성이 활성화된 경우에만 적용됩니다
- kSecAttrAccount: Keychain 항목의 계정 정보를 식별하는 데 사용되는 속성입니다.
- kSecAttrService: Keychain 항목이 제공하는 서비스를 나타내는 속성
- kSecAttrSynchronizable: Keychain 항목을 동기화할지 여부를 나타내는 속성.
Attributes not forming the Composite Primary Key: kSecClassGenericPassword를 식별하는데 사용되지 않는 부가적인 정보를 나타내는데 사용되는 item(속성)들
- kSecAttrAccess (macOS only):macOS에서만 해당되며 항목에 대한 액세스 제어를 정의하는 속성.
- kSecAttrAccessControl: Keychain 항목에 대한 액세스 제어를 구성하는 객체.
- kSecAttrAccessible (macOS only): Keychain 항목의 접근성을 지정하는 속성. 데이터 보호 키체인이나 동기화 속성이 활성화된 경우에만 해당됩니다.
- kSecAttrCreationDate: Keychain 항목이 생성된 날짜 및 시간을 나타내는 속성.
- kSecAttrModificationDate: Keychain 항목이 마지막으로 수정된 날짜 및 시간을 나타내는 속성.
- kSecAttrDescription: Keychain 항목에 대한 설명을 포함하는 속성.
- kSecAttrComment: Keychain 항목에 대한 주석을 포함하는 속성.
- kSecAttrCreator: Keychain 항목을 만든 애플리케이션의 식별자를 나타내는 속성.
- kSecAttrType: Keychain 항목의 유형을 식별하는 속성.
- kSecAttrLabel: Keychain 항목에 대한 레이블을 나타내는 속성.
- kSecAttrIsInvisible: Keychain 항목이 사용자에게 표시되지 않아야 하는지 여부를 나타내는 속성.
- kSecAttrIsNegative: Keychain 항목이 부정적인 속성을 나타내는지 여부를 나타내는 속성.
- kSecAttrGeneric: Keychain 항목에 대한 일반적인 속성.
kSecClass as String: kSecClassGenericPassword
let kSecClassInternetPassword: CFString
- 인터넷 비밀번호 항목을 나타내는 값입니다. 주로 웹사이트나 네트워크 서비스에 대한 비밀번호를 저장하는 데 사용됩니다.
- Keychain Composite Primary Key Attributes: kSecClassInternetPassword를 식별하는데 사용되는 item(속성)들
- kSecAttrAccessGroup: macOS에서는 이 키가 적용되며, kSecUseDataProtectionKeychain 또는 kSecAttrSynchronizable을 true로 설정한 경우에만 해당됩니다
- kSecAttrAccount: 계정 정보를 나타내는 속성.
- kSecAttrAuthenticationType: 인증 유형을 나타내는 속성.
- kSecAttrPath: 경로를 나타내는 속성
- kSecAttrPort: 포트 번호를 나타내는 속성
- kSecAttrProtocol: 프로토콜을 나타내는 속성
- kSecAttrSecurityDomain: 보안 도메인을 나타내는 속성
- kSecAttrServer: 서버 정보를 나타내는 속성
- kSecAttrSynchronizable: 동기화 여부를 나타내는 속성
Attributes not forming the Composite Primary Key: kSecClassInternetPassword를 식별하는데 사용되지 않는 부가적인 정보를 나타내는데 사용되는 item(속성)들
- kSecAttrAccess (macOS only): macOS에서만 해당되며, 항목에 대한 액세스 제어를 정의하는 속성.
- kSecAttrAccessible: macOS에서만 해당되며, kSecUseDataProtectionKeychain 또는 kSecAttrSynchronizable을 true로 설정한 경우에만 해당됩니다.
- kSecAttrCreationDate: 항목이 생성된 날짜 및 시간을 나타내는 속성.
- kSecAttrModificationDate: 항목이 마지막으로 수정된 날짜 및 시간을 나타내는 속성.
- kSecAttrDescription: 항목에 대한 설명을 포함하는 속성.
- SecAttrComment: 항목에 대한 주석을 포함하는 속성.
- kSecAttrCreator: 항목을 만든 애플리케이션의 식별자를 나타내는 속성.
- kSecAttrType: 항목의 유형을 식별하는 속성.
- kSecAttrLabel: 항목에 대한 레이블을 나타내는 속성.
- kSecAttrIsInvisible: 항목이 사용자에게 표시되지 않아야 하는지 여부를 나타내는 속성.
- kSecAttrIsNegative: 항목이 부정적인 속성을 나타내는지 여부를 나타내는 속성.
다음은 kSecClass의 value를 kSecClassInternetPassword로 설정하여 서버로부터 받은 토큰을 키체인에 저장하기 위한 query입니다.
let query: [String: Any] = [kSecClass as String: kSecClassInternetPassword, // keychain Item Class
kSecAttrServer as String: server, // 접속하려는 서버 정보
kSecAttrAccount as String: credentials.username, // 계정 ID 정보
kSecValueData as String: data]
kSecClass as String: kSecClassInternetPassword
let kSecClassCertificate: CFString
- 인증서 항목을 나타내는 값입니다. 디지털 인증서를 저장하는 데 사용됩니다.
- Keychain Composite Primary Key Attributes: kSecClassCertificate를 식별하는데 사용되는 item(속성)들
- kSecAttrAccessGroup: macOS에서는 이 키는 kSecUseDataProtectionKeychain을 활성화하거나 kSecAttrSynchronizable을 true로 설정한 경우에만 적용됩니다.
- kSecAttrCertificateType: 인증서 유형을 나타내는 속성.
- kSecAttrIssuer: 발급자를 나타내는 속성.
- kSecAttrSerialNumber: 일련 번호를 나타내는 속성.
- kSecAttrSynchronizable: iOS 14 및 이후, iOS 11 및 이후, watchOS 7 및 이후에서는 동기화 여부를 나타내는 속성으로 SecItemAdd(_:_:)을 호출하여 이러한 속성의 값이 기존 항목과 모두 동일한 인증서 항목을 추가하면 errSecDuplicateItem이 발생합니다
Attributes not forming the Composite Primary Key: kSecClassCertificate를 식별하는데 사용되지 않는 부가적인 정보를 나타내는데 사용되는 item(속성)들
- kSecAttrAccess (macOS 전용): macOS에서만 해당되며 항목에 대한 액세스 제어를 정의하는 속성.
- kSecAttrAccessible: macOS에서만 해당되며 kSecUseDataProtectionKeychain을 활성화하거나 kSecAttrSynchronizable을 true로 설정한 경우에만 적용됩니다.:
- kSecAttrCertificateEncoding: 인증서 인코딩을 나타내는 속성
- kSecAttrLabel: 항목에 대한 레이블을 나타내는 속성.
- kSecAttrSubject: 주체를 나타내는 속성.
- kSecAttrSubjectKeyID: 주체 키 식별자를 나타내는 속성.
- kSecAttrPublicKeyHash: 공개 키 해시를 나타내는 속성.
kSecClass as String: kSecClassCertificate
let kSecClassKey: CFString
- 암호화 키 항목을 나타내는 값입니다. 암호화 키(예: 대칭 키 또는 비대칭 키)를 저장하는 데 사용됩니다.
- Keychain Composite Primary Key Attributes: kSecClassKey를 식별하는데 사용되는 item(속성)들
- kSecAttrAccessGroup: macOS에서는 이 키는 kSecUseDataProtectionKeychain을 활성화하거나 kSecAttrSynchronizable을 true로 설정한 경우에만 적용됩니다.
- kSecAttrApplicationLabel: 애플리케이션 레이블을 나타내는 속성.
- kSecAttrApplicationTag: 애플리케이션 태그를 나타내는 속성.
- kSecAttrEffectiveKeySize: 효과적인 키 크기를 나타내는 속성.
- kSecAttrKeyClass: 키 클래스를 나타내는 속성.
- kSecAttrKeySizeInBits: 비트 단위의 키 크기를 나타내는 속성.
- kSecAttrKeyType: 키 타입을 나타내는 속성.
Attributes not forming the Composite Primary Key: kSecClassKey를 식별하는데 사용되지 않는 부가적인 정보를 나타내는데 사용되는 item(속성)들
- kSecAttrAccess (macOS 전용): macOS에서만 해당되며 항목에 대한 액세스 제어를 정의하는 속성.
- kSecAttrAccessible: macOS에서만 해당되며 kSecUseDataProtectionKeychain을 활성화하거나 kSecAttrSynchronizable을 true로 설정한 경우에만 적용됩니다.
- kSecAttrLabel: 항목에 대한 레이블을 나타내는 속성.
- kSecAttrIsPermanent: 키가 영구적인지 여부를 나타내는 속성.
- kSecAttrPRF: PRF(익명 함수)를 나타내는 속성.
- kSecAttrSalt: 솔트를 나타내는 속성.
- kSecAttrRounds: 라운드 수를 나타내는 속성.
- kSecAttrCanEncrypt: 암호화할 수 있는지 여부를 나타내는 속성.
- kSecAttrCanDecrypt: 복호화할 수 있는지 여부를 나타내는 속성.
- kSecAttrCanDerive: 파생할 수 있는지 여부를 나타내는 속성.
- kSecAttrCanSign: 서명할 수 있는지 여부를 나타내는 속성.
- kSecAttrCanVerify: 검증할 수 있는지 여부를 나타내는 속성.
- kSecAttrCanWrap: 랩핑할 수 있는지 여부를 나타내는 속성.
- kSecAttrCanUnwrap: 언랩핑할 수 있는지 여부를 나타내는 속성.
kSecClass as String: kSecClassKey
let kSecClassIdentity: CFString
- 신원 항목을 나타내는 값입니다. 개인 키와 인증서 쌍을 저장하는 데 사용됩니다.
kSecClass as String: kSecClassIdentity
공용으로 사용되는 item(항목)
kSecValueData
: kSecValueData라는 key를 사용하고, key의 value에 저장할 Data (ex. 비밀번호)를 넣습니다. Keychain service는 Item의 종류에 따라 이 Data를 암호화할지 말지를 결정합니다. Item이 기밀정보라면 (즉, 비밀번호 타입이거나 private key를 포함하고 있는 경우) Data를 암호화합니다. 이 딕셔너리 key의 value는 CFData 타입입니다.
kSecValueData as String: {저장할 데이터}
'SwiftUI' 카테고리의 다른 글
Security (0) | 2023.11.18 |
---|---|
Using Keychain services to save JWT (JSON Web Token) (0) | 2023.11.18 |
Keychain services (0) | 2023.11.16 |
Core Data (0) | 2023.11.16 |
EnvironmentObject (0) | 2023.11.15 |