Docs Menu
Docs Home
/ /
Administrar archivos de Realm

Cifrar un dominio - SDK de Kotlin

Puedes cifrar tus dominios para garantizar que los datos almacenados en el disco no se puedan leer fuera de tu aplicación. Cifra el archivo del dominio en el disco con AES-256 + SHA-2 proporcionando una 64clave de cifrado de bytes al abrir el dominio por primera vez.

Realm cifra y descifra datos de forma transparente con estándares Cifrado AES-256Utilizando los primeros 256 bits de la clave de cifrado de bits 512dada. Realm utiliza los otros 256 bits de la 512clave de cifrado de bits para validar la integridad mediante un código de autenticación de mensajes basado en hash (HMAC).

Advertencia

No utilice hashes criptográficamente débiles para las claves de cifrado de dominio. Para una seguridad óptima, recomendamos generar claves de cifrado aleatorias en lugar de derivadas.

Nota

Encripta un Realm al abrir o copia un Realm sin cifrar

Debes cifrar un dominio la primera vez que lo abras. Si intentas abrir un dominio existente sin cifrar con una configuración que contiene una clave de cifrado, Realm generará un error.

Como alternativa, puede copiar los datos del dominio sin cifrar a un nuevo dominio cifrado mediante el método Realm.writeCopyTo(). Consulte Copiar datos a un nuevo dominio para obtener más información.

Para cifrar un reino local, pase su clave de cifrado a la propiedad encryptionKey en RealmConfiguration.Builder() utilizada para abrir el reino.

El siguiente código demuestra cómo generar una clave de cifrado y abrir un dominio local cifrado:

// 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}")
}

Si tu aplicación utiliza Atlas Device Sync, puedes cifrar un realm sincronizado, similar a cifrar un realm local.

Para cifrar un reino sincronizado, pase su clave de cifrado a la propiedad encryptionKey en SyncConfiguration.Builder() utilizado para abrir el reino.

El siguiente código demuestra cómo abrir un reino sincronizado cifrado:

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}")

Consulta Configurar y abrir un reino sincronizado - Kotlin SDK para obtener más información.

Realm solo cifra los datos del dispositivo y los almacena sin cifrar en la fuente de datos Atlas. Cualquier usuario con acceso autorizado a la fuente de datos Atlas puede leerlos, pero se aplica lo siguiente:

  • Los usuarios deben tener los permisos de lectura correctos para leer los datos sincronizados.

  • Los datos almacenados en Atlas siempre están cifrados a nivel de volumen (disco).

  • La transferencia entre el cliente y el servidor siempre está totalmente cifrada.

También puede habilitar la Administración de claves del cliente para cifrar los datos de Atlas almacenados utilizando la clave de su proveedor de nube (por ejemplo, AWS KMS, Azure Key Vault, Google Cloud KMS).

Si necesita claves únicas para cada usuario de su aplicación, puede utilizar un proveedor OAuth o utilizar uno de los proveedores de autenticación de Realm y un activador de autenticación para crear 64una clave de bits y almacenar esa clave en un objeto de usuario.

También puedes cifrar los metadatos de la aplicación App Services que Realm almacena en el dispositivo.

Para obtener más información, consulte Cifrar metadatos de la aplicación.

Debes pasar la misma clave de cifrado cada vez que abras el dominio cifrado. Si no proporcionas una clave o especificas una incorrecta para un dominio cifrado, el SDK de Realm generará un error.

Las aplicaciones deben almacenar la clave de cifrado de forma segura, generalmente en el almacenamiento seguro de clave-valor de la plataforma de destino, para que otras aplicaciones no puedan leerla. Por ejemplo, se puede usar el sistema de almacén de claves de Android o el llavero de Apple. Es responsabilidad del desarrollador garantizar que los atacantes no puedan acceder a la clave.

Las lecturas y escrituras en reinos cifrados pueden ser hasta un 10% más lentas que en reinos no cifrados.

Cambiado en la versión 10.8.0.

A partir de la versión 10.8.0 del SDK de Realm Kotlin, Realm admite la apertura del mismo reino cifrado en múltiples procesos.

Si su aplicación usa la versión 10.7.1 o anterior del SDK de Kotlin de Realm, intentar abrir un reino cifrado desde varios procesos arroja este error: Encrypted interprocess sharing is currently unsupported.

Volver

Eliminar un reino

En esta página