Microsoft Information Protection SDK - Cacheopslag

De MIP SDK implementeert een SQLite3-database voor het onderhouden van SDK-cacheopslag. Vóór versie 1.3 van de Microsoft Information Protection SDK werden slechts twee typen cachestatusopslag ondersteund: op schijf en in het geheugen. Beide typen hebben bepaalde gegevens, met name licenties voor beveiligde inhoud en beleidsinformatie, opgeslagen in tekst zonder opmaak.

Ter verbetering van de beveiligingspostuur van de SDK hebben we ondersteuning toegevoegd voor een tweede type on-diskcache die platformspecifieke cryptografische API's gebruikt om de database en de inhoud ervan te beveiligen.

De toepassing definieert het cachetype bij het laden van het profiel als onderdeel van de FileProfileSettings, PolicyProfileSettingsof ProtectionProfileSettings objecten. Het cachetype is statisch voor de levensduur van het profiel. Als u over een ander type cacheopslagtype gaat, moet u het bestaande profiel vernietigen en een nieuw profiel maken.

Cacheopslagtypen

Vanaf MIP SDK-release 1.3 zijn de volgende typen opslagcache beschikbaar.

Type Doel
InMemory Onderhoudt de opslagcache in het geheugen in de toepassing.
OnDisk Slaat de database op schijf op in de map die is opgegeven in het instellingenobject. De database wordt opgeslagen in tekst zonder opmaak.
OnDiskEncrypted Slaat de database op schijf op in de map die is opgegeven in het instellingenobject. De database wordt versleuteld met behulp van OS-specifieke API's.

Elke engine die door de toepassing wordt gegenereerd, genereert een nieuwe versleutelingssleutel.

Cacheopslag wordt ingesteld via een van de profielinstellingenobjecten, via de mip::CacheStorageType enum.

FileProfile::Settings profileSettings(mMipContext,
    mip::CacheStorageType::OnDiskEncrypted, // Define the storage type to use.
    mAuthDelegate,
    std::make_shared<sample::consent::ConsentDelegateImpl>(),
    std::make_shared<FileProfileObserver>());

Wanneer elk type te gebruiken

Cacheopslag is belangrijk voor het onderhouden van offlinetoegang tot eerder ontsleutelde informatie en het garanderen van prestaties voor ontsleutelingsbewerkingen wanneer gegevens eerder zijn gebruikt.

  • In Geheugenopslag: gebruik dit opslagtype voor langdurige processen waarbij het beleid of de licentiecachegegevens tijdens het opnieuw opstarten van de service niet nodig zijn.
  • Op schijf: gebruik dit opslagtype voor toepassingen waarbij processen vaak kunnen stoppen en starten, maar het beleid, de licentie en de servicedetectiecache moeten behouden tijdens het opnieuw opstarten. Dit type opslagcache is tekst zonder opmaak, dus is beter geschikt voor serverworkloads waar gebruikers geen toegang hebben tot de statusopslag. Voorbeelden hiervan zijn een Windows-service of Linux-daemon die wordt uitgevoerd op een server of een SaaS-toepassing waarbij alleen servicebeheerders toegang hebben tot de statusgegevens.
  • Op schijf en versleuteld: gebruik dit opslagtype voor toepassingen waarbij processen vaak stoppen en starten, maar moeten beleid, licentie en servicedetectiecache behouden tijdens het opnieuw opstarten. Deze opslagcache is versleuteld, dus is beter geschikt voor werkstationtoepassingen waar een gebruiker door de statusdatabase kan bladeren en detecteren. De versleuteling helpt ervoor te zorgen dat prying gebruikers geen toegang hebben via de inhoud van het beleid of de beveiligingslicentie-inhoud in tekst zonder opmaak. Het is belangrijk te weten dat in alle gevallen de gegevens worden versleuteld met sleutels waartoe de gebruiker mogelijk toegang heeft. Een ervaren aanvaller kan de cache met minimale inspanning ontsleutelen, maar dit voorkomt manipulatie en browsen.

Ondersteunde platforms voor versleuteling

Platform Versie Opmerkingen
Microsoft Windows Windows 8 en hoger Windows 7 ondersteunt alleen CacheStorageType::OnDisk
macOS High Sierra en later
Ubuntu Linux 16.04 en hoger Vereist SecretService en LinuxEncryptedCache functievlag.
Android Android 7.0 of hoger
iOS Alle ondersteunde versies

Hoewel de MIP SDK ondersteuning biedt voor andere Linux-distributies, hebben we de cacheversleuteling niet getest op RedHat Enterprise Linux, CentOS of Debian.

Notitie

De functievlag voor het inschakelen van cacheopslag op Linux wordt ingesteld via mip::MipConfiguration::SetFeatureSettings()

Cacheopslagdatabasetabellen

