Microsoft Information Protection SDK – Cachelagring
MIP SDK implementerar en SQLite3-databas för att underhålla SDK-cachelagring. Före version 1.3 av Microsoft Information Protection SDK stöds endast två typer av lagring av cachetillstånd: På disk och i minnet. Båda dessa typer lagrade vissa data, särskilt licenser för skyddat innehåll och principinformation, i klartext.
För att förbättra SDK:ets säkerhetsstatus har vi lagt till stöd för en andra typ av diskcache som använder plattformsspecifika kryptografiska API:er för att skydda databasen och dess innehåll.
Programmet definierar cachetypen när profilen läses in som en del av objekten FileProfileSettings
, PolicyProfileSettings
eller ProtectionProfileSettings
. Cachetypen är statisk under profilens livslängd. Om du ändrar till en annan typ av cachelagringstyp måste du förstöra den befintliga profilen och skapa en ny.
Cachelagringstyper
Från och med MIP SDK version 1.3 är följande typer av lagringscache tillgängliga.
Typ | Syfte |
---|---|
InMemory | Underhåller lagringscacheminnet i minnet i programmet. |
OnDisk | Lagrar databasen på disken i katalogen som anges i inställningsobjektet. Databasen lagras i klartext. |
OnDiskEncrypted | Lagrar databasen på disken i katalogen som anges i inställningsobjektet. Databasen krypteras med os-specifika API:er. |
Varje motor som genereras av programmet genererar en ny krypteringsnyckel.
Cachelagring anges via ett av profilinställningsobjekten mip::CacheStorageType
via uppräkningen.
FileProfile::Settings profileSettings(mMipContext,
mip::CacheStorageType::OnDiskEncrypted, // Define the storage type to use.
mAuthDelegate,
std::make_shared<sample::consent::ConsentDelegateImpl>(),
std::make_shared<FileProfileObserver>());
När du ska använda varje typ
Cachelagring är viktigt för att upprätthålla offlineåtkomst till tidigare dekrypterad information och säkerställa prestanda för dekrypteringsåtgärder när data tidigare har förbrukats.
- I Minneslagring: Använd den här lagringstypen för långvariga processer där det inte krävs någon lagring av princip- eller licenscacheinformationen mellan tjänstomstarter.
- På disk: Använd den här lagringstypen för program där processer ofta kan stoppas och startas, men måste underhålla cacheminnet för princip-, licens- och tjänstidentifiering mellan omstarter. Den här lagringscachetypen är klartext, så passar bättre för serverarbetsbelastningar där användarna inte har åtkomst till tillståndslagringen. Exempel på detta är en Windows-tjänst eller Linux-daemon som körs på en server eller ett SaaS-program där endast tjänstadministratörer skulle ha åtkomst till tillståndsdata.
- På Disk och Krypterad: Använd den här lagringstypen för program där processer ofta kan stoppas och startas, men måste underhålla cacheminnet för princip-, licens- och tjänstidentifiering mellan omstarter. Den här lagringscachen är krypterad, så passar bättre för arbetsstationsprogram där en användare kan bläddra och identifiera tillståndsdatabasen. Krypteringen hjälper till att säkerställa att nyfikna användare inte har åtkomst till via principinnehållet eller innehållet i skyddslicensen i oformaterad text. Det är viktigt att observera att data i alla fall krypteras med nycklar som användaren kan komma åt. En skicklig angripare kan dekryptera cachen med minimal ansträngning, men det förhindrar manipulering och surfning.
Plattformar som stöds för kryptering
Plattform | Version: | Kommentar |
---|---|---|
Microsoft Windows | Windows 8 och senare | Windows 7 stöder endast CacheStorageType::OnDisk |
macOS | Höga Sierra och senare | |
Ubuntu Linux | 16.04 och senare | Kräver SecretService och LinuxEncryptedCache funktionsflagga. |
Android | Android 7.0 eller senare | |
iOS | Alla versioner som stöds |
Även om MIP SDK stöder andra Linux-distributioner testade vi inte cachekryptering på RedHat Enterprise Linux, CentOS eller Debian.
Kommentar
Funktionsflaggan för att aktivera cachelagring i Linux anges via mip::MipConfiguration::SetFeatureSettings()
Cachelagringsdatabastabeller
MIP SDK underhåller två databaser för cacheminnet. Den ena gäller SDK:er för skydd och underhåll av information om skyddstillstånd. Det andra gäller princip-SDK:er och underhåll av principinformation och tjänstinformation. Båda lagras i sökvägen som definieras i inställningsobjektet, under mip\mip.policies.sqlite3 och mip\mip.protection.sqlite3.
Kommentar
MIP SDK garanterar inte kompatibilitet mellan olika versioner av cacheminnet. Det är lämpligt att rensa alla filer i katalogen mip\ eller någon annan katalog som ändrats från standardinställningen innan du uppgraderar programmet till en ny version av MIP SDK.
Skyddsdatabas
Register | Syfte | Krypterad |
---|---|---|
AuthInfoStore | Lagrar information om autentiseringsutmaningar. | Nej |
ConsentStore | Lagrar medgivanderesultat för varje motor. | Nej |
DnsInfoStore | Lagrar DNS-sökningsresultat för skyddsåtgärder | Nej |
EngineStore | Lagrar motorinformation, tillhörande användare och anpassade klientdata | Nej |
KeyStore | Lagrar symmetriska krypteringsnycklar för varje motor. | Ja |
LicenseStore | Butiker använder licensinformation för tidigare dekrypterade data. | Ja |
SdInfoStore | Lagrar resultat för tjänstidentifiering. | Nej |
Kommentar
LicenseStore-cachen kräver att en identitet anges på skyddsmotorn eller filmotorn.
Principdatabas
Register | Syfte | Krypterad |
---|---|---|
KeyStore | Lagrar symmetriska krypteringsnycklar för varje motor. | Ja |
Policyer | Lagrar information om etikettprinciper för varje användare. | Ja |
PoliciesUrl | Lagrar url:en för serverdelsprinciptjänsten för en specifik användare. | Nej |
Känslighet | Lagrar klassificeringsregler för en specifik användarprincip. | Ja |
SensitivityUrls | Lagrar url:en för serverdelens känslighetsprinciptjänst för en specifik användare. | Nej |
Överväganden för databasstorlek
Databasens storlek beror på två faktorer: Antalet motorer som läggs till i cacheminnet och mängden skyddslicenser som har cachelagrats. Från och med MIP SDK 1.3 finns det ingen mekanism för att rensa licenscachen när de upphör att gälla. Det måste finnas en extern process för att ta bort cacheminnet om det växer större än vad som önskas.
Den viktigaste bidragsgivaren till databastillväxt är skyddslicenscacheminnet. Om licensieringscachelagring inte krävs, antingen för att tjänstens tur och retur-resor inte påverkar programmets prestanda eller om cacheminnet kan bli för stort, kan licenscachen inaktiveras. Detta åstadkommer du genom att ange CanCacheLicenses
värdet false för FileProfile::Settings
objektet.
FileProfile::Settings profileSettings(mMipContext,
mip::CacheStorageType::OnDiskEncrypted,
mAuthDelegate,
std::make_shared<sample::consent::ConsentDelegateImpl>(),
std::make_shared<FileProfileObserver>());
profileSettings.SetCanCacheLicenses(false);
Cachelagringsmotorer
I MIP SDK skapas en motor för varje användare som utför en autentiserad åtgärd. Motorer tillhandahåller ett gränssnitt för alla åtgärder som utförs för en autentiserad identitet. Som beskrivs i begreppen Profiler och motorer har FileEngine, PolicyEngine eller ProtectionEngine två tillstånd CREATED
och LOADED
. En motor måste skapas och läsas in för att den ska kunna utföra SDK-åtgärder. Om en motor inte används cachelagrar SDK:t motorn och behåller den i CREATED
tillstånd så länge som möjligt beroende på tillgängliga resurser. Varje respektive SDK:s profilklass tillhandahåller också en metod UnloadEngineAsync
för att uppnå detta explicit.
Varje motor har en unik identifierare id
som används i alla motorhanteringsåtgärder. Klientprogrammet kan uttryckligen ange ett ID, eller så kan SDK generera ett, om det inte tillhandahålls av programmet. Om en unik identifierare tillhandahålls med hjälp av motorinställningsobjekt när motorn skapas och cachelagring aktiveras i API-profilen enligt beskrivningen ovan, kan samma motorer användas varje gång användaren utför en åtgärd med SDK:n. Följ kodfragmenten för att skapa en [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)
.
Om du inte anger ett befintligt engineId resulterar det i extra tjänsteresor för att hämta principen och hämtar licenser som kanske redan har cachelagrats för den befintliga motorn. Genom att cachelagra motor-ID:t kan SDK:t offlineåtkomst till tidigare dekrypterad information och allmänna prestandaförbättringar.
Nästa steg
Läs sedan mer om koncept för profil- och motorobjekt för att förstå hur du korrekt ställer in MIP-motor-ID:n så att MIP SDK-cachelagring används korrekt.