๐ฅ Android EncryptedSharedPreferences ์ ๋ํด ์์๋ณด๊ณ , ์ฌ์ฉ ๋ฐฉ๋ฒ์ ์ดํด๋ณด์.
EncryptedSharedPreferences๋ Android Jetpack ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ค security ์์ ์ ๊ณตํ๋ ํด๋์ค์ด๋ค.
๊ธฐ์กด์ ์กด์ฌํ๋ SharedPreferences๋ฅผ ์ํธํํ์ฌ ๋ฐ์ดํฐ ๋ณด์์ ๊ฐํํ๋ ๋ฐ ์ฌ์ฉ๋๋ค.
Jetpack security ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ Android Keystore ์์คํ
์ ์ฌ์ฉํ์ฌ ์ํธํ ํค๋ฅผ ์ฑ ๋ด๋ถ๊ฐ ์๋ ์์คํ
๋ง์ด ์ ๊ทผ๊ฐ๋ฅํ ๊ณณ์ ์ ์ฅํ๋๋ก ํ๋ค.
EncryptedSharedPreferences๋ ๊ธฐ๋ณธ์ ์ผ๋ก SharedPreferences ์ ๋น์ทํ์ง๋ง, ๊ฐ์ ์ ์ฅ ๋ฐ ๊ฒ์ํ ๋ ์ํธํ ๋ฐ ๋ณตํธํ๋ฅผ ์ํํ์ฌ ๋ฐ์ดํฐ ๋์ถ์ ๋ฐฉ์งํ๋ค. ์ด๋ฅผ ํตํด ์ฑ์์ ์ฌ์ฉํ๋ ์ค์ํ ๋ฐ์ดํฐ(์: API ํค, ์ฌ์ฉ์ ์ ๋ณด ๋ฑ)๋ฅผ ์์ ํ๊ฒ ์ ์ฅํ ์ ์๋ค. ์ฌ๊ธฐ์ ์ฌ์ฉ๋๋ ํค ๊ฐ์ Android Keystore ์์คํ
์ ์ฌ์ฉํ์ฌ ๊ด๋ฆฌํ๋ค.
EncryptedSharedPreferences๋ฅผ ์ฌ์ฉํ๋ฉด, ๊ธฐ๋ณธ์ ์ผ๋ก AES256-GCM ์ํธํ์ ๊ฐ์ ์์ ํ ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉํ์ฌ SharedPreferences๋ฅผ ๋ณดํธํ ์ ์๋ค. ์๋ ์์ ์์ AES256 ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉํ EncryptedSharedPreferences ์ฌ์ฉ ๋ฐฉ๋ฒ์ ์ดํด๋ณด์.
https://developer.android.com/topic/security/data?hl=ko
https://developer.android.com/jetpack/androidx/releases/security?hl=ko
implementation "androidx.security:security-crypto:1.1.0-alpha06"
// ์์
private static final String PREFS_NAME = "my_api_key_prefs";
private static final String PREFS_KEY = "api_key";
// MasterKey ์์ฑ
MasterKey masterKey = new MasterKey.Builder(context)
.setKeyScheme(MasterKey.KeyScheme.AES256_GCM)
.build();
// EncryptedSharedPreferences ์์ฑ
SharedPreferences sharedPreferences = EncryptedSharedPreferences.create(
this,
PREFS_NAME,
masterKey,
EncryptedSharedPreferences.PrefKeyEncryptionScheme.AES256_SIV,
EncryptedSharedPreferences.PrefValueEncryptionScheme.AES256_GCM
);
// data ์ ์ฅ
SharedPreferences.Editor editor = sharedPreferences.edit();
editor.putString(PREFS_KEY, "์ ์ฅํ ๋ฐ์ดํฐ");
editor.apply();
// data ๊ฐ์ ธ์ค๊ธฐ
String data = sharedPreferences.getString(PREFS_KEY, null);