iOS 앱 개발을 하면, 사용자의 정보를 저장할 데이터베이스 선택지를 한번씩은 꼭 고민해보게 되는 것 같다.
CoreData, UserDefaults, Keychain 등이 있는데, 이 글은 보안 유지가 필요한 데이터를 저장할 때 사용하기 좋은 Keychain에 대해 정리다.
1. UserDefaults로 사용자의 개인정보 저장?
물론, UserDefaults에 사용자의 데이터를 저장할 수도 있다. 우선 UserDefaults에 대해 정리해보자.
UserDefaults는,
1. 런타임에 동작
2. 앱이 실행되는 동안 기본 데이터베이스에 접근해 info 파일에 key-value의 형태로 데이터를 저장
이라는 특징을 가지고 있으며, 데이터가 샌드박스에 저장되어 있기 때문에 앱을 삭제하면 저장된 데이터가 모두 삭제된다는 특징이 있다. 그런데 왜 사용자의 데이터 중 민감한 정보를 UserDefaults를 사용해서 저장하지 않는지에 대해 고민해보자면, OS를 탈옥하는 일이 벌어질 때 저장된 데이터를 모두 보여주게 되기 때문이다. 즉, 보안성이 취약하다! 그래서 사용자의 앱 경험 상태 (로그인 유무, 첫 진입 유무) 등을 저장하기엔 적합하지만, 보안이 필요한 비밀번호와 같은 정보를 저장할 땐 UserDefaults 사용이 지양된다.
2. Keychain?
키체인이란?
키체인이란 간단히 설명하자면 Apple이 제공해주는 보안 프레임워크로, 보안이 필요한 데이터를 암호화하여 저장하는 디바이스의 저장공간이다. 애플에서 키체인을 제공하게 된 이유는, 사용자가 각각의 비밀번호와 같은 정보 데이터 정보를 외우는 과정을 줄이고자 함이다. 정보데이터의 예로는 비밀번호, 신용카드 정보 (= 결제 정보) 나 인증서, 암호키 등이 있다.
디바이스의 잠금설정과 키체인의 접근여부는 동일하다. 즉, 디바이스가 잠겨져 있으면 키체인도 잠겨 있어 접근할 수 없다.
또한, 앱을 지우면 저장된 데이터가 모두 삭제되는 UserDefaults와 달리 keychain에 저장된 정보는 사용자가 직접 지우지 않는 이상 삭제되지 않는다는 특징이 있다. 그이유는 keychain의 정보는 샌드박스 외부에 저장되어 있기 때문이다.
정리
- 키체인은 보안이 필요한 데이터를 암호화하여 저장하는 디바이스의 저장공간
- 그러므로, 상황이나 규모에 맞게 UserDefaults와 Keychain 사용을 고민하고 사용해야한다
References
https://developer.apple.com/documentation/foundation/userdefaults
UserDefaults | Apple Developer Documentation
An interface to the user’s defaults database, where you store key-value pairs persistently across launches of your app.
developer.apple.com
https://developer.apple.com/documentation/security/keychain_services
Keychain services | Apple Developer Documentation
Securely store small chunks of data on behalf of the user.
developer.apple.com
https://medium.com/@omar.saibaa/local-storage-in-ios-keychain-668240e2670d
'iOS > Study' 카테고리의 다른 글
[iOS] 이미지 캐시 (1) | 2024.04.03 |
---|---|
[Study/iOS] Method Dispatch (0) | 2023.12.02 |
[iOS] 앱의 생명주기 (0) | 2023.11.27 |
[Study/iOS] unowned vs weak (2) | 2023.11.14 |
[Swift] Enum with Reusable VC (0) | 2023.10.10 |