Criptografar um Realm - React Native SDK
Nesta página
Você pode criptografar o arquivo do banco de dados do 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
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.
O seguinte código demonstra como gerar uma chave de encriptação e abrir um realm criptografado:
import React from 'react'; import {createRealmContext, Realm} from '@realm/react'; import Cat from '../Models/Cat'; import {FlatList, View} from 'react-native'; // Retrieve key from secure location or create one... const key = new Int8Array(64); // Populate with a secure key // ... store key ... const config: Realm.Configuration = { schema: [Cat.schema], // Add encryption key to realm configuration encryptionKey: key, path: Date.now().toString() + '.realm', // :remove }; const {RealmProvider, useQuery} = createRealmContext(config); function App() { return ( <RealmProvider> <ListCats /> </RealmProvider> ); } // Work with realm as normal once it's been opened. function ListCats() { const cats = useQuery<Cat>('Cat'); return ( <FlatList data={cats} renderItem={({item}) => <View>{item.name}</View>} keyExtractor={item => item.name} /> ); }
Veja a seguir os principais impactos a serem considerados ao criptografar um realm.
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 React Native SDK versão v11,8,0, o Realm é compatível com a abertura do mesmo domínio criptografado em vários processos.
Se o seu aplicativo usar o Realm React Native 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.