Docs 菜单
Docs 主页
/ /
Atlas Device SDKs
/ /

加密 Realm - React Native SDK

在此页面上

  • 存储和重用密钥
  • 性能影响
  • 加密和 Atlas Device Sync
  • 从多个进程访问加密 Realm
  • 加密 App Services 应用程序元数据

您可以通过在打开 realm 时提供 64 字节加密密钥,使用 AES-256 + SHA-2 加密磁盘上的 realm 数据库文件。

Realm 使用标准 AES-256 加密 以透明方式加密和解密数据 使用给定256 位加密密钥的前512 位。 Realm 使用 位加密密钥的其他256 位,通过512 基于哈希的消息身份验证代码 (HMAC) 来验证完整性。

警告

不要将弱加密哈希值用于 Realm 加密密钥。为了获得最佳安全性,我们建议生成随机加密密钥,而不是派生加密密钥。

注意

无法加密现有的未加密 Realm

您必须在首次打开 Realm 时对其进行加密。如果您尝试使用包含加密密钥的配置打开现有的未加密 Realm,Realm 会引发错误。

以下代码演示如何生成加密密钥和打开加密 Realm:

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}
/>
);
}

以下是加密 Realm 时需要考虑的主要影响。

每次打开加密 Realm 时都必须传递相同的加密密钥。如果您不提供密钥或为加密 Realm 指定了错误的密钥,Realm SDK 会引发错误。

应用程序应安全地存储加密密钥,通常存储在目标平台的安全键/值存储区中,以便其他应用程序无法读取该密钥。

加密 Realm 的读取和写入速度可能比未加密 Realm 慢 10%。

您可以对同步 Realm 进行加密。

Realm 仅对设备上的数据进行加密,并将未加密的数据存储在 Atlas 数据源中。任何有权访问 Atlas 数据源的用户都可以读取数据,但以下规则仍然适用:

  • 用户必须拥有正确的读取权限才能读取同步数据。

  • Atlas 中存储的数据始终在卷(磁盘)级别进行加密。

  • 客户端和服务器之间的传输始终是完全加密的。

您还可以启用客户密钥管理,使用云提供商的密钥(例如AWS KMS、Azure Key Vault、Google Cloud KMS)对存储的 Atlas 数据进行加密。

如果您需要为应用程序的每个用户提供唯一的密钥,则可以使用 OAuth 提供程序或使用一个Realm身份验证提供程序身份验证trigger来创建 64 位密钥并将该密钥存储在用户对象中。

在版本 realm@11.8.0 中进行了更改

从 Realm React Native SDK 版本 v11.8.0 开始,Realm 支持在多个进程中打开相同的加密 Realm。

如果您的应用使用 Realm React Native SDK 版本 v11.7.0 或更早版本,则尝试从多个进程打开加密领域会引发此错误: Encrypted interprocess sharing is currently unsupported.

如果您在 Realm 中使用 Atlas Device Sync,您的 App Services App 将使用设备上的元数据文件来确定应同步的更改。

您可以采用与加密 Realm 类似的方式对此元数据文件进行加密。

如需了解更多信息,请参阅“加密应用程序元数据”。

后退

捆绑 Realm