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


SDK Microsoft Information Protection — концепции обработчика защиты

В пакете SDK защиты mip::ProtectionHandler MIP предоставляются функции для шифрования и расшифровки защищенных потоков и буферов, выполнения проверок доступа, получения лицензии на публикацию и получения атрибутов из защищенной информации.

Требования

Для создания ProtectionHandler, чтобы работать с определенным файлом, требуется:

  • Один mip::MipContext
  • mip::ProtectionProfile
  • Добавлено mip::ProtectionEngine в ProtectionProfile
  • Класс, наследующий mip::ProtectionHandler::Observer.
  • Лицензия на публикацию mip::ProtectionDescriptor

Создание обработчика защиты

mip::ProtectionHandler объекты создаются для операций защиты или потребления . Обработчик создается с помощью одной из четырех функций в зависимости от сценария.

  • mip::ProtectionEngine->CreateProtectionHandlerForConsumptionAsync()
  • mip::ProtectionEngine->CreateProtectionHandlerForConsumption()
  • mip::ProtectionEngine->CreateProtectionHandlerForPublishingAsync()
  • mip::ProtectionEngine->CreateProtectionHandlerForPublishing()

Эти функции принимают либо mip::ProtectionHandler::PublishingSettings, либо mip::ProtectionHandler::ConsumptionSettings объект.

Создание обработчика публикации

Для создания обработчика публикации требуется три шага.

  1. Создайте объект mip::ProtectionDescriptor.
  2. Используйте mip::ProtectionDescriptor чтобы создать экземпляр mip::ProtectionHandler::PublishingSettings.
  3. Вызовите mip::ProtectionEngine::CreateProtectionHandlerForPublishingAsync(), передав объект PublishingSettings, наблюдателя и обещание.

Создать из дескриптора

Если требуется защитить содержимое, которое еще не было защищено, или применить к содержимому новую защиту, что подразумевает, что оно было расшифровано, необходимо создать mip::ProtectionDescriptor. После создания он используется для создания экземпляра mip::ProtectionHandler::PublishingSettings() объекта. Результат возвращается через mip::ProtectionHandler::Observer.

// Create the protection descriptor, passing in a templateId. 
auto descriptorBuilder = mip::ProtectionDescriptorBuilder::CreateFromTemplate(protectionOptions.templateId);
std::shared_ptr<mip::ProtectionDescriptor> descriptor = descriptorBuilder->Build();

// Define the handler promise, future, and observer.
auto handlerPromise = std::make_shared<std::promise<std::shared_ptr<ProtectionHandler>>>();
auto handlerFuture = handlerPromise->get_future();
auto handlerObserver = std::make_shared<ProtectionHandlerObserverImpl>();

// Create the PublishingSettings object using the previously-created descriptor as input.
mip::ProtectionHandler::PublishingSettings publishingSettings = mip::ProtectionHandler::PublishingSettings(descriptor);

// Create/get the publishing handler from the publishing settings, observer, and promise.
mEngine->CreateProtectionHandlerForPublishingAsync(publishingSettings, handlerObserver, handlerPromise);
auto handler = handlerFuture.get();
return handler;

После успешного ProtectionHandler создания объекта можно выполнить операции защиты (шифрование и расшифровка). Лицензия на публикацию должна быть получена из обработчика и сохранена с зашифрованным содержимым. Лицензия на публикацию может быть получена путем вызова: handler->GetSerializedPublishingLicense();

Защищенное содержимое без соответствующей лицензии на публикацию не может быть расшифровывается.

Создание обработчика потребления

Для создания обработчика публикации требуется три шага.

  1. Извлеките сериализованную лицензию на публикацию из std::vector<uint8_t> защищенного содержимого.
  2. Используйте сериализованную лицензию публикации для инициализации mip::ProtectionHandler::ConsumptionSettings.
  3. Вызовите mip::ProtectionEngine::CreateProtectionHandlerForConsumptionAsync(), передав объект ConsumptionSettings, наблюдателя и обещание.

В этом примере предполагается, что лицензия на публикацию уже была считана из некоторого источника и находится в std::vector<uint8_t> serializedPublishingLicense.

//TODO: Implement GetPublishingLicense()
//Snip implies that function reads PL from source file, database, stream, etc.
std::vector<uint8_t> serializedPublishingLicense = GetPublishingLicense(filePath);

// Define the handler promise, future, and observer.
auto handlerPromise = std::make_shared<std::promise<std::shared_ptr<ProtectionHandler>>>();
auto handlerFuture = handlerPromise->get_future();
shared_ptr<ProtectionHandlerObserverImpl> handlerObserver = std::make_shared<ProtectionHandlerObserverImpl>();

// Create the consumption settings object from the publishing license.
mip::ProtectionHandler::ConsumptionSettings consumptionSettings = mip::ProtectionHandler::ConsumptionSettings(serializedPublishingLicense);

// Create/get the publishing handler from the publishing settings, observer, and promise.
mEngine->CreateProtectionHandlerForConsumptionAsync(consumptionSettings, handlerObserver, handlerPromise);
auto handler = handlerFuture.get();