Docs Menu
Docs Home
/ /
Atlas Device SDK
/ / /

Realm の暗号化 - Flutter SDK

項目一覧

  • Overview
  • Considerations
  • キーの保存と再利用
  • パフォーマンスへの影響
  • 暗号化と Atlas Device Sync
  • 複数のプロセスから暗号化された Realm へのアクセス

Realm を暗号化して、ディスクに保存されたデータをアプリケーション外で読み取れないようにすることができます。 Realm を開くときに 64 バイトの暗号化キーを指定して、AES-256 + SHA-2 でディスク上の Realm を暗号化します。

Realm は標準の AES-256 暗号 化でデータを透過的に暗号化と復号化します 指定された ビット暗号化のキーの最初の256 512ビットを使用します。Realm は、256 ビット暗号化キーの他の512 ビットを使用して、 ハッシュベースのメッセージ認証コード(HMAC)を使用して整合性を検証します。

警告

Realm 暗号化キーには、暗号化が脆弱なハッシュを使用しないでください。 最適なセキュリティを実現するには、暗号化キーを生成するのではなく、ランダムに生成することをお勧めします。

注意

暗号化されていない Realm を開くまたはコピーして、Realm を暗号化する

Realm は、初めて開くときに暗号化する必要があります。 暗号化キーを含む構成を使用して、暗号化されていない既存の Realm を開こうとすると、Realm はエラーをスローします。

あるいは、 Realm.writeCopy() メソッド を使用して、暗号化されていない Realm データを新しい暗号化された Realm にコピーすることもできます使用して複数のドキュメントを挿入できます。 詳細については、「 新しい Realm へのデータのコピー 」を参照してください。

以下は、Realm を暗号化する際に考慮する必要があるキーへの影響です。

Realm の Configuration.encryptionKey で同じ暗号化キーを渡す 必要 があります Realm を開くたびにプロパティが表示されます。キーは64 - バイト List<int>である必要があります。 この仕様を満たすキーを作成するには、リストに64の整数が含まれている必要があり、すべての整数は0から255の間である必要があります。

暗号化された Realm にキーを指定しないか、誤ったキーを指定した場合、Realm SDK はエラーをスローします。

アプリは暗号化のキーを通常、ターゲット プラットフォームのセキュリティで保護されたキーと値のストレージに安全に保存し、他のアプリがキーを読み取れないようにする必要があります。

暗号化された Realm での読み取りと書込みは、暗号化されていない Realm よりも最大 10% 遅くなる可能性があります。

同期された Realm を暗号化できます。

Realm はデバイス上のデータのみを暗号化し、暗号化されていないデータを Atlas データソースに保存します。 Atlas データソースへのアクセスが許可されたユーザーはデータを読み取ることができますが、次の条件は引き続き適用されます。

  • 同期されたデータを読み取るには、ユーザーには適切な読み取り権限が必要です。

  • Atlas に保存されるデータは、常にボリューム(ディスク)レベルで暗号化されます。

  • クライアントとサーバー間の転送は常に完全に暗号化されます。

また、カスタマー キー管理を有効にして、クラウドAtlasのキー(例: Amazon Web Services KMS 、 Azure Key Vault 、 Google Cloud Platform KMS )。

アプリケーションの各ユーザーに一意のキーが必要な場合は、OAuth プロバイダーを使用するか、 Realm認証プロバイダー認証triggerのいずれかを使用して 64 ビットキーを作成し、そのキーをユーザー オブジェクトに保存できます。

バージョン 1.1.0 で変更

Realm Flutter SDK バージョン 1.1.0 以降では、 Realm は、複数のプロセスで同じ暗号化された Realm を開くことをサポートしています。

アプリが Realm Flutter SDK バージョン 1.1.0 を使用している場合 またはそれ以前のバージョンでは、複数のプロセスから暗号化された Realm を開こうとすると、次のエラーがスローされます。 Encrypted interprocess sharing is currently unsupported.

次のコードは、暗号化キーを生成し、暗号化された Realm を開く方法を示しています。

// Generate encryption key
final key = List<int>.generate(64, (i) => Random().nextInt(256));
final encryptedConfig = Configuration.local([Car.schema],
// Include the encryption key in the configuration
encryptionKey: key);
final encryptedRealm = Realm(encryptedConfig);

戻る

Realm ファイル サイズの縮小