Criptografar um Realm - SDK do Node.js
Nesta página
Você pode criptografar o arquivo de domínio no disco com AES-256 + SHA-2 fornecendo uma chave de criptografia de 64 bytes ao abrir um domínio.
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 Realm não criptografados para um novo Realm criptografado usando o arquivo Realm.writeCopyTo() método. Consulte Copiar Dados e Abrir um Novo Realm para obter mais informações.
O seguinte código demonstra como gerar uma chave de encriptação e abrir um realm criptografado:
// Retrieve encryption key from secure location or create one const encryptionKey = new ArrayBuffer(64); // Use encryption key in realm configuration const config = { schema: [Task], encryptionKey: encryptionKey, }; const realm = await Realm.open(config);
// Retrieve encryption key from secure location or create one const encryptionKey = new ArrayBuffer(64); // Use encryption key in realm configuration const config: Configuration = { schema: [Task], encryptionKey: encryptionKey, }; const realm = await Realm.open(config);
Armazenar & reutilizar 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.
Impacto no desempenho
As leituras e gravações em realms criptografados podem ser até 10% mais lentas do que em realms não criptografados.
Criptografia e Atlas Device Sync
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.
Acesso a um Realm criptografado a partir de vários processos
Alterado na versão realm@11.8.0
.
Começando com o Realm Node.js SDK versão v11.8.0, O Realm suporta abrir o mesmo Realm criptografado em vários processos.
Se o seu aplicativo usar o Realm Node.js SDK versão v11,7,0 ou anterior, tentar abrir um domínio criptografado de vários processos gera esse erro:
Encrypted interprocess sharing is currently unsupported.
Criptografar metadados de aplicativos de serviços de aplicativos
Se você usar o Atlas Device Sync com sua região, seu aplicativo do App Services usará um arquivo de metadados no dispositivo para determinar as alterações que devem ser sincronizadas.
Pode encriptar este ficheiro de metadados de forma semelhante à encriptação do seu domínio.
Para saber mais, consulte Criptografar metadados de apps.