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

加密 Realm — Node.js 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 会引发错误。

或者,您可以使用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