민프

[Flutter] 민감한 정보는 SharedPreferences 대신 FlutterSecureStorage를 사용하여 저장하자(android-KeyChain, IOS - KeyStore) 본문

[Flutter]

[Flutter] 민감한 정보는 SharedPreferences 대신 FlutterSecureStorage를 사용하여 저장하자(android-KeyChain, IOS - KeyStore)

민프야 2023. 12. 20. 17:00

이번 프로젝트에서 같이 일하는 팀원분의 코드를 보는 도중 모든 유저의 정보(Token 값들 포함)를 SharedPreferences다 넣고 사용하는 것을 목격했습니다..

 

그래서 이런 부분은 SharedPreferences보다는 android-KeyChain, IOS - KeyStore로 적용하는게 보안적으로 더 좋다고 말씀드렸고, 리펙토링을 진행하여 수정을 완료했습니다.

 

그럼 왜 SharedPreferences말고 SecureStorage를 사용해야 하는걸까요?

 

Flutter에서 정보를 저장하기 위해서 일반적으로 SharedPreferences 패키지를 많이 사용합니다

근데 토큰과 같이 민감한 정보 or 로그인 정보 or 유저정보 들이 쉽게 노출이되기에 보안에 취약하므로 개인정보는 SecureStorage 를 이용해서 저장하는것이 바람직합니다.

 

안드로이드의 KeyStore을 기준으로 더 설명해보자면

SharedPreferences와 KeyStore는 모두 안드로이드 애플리케이션에서 데이터를 저장하는 메커니즘을 제공하지만, 그 목적과 보안 수준에서 차이가 있는데 간단하게 설명해보겠습니다.

 

SharedPreferences

- 저장 위치와 방식: SharedPreferences는 간단한 키-값 쌍 형태로 데이터를 저장하며, 일반적으로 앱의 내부 저장소에 텍스트 파일로 저장됩니다. 이는 앱의 설정 값이나 상태 정보를 저장하는 데 적합합니다.

- 보안 수준: SharedPreferences에 저장된 데이터는 기본적으로 암호화되지 않아서 루팅된 기기에서는 이 데이터에 쉽게 접근할 수 있으며, 앱의 데이터를 추출할 수 있는 경우에도 민감한 정보가 노출될 위험이 있습니다.

- 사용 용도: 사용자의 설정, 상태 유지, 간단한 정보 저장 등 비교적 민감하지 않은 데이터를 저장하는 데 주로 사용됩니다.

 

KeyStore

- 저장 위치와 방식 : KeyStore는 암호화 키를 안전하게 저장하는 시스템으로, 안드로이드의 KeyChain (iOS에서는 Keychain) 시스템을 활용해 키를 보안이 강화된 영역에 저장합니다. 이는 암호화된 형태로 저장되며, 키 자체는 애플리케이션 코드나 다른 앱에서 접근할 수 없습니다.

- 보안 수준: KeyStore는 하드웨어 기반의 보안 요소를 사용하여 키를 보호합니다.

이는 키가 물리적으로 분리된 안전한 환경에 저장됨을 의미하며, 소프트웨어 및 물리적 공격에 대한 강력한 보안을 제공합니다.

- 사용 용도: 암호화 키의 안전한 생성, 저장, 사용을 위한 목적으로 사용되고, 이를 통해 앱 내부 또는 앱 간의 안전한 데이터 전송, 사용자 인증 정보의 보호 등에 사용됩니다.

 

그래서 무슨차이?

SharedPreferences와 KeyStore의 가장 큰 차이는 보안 수준에 있습니다.

SharedPreferences는 일반 텍스트 형태로 데이터를 저장하기 때문에, 민감한 정보를 저장하기에는 적합하지 않는 반면, KeyStore는 키 관리를 위한 보안 시스템으로, 키를 안전한 환경에 저장하고 암호화하여 사용합니다.

이를 통해 높은 수준의 보안을 제공하며, 특히 금융 앱, 기업용 앱, 개인 정보를 다루는 앱 등에서 중요한 역할을 합니다.

결론적으로, SharedPreferences는 간단한 정보 저장용으로 적합하고, KeyStore는 높은 보안이 요구되는 키 관리에 적합합니다.

 

 

 

 

 

 


https://developer.android.com/training/articles/keystore?hl=ko

 

Android Keystore 시스템  |  Android 개발자  |  Android Developers

Android Keystore 시스템 컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요. Android Keystore 시스템을 사용하면 암호화 키를 컨테이너에 저장하여 기기에서 키를 추출

developer.android.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

 

Comments