加密 Realm - React Native SDK
您可以通过在打开 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%。
加密和 Atlas Device Sync
您可以对同步 Realm 进行加密。
Realm 仅对设备上的数据进行加密,并将未加密的数据存储在 Atlas 数据源中。任何有权访问 Atlas 数据源的用户都可以读取数据,但以下规则仍然适用:
用户必须拥有正确的读取权限才能读取同步数据。
Atlas 中存储的数据始终在卷(磁盘)级别进行加密。
客户端和服务器之间的传输始终是完全加密的。
您还可以启用客户密钥管理,使用云提供商的密钥(例如AWS KMS、Azure Key Vault、Google Cloud KMS)对存储的 Atlas 数据进行加密。
如果您需要为应用程序的每个用户提供唯一的密钥,则可以使用 OAuth 提供程序或使用一个Realm身份验证提供程序和身份验证trigger来创建 64 位密钥并将该密钥存储在用户对象中。
从多个进程访问加密 Realm
在版本 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.
加密 App Services 应用程序元数据
如果您在 Realm 中使用 Atlas Device Sync,您的 App Services App 将使用设备上的元数据文件来确定应同步的更改。
您可以采用与加密 Realm 类似的方式对此元数据文件进行加密。
如需了解更多信息,请参阅“加密应用程序元数据”。