De MIP SDK onderhoudt twee databases voor cache. Een daarvan is voor de beveiligings-SDK's en het onderhouden van beveiligingsstatusdetails. De andere is voor de beleids-SDK's en het onderhouden van beleidsdetails en servicegegevens. Beide worden opgeslagen in het pad dat is gedefinieerd in het instellingenobject, onder mip\mip.policies.sqlite3 en mip\mip.protection.sqlite3.

Beveiligingsdatabase

Table Doel Versleuteld
AuthInfoStore Slaat details van verificatievraag op. Nee
ConsentStore Slaat toestemmingsresultaten op voor elke engine. Nee
DnsInfoStore Slaat DNS-opzoekresultaten op voor beveiligingsbewerkingen Nee
EngineStore Slaat enginegegevens, gekoppelde gebruikers en aangepaste clientgegevens op Nee
Sleutelbewaarplaats Slaat symmetrische versleutelingssleutels voor elke engine op. Ja
LicenseStore Slaat gebruikslicentiegegevens op voor eerder ontsleutelde gegevens. Ja
SdInfoStore Slaat de resultaten van servicedetectie op. Nr.

Notitie

Voor de LicenseStore-cache moet een identiteit worden ingesteld op de beveiligingsengine of bestandsengine.

Beleidsdatabase

Table Doel Versleuteld
Sleutelbewaarplaats Slaat symmetrische versleutelingssleutels voor elke engine op. Ja
Beleidsregels Slaat labelbeleidsgegevens op voor elke gebruiker. Ja
PoliciesUrl Slaat de URL van de back-endbeleidsservice op voor specifieke gebruiker. Nee
Vertrouwelijkheid Slaat classificatieregels op voor een specifiek gebruikersbeleid. Ja
SensitivityUrls Slaat de URL van de service voor back-endgevoeligheidsbeleid op voor specifieke gebruiker. Nee

Overwegingen voor databasegrootte

De databasegrootte is afhankelijk van twee factoren: het aantal engines dat wordt toegevoegd aan de cache en de hoeveelheid beveiligingslicenties die in de cache zijn opgeslagen. Vanaf MIP SDK 1.3 is er geen mechanisme om de licentiecache op te schonen wanneer ze verlopen. Er moet een extern proces zijn om de cache te verwijderen als deze groter wordt dan gewenst is.

De belangrijkste bijdrager aan databasegroei is de cache voor beveiligingslicenties. Als caching van licenties niet vereist is, ofwel omdat de retouren van de service geen invloed hebben op de prestaties van uw toepassing of de cache te groot wordt, kan de licentiecache worden uitgeschakeld. Dit wordt bereikt door het FileProfile::Settings object in te stellen CanCacheLicenses op false.

FileProfile::Settings profileSettings(mMipContext,
    mip::CacheStorageType::OnDiskEncrypted,
    mAuthDelegate,
    std::make_shared<sample::consent::ConsentDelegateImpl>(),
    std::make_shared<FileProfileObserver>());

profileSettings.SetCanCacheLicenses(false);

Caching-engines

In de MIP SDK wordt een engine gemaakt voor elke gebruiker die een geverifieerde bewerking uitvoert. Engines bieden een interface voor alle bewerkingen die worden uitgevoerd namens een geverifieerde identiteit. Zoals besproken in de concepten Profielen en Engines, FileEngine, PolicyEngine of ProtectionEngine, heeft elk twee statussen CREATED en LOADED. Er moet een engine worden gemaakt en geladen om SDK-bewerkingen uit te kunnen voeren. Als een engine niet in gebruik is, slaat de SDK de engine in de cache op en behoudt deze CREATED zo lang mogelijk, afhankelijk van de beschikbare resources. De profielklasse van elke respectieve SDK biedt ook een methode UnloadEngineAsync om dit expliciet te bereiken.

Elke engine heeft een unieke id id die wordt gebruikt in alle enginebeheerbewerkingen. De clienttoepassing kan expliciet een id opgeven of de SDK kan er een genereren als deze niet wordt geleverd door de toepassing. Als er een unieke id wordt opgegeven met behulp van engine-instellingenobjecten op het moment van het maken van de engine en caching is ingeschakeld in het API-profiel, zoals hierboven beschreven, kunnen dezelfde engines worden gebruikt telkens wanneer de gebruiker een bewerking uitvoert met de SDK. Volg de codefragmenten voor het maken van een [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).

Als u een bestaande engineId niet opgeeft, worden er extra retouren uitgevoerd om beleid op te halen en worden licenties opgehaald die mogelijk al in de cache zijn opgeslagen voor de bestaande engine. Door de engine-id in de cache op te cachen, heeft de SDK offline toegang tot eerder ontsleutelde informatie en algemene prestatieverbeteringen.

Volgende stappen

Lees vervolgens meer over de concepten profiel- en engineobjecten om te begrijpen hoe u DE ID's van DE MIP-engine correct instelt om de MIP SDK-caching correct te gebruiken.