Realm の暗号化 - .NET SDK
Overview
Realm を暗号化して、ディスクに保存されたデータをアプリケーション外で読み取れないようにすることができます。 ディスク上の Realm ファイルを AES-256 + SHA-2 で暗号化するには、Realm を開くときに 64 バイトの暗号化キーを指定します。
Realmは標準の AES-256 暗号化 でデータを透過的に暗号化と復号化します 指定された ビット暗号化のキーの最初の256 512ビットを使用します。 Realmは、 ビット暗号化のキーの他の256 512ビットを使用して、 ハッシュベースのメッセージ認証コード(HMAC)を使用して整合性を検証します。
警告
Realm 暗号化キーには、暗号化が脆弱なハッシュを使用しないでください。 最適なセキュリティを実現するには、暗号化キーを生成するのではなく、ランダムに生成することをお勧めします。
注意
既存の暗号化されていない Realm を暗号化できません
Realm は、初めて開くときに暗号化する必要があります。 暗号化キーを含む構成を使用して、暗号化されていない既存の Realm を開こうとすると、Realm はエラーをスローします。
Considerations
以下は、Realm を暗号化する際に考慮する必要があるキーへの影響です。
キーの保存と再利用
暗号化されたRealmを開くたびに、同じ暗号化キーを渡す必要があります。 暗号化された Realm にキーを指定しないか、誤ったキーを指定した場合、Realm SDK はエラーをスローします。
アプリは暗号化のキーを通常、ターゲット プラットフォームのセキュリティで保護されたキーと値のストレージに安全に保存し、他のアプリがキーを読み取れないようにする必要があります。 たとえば、Maui Secure Storage を使用できます またはXamarin Secure Storage 基礎となるストレージへのアクセスを簡素化します。最終的に、攻撃者がキーにアクセスできないようにするのは開発者の責任です。
パフォーマンスへの影響
暗号化された Realm での読み取りと書込みは、暗号化されていない Realm よりも最大 10% 遅くなる可能性があります。
重要
Realm インスタンスを取得するたびに、同じ暗号化キーを提供する必要があります。 暗号化された Realm に対してキーを指定しない場合、または誤ったキーを指定した場合、 GetInstance
を呼び出すとRealmFileAccessErrorExceptionが発生します。
暗号化と Atlas Device Sync
アプリケーションの各ユーザーに一意のキーが必要な場合は、OAuth プロバイダー( MAUI.Auth など)を使用できます。 )と Xamarin.Auth )、またはRealm 認証プロバイダー と 認証trigger のいずれかを使用して64 ビットキーを作成し、そのキーを ユーザー オブジェクトに保存します。
複数のプロセスから暗号化された Realm へのアクセス
バージョン 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);