Dela via


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, PolicyProfileSettingseller 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.

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
Principer 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);

Cachelagring motorer

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. Cachelagring motor-ID:t ger SDK 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.