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
, PolicyProfileSettings
of 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.
Notitie
De MIP SDK garandeert geen compatibiliteit in verschillende versies van de cache. Het is raadzaam om alle bestanden in de mip\-map te wissen, of een alternatieve map is gewijzigd van de standaardinstelling voordat u de toepassing bijwerkt 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 | 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
Tabel | Doel | Versleuteld |
---|---|---|
KeyStore | Slaat symmetrische versleutelingssleutels voor elke engine op. | Ja |
Beleid | 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.