Join us Sept 17 at .local NYC! Use code WEB50 to save 50% on tickets. Learn more >
MongoDB Event
Docs Menu
Docs Home
/ /
Atlas Device SDK
/ / /

Realm 암호화 - Kotlin SDK

Realm을 암호화하여 디스크에 저장된 데이터를 애플리케이션 외부에서 읽을 수 없도록 할 수 있습니다. Realm을 처음 열 때 64바이트 암호화 키를 제공하여 AES-256 + SHA-2로 디스크의 Realm 파일을 암호화합니다.

Realm 지정된 비트256 암호화 키 의 처음 256 비트를 사용하여 표준 AES- 암호화 로 데이터를 투명하게 암호화하고 512해독합니다. Realm 비트 256 512암호화 키 의 다른 비트를 사용하여 해시 기반 메시지 인증 코드(HMAC)를 통해 무결성을 검증합니다.

경고

영역 암호화 키에 암호화가 취약한 해시를 사용하지 마십시오. 최적의 보안을 위해 파생된 암호화 키가 아닌 임의의 암호화 키를 생성하는 것이 좋습니다.

참고

열 때 Realm 암호화 또는 암호화되지 않은 Realm 복사

영역을 처음 열 때 영역을 암호화해야 합니다. 암호화 키가 포함된 구성을 사용하여 암호화되지 않은 기존 영역을 열려고 하면 Realm에서 오류가 발생합니다.

또는 Realm.writeCopyTo() 메서드 를 사용하여 암호화되지 않은 Realm 데이터를 암호화된 새 Realm으로 복사할 수 있습니다. 메서드. 자세한 내용 은 새 Realm에 데이터 복사 를 참조하세요.

로컬 Realm을 암호화하려면 RealmConfiguration.Builder() 의 encryptionKey 속성에 암호화 키를 전달하여 Realm을 여는 데 사용됩니다.

다음 코드는 암호화 키를 생성하고 암호화된 로컬 영역을 여는 방법을 보여줍니다.

// return a random key from the given seed
fun getRandomKey(seed: Long? = null): ByteArray {
// generate a new 64-byte encryption key
val key = ByteArray(64)
if (seed != null) {
// If there is a seed provided, create a random number with that seed
// and fill the byte array with random bytes
Random(seed).nextBytes(key)
} else {
// fill the byte array with random bytes
Random.nextBytes(key)
}
return key
}
runBlocking {
// Create the configuration
val config = RealmConfiguration.Builder(setOf(Frog::class))
// Specify the encryption key
.encryptionKey(generatedKey)
.build()
// Open the realm with the configuration
val realm = Realm.open(config)
Log.v("Successfully opened encrypted realm: ${realm.configuration.name}")
}

앱에서 Atlas Device Sync를 사용하는 경우 로컬 영역을 암호화하는 것과 유사하게 동기화된 영역을 암호화할 수 있습니다.

동기화된 Realm을 암호화하려면 Realm을 여는 데 사용된 SyncConfiguration.Builder() 의 encryptionKey 속성에 암호화 키를 전달합니다.

다음 코드는 암호화된 동기화 영역을 여는 방법을 보여줍니다.

val syncConfig = SyncConfiguration.Builder(user, setOf(Frog::class))
.initialSubscriptions { realm ->
add(realm.query<Frog>())
}
// Specify the encryption key
.encryptionKey(generatedKey)
.build()
val realm = Realm.open(syncConfig)
Log.v("Successfully opened encrypted realm: ${realm.configuration.name}")

자세한 내용 은 동기화 Realm 구성 및 열기 - Kotlin SDK 를 참조하세요.

Realm은 기기의 데이터만 암호화하고 암호화되지 않은 데이터는 Atlas 데이터 소스에 저장합니다. Atlas 데이터 소스에 대한 액세스 권한이 있는 모든 사용자는 데이터를 읽을 수 있지만 다음 사항은 여전히 적용됩니다.

  • 사용자는 동기화된 데이터를 읽을 수 있는 올바른 읽기 권한이 있어야 합니다.

  • Atlas에 저장된 데이터는 항상 볼륨(디스크) 수준에서 암호화됩니다.

  • 클라이언트와 서버 간의 전송은 항상 완전히 암호화됩니다.

고객 키 관리 를 활성화하여 클라우드 제공자의 키를 사용하여 저장된 Atlas 데이터를 암호화할 수도 있습니다(예: Amazon Web Services KMS, Azure Key Vault, GCP KMS).

애플리케이션의 각 사용자에 대해 고유한 키가 필요한 경우 OAuth 제공자를 사용하거나 Realm 인증 제공자 중 하나와 인증 trigger 를 사용하여 64비트 키를 만들고 해당 키를 사용자 객체에 저장할 수 있습니다.

Realm이 기기에 저장하는 App Services App 메타데이터를 암호화할 수도 있습니다.

자세한 내용은 앱 메타데이터 암호화를 참조하세요.

암호화된 영역을 열 때마다 반드시 동일한 암호화 키를 전달해야 합니다. 키를 제공하지 않거나 암호화된 영역에 잘못된 키를 지정하면 Realm SDK에서 오류가 발생합니다.

Apps should store the encryption key securely, typically in the target platform's secure key/value storage, so that other apps cannot read the key. For example, you can use the Android Keystore system or Apple's Keychain. It is the developer's responsibility to ensure that attackers cannot access the key.

암호화된 영역의 읽기 및 쓰기 속도는 암호화되지 않은 영역보다 최대 10% 느릴 수 있습니다.

버전 10.8.0에서 변경되었습니다.

Realm Kotlin SDK 버전 10.8.0부터 Realm은 여러 프로세스에서 동일한 암호화된 영역을 열 수 있도록 지원합니다.

앱에서 Realm Kotlin SDK 버전 10.7.1 이하를 사용하는 경우 여러 프로세스에서 암호화된 영역을 열려고 시도하면 다음 오류가 발생합니다. Encrypted interprocess sharing is currently unsupported.

돌아가기

Realm 삭제

이 페이지의 내용