이번 포스트에서는 안드로이드 앱에서 데이터를 안전하게 저장하기 위해 안드로이드 아키텍처 컴포넌트를 사용하여 데이터를 암호화하는 방법에 대해 알아보겠습니다.
Table of Contents
Room 데이터베이스에서 데이터 암호화
Room은 안드로이드 아키텍처 컴포넌트 중 하나로, 데이터베이스를 쉽게 구축 및 접근할 수 있도록 도와줍니다. Room 데이터베이스에서 데이터를 암호화하려면 RoomDatabase
클래스에서 SqlCipher
라이브러리를 사용할 수 있습니다. 이 라이브러리는 SQLite 데이터베이스의 데이터를 안전하게 암호화해줍니다.
@Database(entities = [User::class], version = 1, exportSchema = false)
@TypeConverters(DateConverter::class)
abstract class AppDatabase : RoomDatabase() {
companion object {
private var INSTANCE: AppDatabase? = null
fun getInstance(context: Context): AppDatabase {
if (INSTANCE == null) {
synchronized(AppDatabase::class) {
INSTANCE = Room.databaseBuilder(
context.applicationContext,
AppDatabase::class.java,
"app_database"
)
.openHelperFactory(SupportFactory(BuildConfig.SQL_CIPHER_SECRET.toCharArray()))
.build()
}
}
return INSTANCE!!
}
}
abstract fun userDao(): UserDao
}
위 코드에서 BuildConfig.SQL_CIPHER_SECRET
에는 데이터를 암호화 및 복호화하는 데 사용할 키가 포함됩니다.
SharedPreferences에서 데이터 암호화
SharedPreferences는 애플리케이션의 설정 정보를 저장하는 데 사용됩니다. 데이터를 SharedPreferences에 저장할 때 암호화하려면 EncryptedSharedPreferences
클래스를 사용할 수 있습니다. 이 클래스는 데이터를 내부적으로 AES 알고리즘을 사용하여 암호화하여 저장합니다.
val masterKeyAlias = MasterKeys.getOrCreate(MasterKeys.AES256_GCM_SPEC)
val sharedPreferences = EncryptedSharedPreferences.create(
"secret_shared_prefs",
masterKeyAlias,
context,
EncryptedSharedPreferences.PrefKeyEncryptionScheme.AES256_SIV,
EncryptedSharedPreferences.PrefValueEncryptionScheme.AES256_GCM
)
위 코드에서 MasterKeys
를 사용하여 마스터 키를 만들고, 이 마스터 키를 사용하여 EncryptedSharedPreferences
를 생성합니다.
결론
안드로이드 아키텍처 컴포넌트를 사용하면 데이터를 안전하게 저장할 수 있습니다. Room 데이터베이스의 경우 SqlCipher
라이브러리를 사용하여 데이터를 암호화하고, SharedPreferences의 경우 EncryptedSharedPreferences
클래스를 사용하여 데이터를 안전하게 저장할 수 있습니다.
이와 같은 방법을 통해 사용자의 개인정보나 민감한 데이터를 보다 안전하게 보호할 수 있습니다.