Overview
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.
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
No se puede cifrar un dominio existente 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.
Considerations
Los siguientes son los impactos clave a tener en cuenta al cifrar un reino.
Almacenamiento y reutilización de llaves
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 llave de cifrado de manera segura, normalmente en el almacenamiento seguro de valores/clave de la plataforma objetivo, para que otras aplicaciones no puedan leer la clave. Por ejemplo, se puede usar MAUI Secure Storage o Xamarin Secure Storage para simplificar el acceso al almacenamiento subyacente. En última instancia, es responsabilidad del desarrollador garantizar que los atacantes no puedan acceder a la clave.
Impacto en el rendimiento
Las lecturas y escrituras en reinos cifrados pueden ser hasta un 10% más lentas que en reinos no cifrados.
Importante
Se debe proporcionar la misma clave de cifrado cada vez que se obtiene una instancia de Realm. Si no se proporciona una clave o se especifica una clave incorrecta para un Realm cifrado, se obtendrá una excepción RealmFileAccessErrorException al llamar. GetInstance.
Cifrado y sincronización de dispositivos Atlas
Puede encriptar un realm sincronizado.
Si necesita claves únicas para cada usuario de su aplicación, puede utilizar un proveedor OAuth (como MAUI.Auth) y Xamarin.Auth), o utilizar uno de los proveedores de autenticación de Realm y un disparador de autenticación para crear una 64clave de bits y almacenar esa clave en un objeto de usuario.
Cómo acceder a un dominio cifrado desde varios procesos
Cambiado en la versión 11.0.0.
A partir de la versión 11.0.0 del SDK de Realm .NET, Realm admite la apertura del mismo reino cifrado en múltiples procesos.
En versiones anteriores del SDK de Realm .NET, no se podía abrir el mismo dominio cifrado desde varios procesos. Al intentar hacerlo, se producía el error: "El uso compartido cifrado entre procesos no es compatible actualmente".
Ejemplo
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.
El siguiente código demuestra cómo generar una clave de cifrado y abrir un reino cifrado:
// Check if we already have a key stored in the platform's secure storage. // If we don't, generate a new one: var encryptionKey = new byte[64]; using var rng = RandomNumberGenerator.Create(); rng.GetBytes(encryptionKey); // Store the key securely to be used next time we want to open the Realm. // Create configuration. var config = new RealmConfiguration { EncryptionKey = encryptionKey }; // Open or create a realm with the encryption key. var realm = Realm.GetInstance(config);