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 niet nodig is om de beleids- of licentiecachegegevens te behouden tijdens het opnieuw opstarten van de service.
  • 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 nieuwsgierige gebruikers geen toegang hebben tot de inhoud van het beleidsdocument of de beveiligingslicentie-inhoud in platte tekst. 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 11, ondersteuningsversie van Windows Server
macOS High Sierra en later
Ubuntu Linux 22.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()

Cache-opslagdatabasetabellen

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.

Notitie

De MIP SDK garandeert geen compatibiliteit in verschillende versies van de cache. Het is raadzaam om alle bestanden in de mip-directory te wissen, of in een alternatieve directory die is gewijzigd van de standaardinstelling, voordat u de applicatie upgradet naar een nieuwe versie van de MIP SDK.

Beveiligingsdatabase

Tabel 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
KeyStore Slaat symmetrische versleutelingssleutels voor elke engine op. Ja
LicenseStore Gebruikslicentiegegevens worden gebruikt voor eerder ontsleutelde gegevens. Ja
SdInfoStore Slaat de resultaten van servicedetectie op. Nee

Notitie

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

Beleidsdatabase

Tabel Doel Versleuteld
KeyStore Slaat symmetrische versleutelingssleutels voor elke engine op. Ja
Beleid Slaat labelbeleidsgegevens op voor elke gebruiker. Ja
BeleidUrl Slaat de URL van de back-endbeleidsservice op voor specifieke gebruiker. Nee
Gevoeligheid Slaat classificatieregels op voor een specifiek gebruikersbeleid. Ja
Gevoeligheids-URLs Slaat de URL van de dienst voor het backend-gevoeligheidsbeleid op voor een 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.18 kunnen DeleteStoredData() op ProtectionEngine worden gebruikt om opgeslagen gegevens in de cache programmatisch te verwijderen. Voor eerdere versies kan een extern proces nodig 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, hetzij omdat de service-aanroepen geen invloed hebben op de prestaties van uw toepassing, hetzij omdat de cache te groot kan worden, kan de licentiecache worden uitgeschakeld. Dit wordt bereikt door CanCacheLicenses op het FileProfile::Settings object naar false te zetten.

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

profileSettings.SetCanCacheLicenses(false);

Cachingengines

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, hebben FileEngine, PolicyEngine of ProtectionEngine elk twee toestanden 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, zet de SDK de engine in de cache en behoudt deze in CREATED zo lang mogelijk, afhankelijk van de beschikbare middelen. 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 geen bestaande engineId opgeeft, resulteert dit in extra serviceaanroepen om beleid op te halen en licenties op te halen die mogelijk al zijn opgeslagen in de cache 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 goed te gebruiken.