Microsoft Information Protection SDK — koncepcje programu obsługi ochrony

Zestaw SDK ochrony przed zabezpieczeniami MIP udostępnia funkcje do szyfrowania i odszyfrowywania chronionych strumieni i buforów, sprawdzania dostępu, uzyskiwania licencji publikowania i uzyskiwania atrybutów z chronionych mip::ProtectionHandler informacji.

Wymagania

Do utworzenia ProtectionHandler pliku do pracy z określonym plikiem są wymagane:

  • A mip::MipContext
  • A mip::ProtectionProfile
  • A mip::ProtectionEngine added to the ProtectionProfile
  • Klasa dziedzicząca mip::ProtectionHandler::Observer .
  • Licencja mip::ProtectionDescriptor na publikację lub licencję

Tworzenie programu obsługi ochrony

mip::ProtectionHandler Obiekty są skonstruowane przez udostępnienie albo licencji publikowania ProtectionDescriptor szeregowego, albo przez jedną z dwóch ProtectionEngine funkcji. Deskryptor ochrony musi zostać wygenerowany w celu ochrony informacji w formacie zwykłego tekstu, które nie mają jeszcze licencji publikowania. Licencja publikowania będzie używana podczas odszyfrowywania już chronionej zawartości lub ochrony zawartości, w której licencja została już skonstruowana. Zawartości chronionej nie można odszyfrować bez skojarzonej licencji publikowania.

mip::ProtectionEngine udostępnia dwie funkcje służące do ProtectionHandler tworzenia Parametry są takie same, z wyjątkiem programu obsługi lub licencji publikowania jako pierwszego parametru.

  • mip::ProtectionEngine::CreateProtectionHandlerFromDescriptorAsync
    • Wymaga ProtectionDescriptor pierwszego parametru.
  • mip::ProtectionEngine::CreateProtectionHandlerFromPublishingLicenseAsync
    • Wymaga licencji publikowania szeregowego, std::vector<unint8_t> przechowywanej jako pierwszy parametr.

Tworzenie z deskryptora

Jeśli chronienie zawartości, która nie jest jeszcze chroniona, lub zastosowanie nowej ochrony do zawartości, co oznacza, że została odszyfrowana, musi mip::ProtectionDescriptor zostać skonstruowana. Po skonstruowaniu jest przekazywana mip::ProtectionEngine::CreateProtectionHandlerFromDescriptorAsync() do, a wynik jest zwracany za pośrednictwem mip::ProtectionHandler::Observer .

auto handlerPromise = std::make_shared<std::promise<std::shared_ptr<ProtectionHandler>>>();
auto handlerFuture = handlerPromise->get_future();
auto observer = std::make_shared<ProtectionHandlerObserverImpl>();

//Refer to ProtectionDescriptor docs for details on creating the descriptor
auto descriptor = CreateProtectionDescriptor(); //Stub function

mEngine->CreateProtectionHandlerFromDescriptorAsync(
    descriptor,
    mip::ProtectionHandlerCreationOptions::None,
    observer,
    handlerPromise);

auto handler = handlerFuture.get();

Po pomyślnym utworzeniu obiektu można wykonywać operacje na ProtectionHandler plikach (get/set/delete/commit).

Tworzenie z licencji publikowania

W tym przykładzie przyjęto założenie, że licencja publikowania została już odczytana z części źródłowej i zapisana w 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);

auto handlerPromise = std::make_shared<std::promise<std::shared_ptr<ProtectionHandler>>>();
auto handlerFuture = handlerPromise->get_future();

shared_ptr<ProtectionHandlerObserverImpl> handleObserver =
    std::make_shared<ProtectionHandlerObserverImpl>();

mEngine->CreateProtectionHandlerFromPublishingLicenseAsync(
    serializedPublishingLicense,
    mip::ProtectionHandlerCreationOptions::None,
    handleObserver,
    handlerPromise);

auto handler = handlerFuture.get();