MIP SDK는 SDK 캐시 스토리지를 유지 관리하기 위한 SQLite3 데이터베이스를 구현합니다. Microsoft Information Protection SDK 버전 1.3 이전에는 디스크 및 메모리의 두 가지 유형의 캐시 상태 스토리지만 지원되었습니다. 이러한 두 유형 모두 특정 데이터, 특히 보호된 콘텐츠 및 정책 정보에 대한 라이선스를 일반 텍스트로 저장했습니다.
SDK의 보안 상태를 개선하기 위해 플랫폼별 암호화 API를 사용하여 데이터베이스 및 해당 콘텐츠를 보호하는 두 번째 유형의 디스크 캐시에 대한 지원이 추가되었습니다.
애플리케이션은 프로필 또는 개체의 FileProfileSettings, PolicyProfileSettings, ProtectionProfileSettings의 일부로 프로필을 로드할 때 캐시 유형을 정의합니다. 캐시 유형은 프로필 수명 동안 정적입니다. 다른 유형의 캐시 스토리지 유형으로 변경하려면 기존 프로필을 삭제하고 새 프로필을 만들어야 합니다.
캐시 스토리지 형식
MIP SDK 릴리스 1.3부터 다음과 같은 스토리지 캐시 유형을 사용할 수 있습니다.
| 유형 | 목적 |
|---|---|
| InMemory | 애플리케이션의 메모리에 스토리지 캐시를 유지 관리합니다. |
| OnDisk | 설정 개체에 제공된 디렉터리의 디스크에 데이터베이스를 저장합니다. 데이터베이스는 일반 텍스트로 저장됩니다. |
| OnDiskEncrypted | 설정 개체에 제공된 디렉터리의 디스크에 데이터베이스를 저장합니다. 데이터베이스는 OS 관련 API를 사용하여 암호화됩니다. |
애플리케이션에서 생성된 각 엔진 은 새 암호화 키를 생성합니다.
캐시 스토리지는 mip::CacheStorageType 열거형을 사용하여 프로필 설정 개체 중 하나를 통해 설정됩니다.
FileProfile::Settings profileSettings(mMipContext,
mip::CacheStorageType::OnDiskEncrypted, // Define the storage type to use.
mAuthDelegate,
std::make_shared<sample::consent::ConsentDelegateImpl>(),
std::make_shared<FileProfileObserver>());
각 유형을 사용하는 경우
캐시 스토리지는 이전에 암호 해독된 정보에 대한 오프라인 액세스를 유지하고 이전에 데이터를 사용한 경우 암호 해독 작업의 성능을 보장하는 데 중요합니다.
- 메모리 스토리지 내: 서비스 다시 시작에서 정책 또는 라이선스 캐시 정보를 유지할 필요가 없는 수명이 긴 프로세스에 이 스토리지 유형을 사용합니다.
- 디스크 내: 프로세스가 자주 중지되고 시작될 수 있지만 다시 시작하는 동안 정책, 라이선스 및 서비스 검색 캐시를 유지해야 하는 애플리케이션에 이 스토리지 유형을 사용합니다. 이 스토리지 캐시 유형은 일반 텍스트이므로 사용자가 상태 스토리지에 액세스할 수 없는 서버 워크로드에 더 적합합니다. 예를 들면 서버에서 실행되는 Windows 서비스 또는 Linux 디먼이나 서비스 관리자만 상태 데이터에 액세스할 수 있는 SaaS 애플리케이션이 있습니다.
- 디스크 내 및 암호화: 프로세스가 자주 중지되고 시작될 수 있지만 다시 시작하는 동안 정책, 라이선스 및 서비스 검색 캐시를 유지해야 하는 애플리케이션에 이 스토리지 유형을 사용합니다. 이 스토리지 캐시는 암호화되므로 사용자가 상태 데이터베이스를 찾아 검색할 수 있는 워크스테이션 애플리케이션에 더 적합합니다. 암호화는 검색 중인 사용자가 일반 텍스트로 정책 콘텐츠 또는 보호 라이선스 콘텐츠를 통해 액세스할 수 없도록 방지하는 데 도움이 됩니다. 모든 경우에 데이터는 사용자가 액세스할 수 있는 키로 암호화됩니다. 숙련된 악의적 사용자는 최소한의 노력으로 캐시의 암호를 해독할 수 있지만 이렇게 하면 변조 및 검색이 방지됩니다.
지원되는 암호화 플랫폼
| 플랫폼 | 버전 | 노트 |
|---|---|---|
| Microsoft Windows | Windows 11, Windows Server 지원 버전 | |
| macOS | High Sierra 버전 이상 | |
| Ubuntu Linux | 22.04 이상 |
SecretService 및 LinuxEncryptedCache 기능 플래그가 필요합니다. |
| Android | Android 7.0 이상 | |
| iOS | 지원되는 모든 버전 |
MIP SDK는 다른 Linux 배포를 지원하지만 RedHat Enterprise Linux, CentOS 또는 Debian에서 캐시 암호화를 테스트하지 않았습니다.
참고
Linux에서 캐시 스토리지를 사용하도록 설정하는 기능 플래그는 mip::MipConfiguration::SetFeatureSettings()를 통해 설정됩니다.
캐시 저장소 데이터베이스 테이블
MIP SDK는 캐시에 대해 두 개의 데이터베이스를 유지 관리합니다. 하나는 보호 SDK 및 보호 상태 세부 정보를 유지 관리하기 위한 것입니다. 다른 하나는 정책 SDK 및 정책 세부 정보와 서비스 정보를 유지 관리하기 위한 것입니다. 둘 다 설정 개체의 mip\mip.policies.sqlite3 및 mip\mip.protection.sqlite3 아래에 정의된 경로에 저장됩니다.
참고
MIP SDK는 여러 버전의 캐시에서 호환성을 보장하지 않습니다. 애플리케이션을 새 버전의 MIP SDK로 업그레이드하기 전에 mip\ 디렉터리 내의 모든 파일 또는 기본 설정에서 변경된 대체 디렉터리를 지우는 것이 좋습니다.
보호 데이터베이스
| 테이블 | 목적 | 암호화됨 |
|---|---|---|
| AuthInfoStore | 인증 챌린지 세부 정보를 저장합니다. | 아니요 |
| 동의 저장소 | 각 엔진에 대한 동의 결과를 저장합니다. | 아니요 |
| DnsInfoStore | 보호 작업에 대한 DNS 조회 결과를 저장합니다. | 아니요 |
| 엔진스토어 | 엔진 세부 정보, 연결된 사용자 및 사용자 지정 클라이언트 데이터를 저장합니다. | 아니요 |
| 키 저장소 (KeyStore) | 각 엔진에 대한 대칭 암호화 키를 저장합니다. | 예 |
| 라이센스 스토어 | 저장소는 이전에 암호 해독된 데이터에 대한 라이선스 정보를 사용합니다. | 예 |
| SdInfoStore | 서비스 검색 결과를 저장합니다. | 아니요 |
정책 데이터베이스
| 테이블 | 목적 | 암호화됨 |
|---|---|---|
| 키 저장소 (KeyStore) | 각 엔진에 대한 대칭 암호화 키를 저장합니다. | 예 |
| 정책 | 각 사용자에 대한 레이블 정책 정보를 저장합니다. | 예 |
| 정책 URL | 특정 사용자에 대한 백 엔드 정책 서비스 URL을 저장합니다. | 아니요 |
| 민감도 | 특정 사용자 정책에 대한 분류 규칙을 저장합니다. | 예 |
| 민감도 URLs | 특정 사용자에 대한 백 엔드 민감도 정책 서비스 URL을 저장합니다. | 아니요 |
데이터베이스 크기 고려 사항
데이터베이스 크기는 캐시에 추가되는 엔진 수량 및 캐시된 보호 라이선스의 수량이라는 두 가지 요인에 따라 달라집니다. MIP SDK 1.18부터 DeleteStoredData() 및 ProtectionEngine을(를) 사용하여 캐시된 엔진 데이터를 프로그래밍 방식으로 제거할 수 있습니다. 이전 버전의 경우 원하는 것보다 커지면 캐시를 제거하는 데 외부 프로세스가 필요할 수 있습니다.
데이터베이스 증가에 가장 중요한 기여자는 보호 라이선스 캐시입니다. 서비스 왕복이 애플리케이션 성능에 영향을 주지 않거나 캐시가 너무 커질 수 있으므로 라이선스 캐싱이 필요하지 않은 경우, 라이선스 캐시를 사용하지 않도록 설정할 수 있습니다. 이 작업은 CanCacheLicenses 객체의 FileProfile::Settings를 false로 설정하여 수행됩니다.
FileProfile::Settings profileSettings(mMipContext,
mip::CacheStorageType::OnDiskEncrypted,
mAuthDelegate,
std::make_shared<sample::consent::ConsentDelegateImpl>(),
std::make_shared<FileProfileObserver>());
profileSettings.SetCanCacheLicenses(false);
캐싱 엔진
MIP SDK에서는 인증된 작업을 수행하는 각 사용자에 대해 엔진이 만들어집니다. 엔진은 인증된 ID를 대신하여 수행되는 모든 작업에 대한 인터페이스를 제공합니다. 프로필 및 엔진 개념에서 설명한 대로 FileEngine, PolicyEngine 또는 ProtectionEngine에는 각각 두 가지 상태 CREATED 와 LOADED. SDK 작업을 수행할 수 있도록 엔진을 만들고 로드해야 합니다. 엔진이 사용되지 않는 경우 SDK는 엔진을 캐시하고 사용 가능한 리소스에 따라 가능한 한 오랫동안 CREATED 상태를 유지합니다. 각 SDK의 프로필 클래스는 이를 명시적으로 달성하는 UnloadEngineAsync 메서드도 제공합니다.
각 엔진에는 모든 엔진 관리 작업에 사용되는 고유 식별자 id가 있습니다. 클라이언트 애플리케이션은 ID를 명시적으로 제공할 수 있거나 애플리케이션에서 제공하지 않은 경우 SDK에서 ID를 생성할 수 있습니다. 엔진을 만들 때 엔진 설정 개체를 사용하여 고유 식별자를 제공하고 위에서 설명한 대로 API 프로필에서 캐싱을 사용하도록 설정한 경우, 사용자가 SDK로 작업을 수행할 때마다 동일한 엔진을 사용할 수 있습니다.
[mip::FileEngine](./concept-profile-engine-file-engine-cpp.md#create-file-engine-settings), [mip::PolicyEngine](./concept-profile-engine-policy-engine-cpp.md#implementation-create-policy-engine-settings) 만들기를 위한 코드 조각을 따릅니다.
기존 engineId를 제공하지 않으면 정책을 가져오는 추가 서비스 왕복이 발생하며, 기존 엔진에 대해 이미 캐시되었을 수 있는 라이선스를 가져옵니다. 엔진 ID를 캐시하면 SDK가 이전에 암호 해독된 정보와 일반적인 성능 향상에 오프라인으로 액세스할 수 있습니다.
다음 단계
다음으로, MIP SDK 캐싱을 제대로 활용하도록 MIP 엔진 ID를 올바르게 설정하는 방법을 이해하기 위해 프로필 및 엔진 개체 개념에 대해 자세히 알아봅니다.