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

加密 Realm - C++ SDK

在此页面上

  • 存储和重用密钥
  • 性能影响
  • 加密和 Atlas Device Sync
  • 加密同步 Realm
  • 加密元数据

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

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

警告

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

通过对db_config调用 set_encryption_key()函数来加密域 :

// Check if we already have a key stored in the platform's secure storage.
// If we don't, generate a new one.
// Use your preferred method to generate a key. This example key is
// NOT representative of a secure encryption key. It only exists to
// illustrate the form your key might take.
std::array<char, 64> exampleKey = {
0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 2, 2, 0, 0, 0, 0,
0, 0, 3, 3, 0, 0, 0, 0, 0, 0, 4, 4, 0, 0, 0, 0, 0, 0, 5, 5, 0, 0,
0, 0, 0, 0, 6, 6, 0, 0, 0, 0, 0, 0, 7, 7, 0, 0, 0, 0, 0, 0};
// Store the key securely to be used next time we want to open the database.
// We don't illustrate this here because it varies depending on the platform.
// Create a database configuration.
auto config = realm::db_config();
// Set the encryption key in your config.
config.set_encryption_key(exampleKey);
// Open or create a database with the config containing the encryption key.
auto realm = realm::db(config);

提示

无法加密设备上已存在的 Realm

C++ SDK 尚不支持加密设备上已存在的 Realm。 您必须在首次打开 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 在设备上存储的元数据进行加密。 有关更多信息,请参阅加密应用程序元数据。

后退

减少 Realm 文件大小