Поделиться через


Пакет SDK Microsoft Information Protection — хранилище кэша

Пакет SDK MIP реализует базу данных SQLite3 для обслуживания хранилища кэша пакета SDK. До версии 1.3 пакета SDK Microsoft Information Protection поддерживаются только два типа хранилища состояний кэша: на диске и в памяти. Оба этих типа хранят определенные данные, в частности лицензии для защищенного содержимого и сведений о политике в виде обычного текста.

Чтобы повысить уровень безопасности пакета SDK, мы добавили поддержку второго типа кэша дисков, использующего криптографические API для конкретной платформы для защиты базы данных и его содержимого.

Приложение определяет тип кэша при загрузке профиля в составе FileProfileSettingsобъекта или PolicyProfileSettingsProtectionProfileSettings объекта. Тип кэша является статическим для жизни профиля. Для перехода на другой тип хранилища кэша требуется уничтожить существующий профиль и создать новый.

Типы хранилища кэша

Начиная с версии 1.3 пакета SDK для MIP доступны следующие типы кэша хранилища.

Тип Цель
InMemory Хранит кэш хранилища в памяти в приложении.
OnDisk Хранит базу данных на диске в каталоге, предоставленном в объекте параметров. База данных хранится в виде открытого текста.
OnDiskEncrypted Хранит базу данных на диске в каталоге, предоставленном в объекте параметров. База данных шифруется с помощью 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 8 и более поздней версии Windows 7 поддерживает только CacheStorageType::OnDisk
macOS Высокий Сьерра и более поздние версии
Ubuntu Linux 16.04 и более поздних версий Требуется SecretService и LinuxEncryptedCache флаг компонента.
Android Android 7.0 или более поздней версии
iOS Все поддерживаемые версии

Хотя пакет SDK MIP поддерживает другие дистрибутивы Linux, мы не проверили шифрование кэша в RedHat Enterprise Linux, CentOS или Debian.

Примечание.

Флаг компонента для включения хранилища кэша в Linux устанавливается с помощью mip::MipConfiguration::SetFeatureSettings()

Таблицы базы данных хранилища кэша

Пакет SDK MIP поддерживает две базы данных для кэша. Один — для пакетов SDK для защиты, а также для хранения сведений о состоянии защиты. Другой — для пакетов SDK политики и обслуживания сведений о политике и сведений о службе. Оба хранятся в пути, определенном в объекте параметров, в mip\mip.policies.sqlite3 и mip\mip.protection.sqlite3.

Примечание.

Пакет SDK MIP не гарантирует совместимость между различными версиями кэша. Рекомендуется очистить все файлы в каталоге MIP\ или любой альтернативный каталог, измененный с параметра по умолчанию, перед обновлением приложения до новой версии пакета SDK MIP.

База данных защиты

Таблица Характер использования Encrypted
AuthInfoStore Хранит сведения о проблеме проверки подлинности. No
ConsentStore Хранит результаты согласия для каждого обработчика. No
DnsInfoStore Сохраняет результаты поиска DNS для операций защиты No
EngineStore Хранит сведения о обработчике, связанные с пользователем и пользовательские данные клиента No
KeyStore Хранит симметричные ключи шифрования для каждого ядра. Да
LicenseStore Хранит сведения о лицензии для ранее расшифрованных данных. Да
SdInfoStore Хранит результаты обнаружения служб. No

Примечание.

Кэш LicenseStore требует, чтобы удостоверение было задано в подсистеме защиты или ядре файлов.

База данных политики

Таблица Характер использования Encrypted
KeyStore Хранит симметричные ключи шифрования для каждого ядра. Да
Политики Хранит сведения о политике меток для каждого пользователя. Да
PoliciesUrl Сохраняет URL-адрес службы серверной политики для конкретного пользователя. No
Конфиденциальность Хранит правила классификации для определенной политики пользователя. Да
ЧувствительностьUrls Сохраняет URL-адрес службы политики конфиденциальности серверной части для конкретного пользователя. No

Рекомендации по размеру базы данных

Размер базы данных зависит от двух факторов: количество модулей, добавляемых в кэш, и количество лицензий на защиту, которые были кэшированы. По состоянию на пакет SDK 1.3 MIP не существует механизма очистки кэша лицензий по истечении срока действия. Для удаления кэша потребуется выполнить внешний процесс, если он увеличивается больше, чем требуется.

Самым значительным участником роста базы данных будет кэш лицензий защиты. Если кэширование лицензий не требуется, либо потому, что круглые пути службы не повлияют на производительность приложения, либо кэш может увеличиться слишком большой, кэш лицензий может быть отключен. Это достигается, установив 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);

Обработчики кэширования

В пакете SDK MIP обработчик создается для каждого пользователя, выполняющего любую проверку подлинности. Подсистемы предоставляют интерфейс для всех операций, выполняемых от имени удостоверения, прошедшего проверку подлинности. Как описано в концепциях профилей и обработчиков, FileEngine, PolicyEngine или ProtectionEngine каждый имеет два состояния CREATED и LOADED. Подсистему необходимо создать и загрузить, чтобы она могла выполнять операции пакета SDK. Если подсистема не используется, пакет SDK кэширует подсистему и сохраняет его в состоянии до тех пор, пока это возможно в CREATED зависимости от доступных ресурсов. Класс профиля каждого соответствующего пакета SDK также предоставляет метод UnloadEngineAsync для явного достижения этого.

Каждый модуль имеет уникальный идентификатор id , используемый во всех операциях управления обработчиком. Клиентское приложение может явно предоставить идентификатор или создать пакет SDK, если он не предоставлен приложением. Если уникальный идентификатор предоставляется с помощью объектов параметров ядра во время создания обработчика, а кэширование включено в профиле 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 приведет к дополнительным круговым поездкам службы для получения политики получения лицензий, которые, возможно, уже были кэшированы для существующего модуля. Кэширование идентификатора модуля позволяет пакету SDK автономный доступ к ранее расшифровке информации и общим улучшениям производительности.

Next Steps

Далее узнайте больше о концепциях объектов Profile and Engine, чтобы понять, как правильно задать идентификаторы обработчиков MIP для правильного использования кэширования пакета SDK MIP.