Docs 菜单
Docs 主页
/ /
Realm 文件

加密 Realm — Node.js SDK

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

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

警告

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

注意

在打开或复制未加密 Realm 上加密 Realm

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

或者,您可以使用Realm .writeCopyTo()将未加密域数据复制到新的加密域 方法。 有关更多信息,请参阅复制数据并打开新Realm

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

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

每次打开加密 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 Node.js SDK版本 v 11.8.0开始, Realm支持在多个进程中打开相同的加密域 。

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

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

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

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

后退

捆绑 Realm

在此页面上