티스토리 뷰

 

개념 및 기능

 

애플은 iOS 장치 상에서 암호화 정보를 저장하기 위해 keychain 이라는 보안 프레임워크를 제공한다.

키체인에 저장한 정보는 관련 앱을 장치에서 삭제한 이후에도 보관할 수 있다.

또한 같은 개발자가 개발한 여러 앱에서 키체인 정보를 공유할 수 있다.

 

 

 

키체인 사용 시점

 

비밀번호나 키, 인증서, 메모 같이 작은 양의 정보를 보관하는데 사용한다.

만약, 인코딩한 이미지나 비디오 같은 대용량의 정보라면

외부 암호 라이브러리를 사용하는 게 대부분 더 좋다.

키체인을 사용하려면 <Security.framework> 를 추가하고

<Security/Security.h> 를 import 해야한다.

 

 

 

사용 방법

 

키체인은 키체인 정보를 요청하는 앱의 코드 서명을 근거로 해제할 수 있다.

하나의 Dictionary 로 생각하면 되고, 특정 키값들이 존재한다.
키의 특성은 아래와 같다.
 
속성 설명 
kSecAttrAccessible  (잠금 동작에 관한 키


상수  설명 
 kSecAttrAccessibleAfterFirstUnlock  장치 재 시작 후 처음 잠금을 해제할 때 데이터의 잠금을 해제한다.
그 후 장치가 다시 재시작할 때까지 잠금 해제 상태를 유지한다.
이 설정은 백그라운드 태스크에서 키체인을 사용해야 하는 경우에 유용하다.
사용자가 새로운 장치로 업그레이드 할 경우 새 장치로 이동한다.
 kSecAttrAccessibleAlways  장치의 잠금 상태에 상관없이 항상 잠금 해제 상태를 유지한다.
중요한 정보를 안전하게 보관하고 싶을 때는 사용하지 않는 것이 좋다.
 kSecAttrAccessibleWhenUnlocked (default)  장치의 잠금을 해제할 때 잠금이 해제된다.
앱이 전면부에 있는 상황에서 정보에 안전하게 접근해야할 때 사용한다.
가장 흔하게 사용되는 값이다.


각각의 상수의 ThisDeviceOnly 가 붙은 값들 
( kSecAttrAccessibleAfterFirstUnlockThisDeviceOnly, 
kSecAttrAccessibleAlwaysThisDeviceOnly, 
kSecAttrAccessibleWhenUnlockedThisDeviceOnly) 은
새로운 장치로 업그레이드 하거나
백업으로부터 복구할 대 데이터를 새로운 장치로 이동하지 않는다. 

 kSecAttrAccessGroup  새로운 키체인을 초기화 할 때 필요한 접근 그룹에 대한 문자열 
 kSecAttrCreation(Modification)Date   생성 (최근 편집) 날짜 
 kSecAttrDescription  사용자에게 보여주는 키체인에 대한 설명 문자열 
 kSecAttrComment   키체인 항목에 대한 코멘트 문자열로, 사용자가 편집 가능 
 kSecAttrCreator  4자리에 CFNumberRef 타입의 문자 코드로, 키체인 생성자의 코드를 나타낸다.
이 속성은 개발자가 커스텀 키체인을 구현할 때 키체인을 생성한 사람을 나타낸다. 
 kSecAttrType   4자리에 CFNumberRef 타입의 문자 코드로, 키체인의 타입을 나타낸다.
이 속성은 개발자가 커스텀 키체인을 구현할 때 키체인의 타입을 나타내는 데 사용한다.
 kSecAttrLabel   키체인 항목을 설명하는 레이블을 나타내는 문자열 
 kSecAttrIsInvisible   보이지 않는 키체인 항목인지를 나타내는 속성으로 kCFBooleanTrue 이면 보이지 않는다. 
 kSecAttrIsNegative  유효한 비밀번호가 이 키체인 항목과 연결돼 있는지를 나타내는 CFBooleanRef 타입 변수.
비밀번호를 저장하지 않고 사용자가 매번 시스템이 필요할 때마다 입력하기를 원할 때 유용하다. 
 kSecAttrAccount   계정 이름 속성 
 kSecAttrService   키체인 항목과 연결된 서비스를 나타내는 문자열 변수 (CFStringRef 타입) 
 kSecAttrGeneric   사용자 정의 속성을 저장하는데 사용하는 범용 속성키 

 

추가 및 삭제는 NSDictionary 에 하는 것 처럼 하면 된다.

 

 

 

 

여러 앱에서의 키체인 공유
 
같은 개발자가 여러 앱을 개발, 배포했을 경우
이 앱들 간에 키체인을 공유할 수 있다.
 
키체인을 공유하려면 
 
1) 프로젝트 target -> Capabilities -> Keychain Sharing 을 On 하고, group identifier 를 추가한다.
2) 키 체인 그룹을 설정한다. (kSecAttrAccessGroup)
 
 
 
키체인 관련 오류 
 
실행 도중의 여러 에러가 발생할 수 있다.
 
에러 코드  값  설명 
errSecSuccess  0 에러가 없음 
errSecUnimplemented  -4  호출 함수가 구현되어 있지 않음 
errSecParam  -50  함수에 전달한 매개변수가 올바르지 않음 
errSecAllocate  -108  메모리 할당 실패 
errSecNotAvailable  -25291  신뢰할만한 결과가 없음 
errSecAuthFailed  -25293  승인 혹은 인증이 실패함 
errSecDuplicateItem  -25299  키체인 항목이 이미 존재함 
errSecItemNotFound  -25300  키체인 항목을 찾을 수 없음 
errSecInteractionNotAllowed -25308  보안 서버와의 통신이 허가되지 않음 
errSecDecode  -26275  제공한 데이터를 디코딩할 수 없음 

 

 
 
 
 
 
 

 

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함