Menu Docs
Página inicial do Docs
/ /
Atlas Device SDKs
/ / /

Criptografar um Realm - Flutter SDK

Nesta página

  • Visão geral
  • Considerações
  • Armazenamento e reutilização de chaves
  • Impacto no desempenho
  • Criptografia e Atlas Device Sync
  • Acesso a 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 Realm no disco com AES-256 + SHA-2 fornecendo uma chave de criptografia de 64 bytes ao abrir um 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

Criptografar um Realm em aberto ou copiar domínio não Realm

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.

Como alternativa, você pode copiar os dados de domínio não criptografados para um novo domínio criptografado usando o método Realm.writeCopy() método. Consulte Copiar dados para um novo Realm para obter mais informações.

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

Você deve passar a mesma chave de criptografia no Configuration.encryptionKey do realm propriedade toda vez que você abre o domínio. A chave deve ser um 64-byte List<int>. Para criar uma chave que atenda a essa especificação, a List deve conter exatamente 64 números inteiros e todos os números inteiros devem estar entre 0 e 255.

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.

As leituras e gravações em realms criptografados podem ser até 10% mais lentas do que em realms não criptografados.

Você pode criptografar um realm sincronizado.

O Realm criptografa somente os dados no dispositivo e armazena os dados não criptografados na sua fonte de dados do Atlas. Qualquer usuário com acesso autorizado à fonte de dados do Atlas pode ler os dados, mas o seguinte ainda se aplica:

  • Os usuários devem ter as permissões de leitura corretas para ler os dados sincronizados.

  • Os dados armazenados no Atlas são sempre criptografados em nível de volume (disco).

  • A transferência entre cliente e servidor é sempre totalmente criptografada.

Você também pode ativar o Gerenciamento de chaves de cliente para criptografar os dados armazenados no Atlas usando a chave do seu provedor de nuvem (por exemplo, AWS KMS, Azure Key Vault, Google Cloud KMS).

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

Alterado na versão 1.1.0.

A partir do Realm Flutter SDK versão 1.1.0, O Realm suporta a abertura do mesmo domínio criptografado em vários processos.

Se o seu aplicativo usar o Realm Flutter SDK versão 1.1.0 ou anterior, tentar abrir um Realm criptografado a partir de vários processos gera esse erro: Encrypted interprocess sharing is currently unsupported.

O seguinte código demonstra como gerar uma chave de encriptação e abrir um realm criptografado:

// Generate encryption key
final key = List<int>.generate(64, (i) => Random().nextInt(256));
final encryptedConfig = Configuration.local([Car.schema],
// Include the encryption key in the configuration
encryptionKey: key);
final encryptedRealm = Realm(encryptedConfig);

Voltar

Reduzir o tamanho do arquivo de domínio