Menu Docs

Página inicial do DocsDesenvolver aplicaçõesAtlas Device SDKs

Criptografar um Realm - .NET SDK

Nesta página

  • Visão geral
  • Considerações
  • Armazenamento e reutilização de chaves
  • Impacto no desempenho
  • Criptografia e Atlas Device Sync
  • Acessando um Realm criptografado a partir de vários processos
  • Exemplo

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 encriptação bits fornecida. O Realm usa os outros 256 bits da 512chave de encriptação 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 realm. 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.

Veja a seguir os principais impactos a serem considerados ao criptografar um realm.

Você deve passar pela mesma chave de encriptação toda vez que abrir o realm criptografado. Se você não fornecer uma chave ou especificar a chave errada para um realm criptografado, o Realm 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 o Armazenamento Seguro MAUI ou Armazenamento seguro do Xamarin para simplificar o acesso ao armazenamento subjacente. Em última análise, é responsabilidade do desenvolvedor garantir que os invasores não possam acessar a chave.

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.

Você pode criptografar um realm sincronizado.

Se precisar de chaves exclusivas para cada usuário do seu aplicativo, você poderá usar um provedor OAuth (como MAUI.Auth) e Xamarin.Auth), ou use um dos provedores de autenticação de Realm e um gatilho de autenticação para criar uma 64chave de bits e armazenar essa chave em um objeto de usuário.

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."

Aviso

Não use hashes criptograficamente fracos para chaves de encriptação de realm. 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);
← Reduzir o tamanho do arquivo Realm - .NET SDK