Docs Menu
Docs Home
/ /
Atlas Device SDK
/ /

Realm の暗号化 - .NET SDK

項目一覧

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

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

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

警告

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

注意

既存の暗号化されていない Realm を暗号化できません

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

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

暗号化されたRealmを開くたびに、同じ暗号化キーを渡す必要があります。 暗号化された Realm にキーを指定しないか、誤ったキーを指定した場合、Realm SDK はエラーをスローします。

アプリは暗号化のキーを通常、ターゲット プラットフォームのセキュリティで保護されたキーと値のストレージに安全に保存し、他のアプリがキーを読み取れないようにする必要があります。 たとえば、Maui Secure Storage を使用できます またはXamarin Secure Storage 基礎となるストレージへのアクセスを簡素化します。最終的に、攻撃者がキーにアクセスできないようにするのは開発者の責任です。

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

重要

Realm インスタンスを取得するたびに、同じ暗号化キーを提供する必要があります。 暗号化された Realm に対してキーを指定しない場合、または誤ったキーを指定した場合、 GetInstanceを呼び出すとRealmFileAccessErrorExceptionが発生します。

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

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

バージョン 11.0.0 で変更

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

Realm .NET SDK の以前のバージョンでは、複数の プロセスから同じ暗号化された Realm を開くことはできません。 そのような操作を試みると、次のエラーがスローされます。「暗号化されたプロセス間共有は現在サポートされていません。

警告

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

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

// Check if we already have a key stored in the platform's secure storage.
// If we don't, generate a new one:
var encryptionKey = new byte[64];
using var rng = RandomNumberGenerator.Create();
rng.GetBytes(encryptionKey);
// Store the key securely to be used next time we want to open the Realm.
// Create configuration.
var config = new RealmConfiguration
{
EncryptionKey = encryptionKey
};
// Open or create a realm with the encryption key.
var realm = Realm.GetInstance(config);

戻る

Realm ファイル サイズの縮小