Realm 암호화 - .NET SDK
개요
Realm을 암호화하여 디스크에 저장된 데이터를 애플리케이션 외부에서 읽을 수 없도록 할 수 있습니다. Realm을 열 때 64바이트 암호화 키를 제공하여 AES-256 + SHA-2로 디스크의 Realm 파일을 암호화합니다.
Realm 은 표준 AES-256 암호화 를 사용하여 데이터를 투명하게 암호화하고 256 512해독합니다. 지정된 비트 암호화 키 의 처음 비트를 사용합니다. Realm 은 256 512비트 암호화 키 의 다른 비트를 사용하여 해시 기반 메시지 인증 코드(HMAC)를 통해 무결성을 검증합니다.
경고
영역 암호화 키에 암호화가 취약한 해시를 사용하지 마십시오. 최적의 보안을 위해 파생된 암호화 키가 아닌 임의의 암호화 키를 생성하는 것이 좋습니다.
참고
암호화되지 않은 기존 Realm을 암호화할 수 없습니다.
영역을 처음 열 때 영역을 암호화해야 합니다. 암호화 키가 포함된 구성을 사용하여 암호화되지 않은 기존 영역을 열려고 하면 Realm에서 오류가 발생합니다.
고려 사항
다음은 영역을 암호화할 때 고려해야 할 주요 영향입니다.
& 저장 키 재사용
암호화된 영역을 열 때마다 반드시 동일한 암호화 키를 전달해야 합니다. 키를 제공하지 않거나 암호화된 영역에 잘못된 키를 지정하면 Realm SDK에서 오류가 발생합니다.
앱은 다른 앱이 키를 읽을 수 없도록 암호화 키를 일반적으로 대상 플랫폼의 보안 키/값 저장소에 안전하게 저장해야 합니다. Maui 예를 들어, Secure Storage 를 사용할 수 있습니다.Xamarin 또는 보안 스토리지 기본 스토리지에 대한 액세스를 간소화합니다. 궁극적으로 공격자가 키에 액세스할 수 없도록 하는 것은 개발자의 책임입니다.
성능에 미치는 영향
암호화된 영역의 읽기 및 쓰기 속도는 암호화되지 않은 영역보다 최대 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 .NET SDK에서는 여러 프로세스에서 동일한 암호화된 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);