Criptografar um Realm - .NET SDK
Nesta página
Visão geral
Você pode criptografar seus domínios para garantir que os dados armazenados no disco não possam ser lidos fora do seu aplicativo. Você criptografa o Arquivo de Realm no disco com AES-256 + SHA-2 fornecendo uma chave de criptografia de 64 bytes ao abrir o Realm.
O Realm criptografa e descriptografa dados de forma transparente com criptografia AES-256 padrão usando os primeiros 256 bits da 512chave de criptografia bits fornecida. O Realm usa os outros 256 bits da 512chave de criptografia de bits para validar a integridade usando um código de autenticação de mensagem baseado em hash (HMAC).
Aviso
Não use hashes criptograficamente fracos para chaves de encriptação de domínio. Para uma segurança ideal, recomendamos gerar chaves de encriptação aleatórias em vez de derivadas.
Observação
Não é possível criptografar um realm não criptografado existente
Você deve criptografar um realm na primeira vez que abri-lo. Se você tentar abrir um realm não criptografado existente usando uma configuração que contém uma chave de encriptação, o Realm exibirá um erro.
Considerações
Veja a seguir os principais impactos a serem considerados ao criptografar um realm.
Armazenamento e reutilização de chaves
Você deve passar pela mesma chave de encriptação toda vez que abrir o domínio criptografado. Se você não fornecer uma chave ou especificar a chave errada para um domínio criptografado, o domínio SDK emitirá um erro.
Os aplicativos devem armazenar a chave de criptografia com segurança, normalmente no armazenamento seguro de chave/valor da plataforma de destino, para que outros aplicativos não possam ler a chave. Por exemplo, você pode usar Maui o Armazenamento Seguro ou Xamarin Armazenamento seguro para simplificar o acesso ao armazenamento subjacente. Em última análise, é responsabilidade do desenvolvedor garantir que os invasores não possam acessar a chave.
Impacto no desempenho
As leituras e gravações em realms criptografados podem ser até 10% mais lentas do que em realms não criptografados.
Importante
A mesma chave de criptografia deve ser fornecida toda vez que você obter uma instância do Realm. Se você não fornecer uma chave ou especificar a chave errada para um Realm criptografado, receberá uma RealmFileAccessErrorException ao chamar GetInstance
.
Criptografia e Atlas Device Sync
Você pode criptografar um realm sincronizado.
Se precisar de chaves exclusivas para cada usuário do seu aplicação, você poderá usar um fornecedor OAuth (como MAUI.Auth) e Xamarin.Auth), ou use um dos Realm provedores de autenticação de trigger e um de autenticação para criar uma 64chave de bits e armazenar essa chave em um objeto de usuário.
Acessando um Realm criptografado a partir de vários processos
Alterado na versão 11.0.0.
A partir do Realm .NET SDK versão 11.0.0, O Realm suporta a abertura do mesmo domínio criptografado em vários processos.
Em versões anteriores do Realm .NET SDK, você não pode abrir o mesmo domínio criptografado de vários processos. Tentar fazer isso gera o erro: "O compartilhamento criptografado entre processos não é atualmente suportado."
Exemplo
Aviso
Não use hashes criptograficamente fracos para chaves de encriptação de domínio. Para uma segurança ideal, recomendamos gerar chaves de encriptação aleatórias em vez de derivadas.
O seguinte código demonstra como gerar uma chave de encriptação e abrir um realm criptografado:
// 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);