본문 바로가기
iOS/Study

[iOS] Keychain vs UserDefaults

by Callie_ 2023. 12. 17.

 

 

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