UserDefault
- 평소 간단한 데이터 저장 할 때 처럼 UserDefault를 사용하려 함
- But UserDefault는 property list 문서 (.plist)에 저장된다.
- 사용자가 특정 툴 등을 사용하면 UserDefaults에 쉽게 접근해서 이 데이터를 확인하고 수정할 수 있음
- 그러므로 토큰 처럼 민감하고 보안이 중요한 데이터는 UserDefault를 사용하면 안 됨
🔐 KeyChain
- 보안이 필요한 데이터들을 안전하게 저장할 수 있는 곳
- keychain service의 API를 사용해서 키체인 항목을 추가, 삭제, 수정할 수 있다.
특징
- 사용자가 직접 제거하지 않는 이상 앱을 제거하고 설치해도 남아 있음
- 앱을 재설치시 로그인이 유지되므로 UserDefault에 최초,재 설치 여부를 저장하고 최초, 재 설치일 경우 Keychain을 제거하는 로직 추가
- 디바이스를 UnLock하면 KeyChain이 풀리고 Lock하면 잠긴다
- 잠긴 상태에선 복호화, 접근 불가능
- 풀린 상태에서는 해당 item을 생성하고 저장한 어플리케이션에서만 접근 가능

- Keychain에 저장할 데이터를 키체인 아이템으로 감싼다.
- 아이템의 접근을 제어하고, 아이템을 검색할 수 있도록 공개적으로 볼 수 있는 속성 값들을 함께 정의한다.
- Keychain service는 Keychain에서 데이터를 암호화하고 저장한다.
- Keychain은 디스크 내에 암호화되어 저장된 데이터베이스이다.
- 아이템을 찾고 데이터를 복호화할 때에도 keychain service가 사용된다.
Item Class 종류
- kSecClassInternetPassword - 인터넷용 아이디/패스워드