Översikt över ASP.NET Core Data Protection
ASP.NET Core tillhandahåller ett kryptografiskt API för att skydda data, inklusive nyckelhantering och rotation.
Webbappar behöver ofta lagra känsliga data. Windows dataskydds-API (DPAPI) är inte avsett för användning i webbappar.
ASP.NET Core-dataskyddsstacken har utformats för att:
- Tillhandahålla en inbyggd lösning för de flesta webbscenarier.
- Åtgärda många av bristerna i det tidigare krypteringssystemet.
- Fungerar som ersättning för elementet
<machineKey>
i ASP.NET 1.x–4.x.
Problemuttryck
Jag behöver bevara betrodd information för senare hämtning, men jag litar inte på beständighetsmekanismen. I webbtermer kan detta skrivas som jag behöver skicka tur och retur betrodd status via en obetrodd klient.
Äkthet, integritet och manipulationssäkerhet är krav. Det kanoniska exemplet på detta är en autentisering cookie eller ägartoken. Servern genererar en jag är Groot och har xyz-behörigheter token och skickar den till klienten. Klienten presenterar denna token tillbaka till servern, men servern behöver någon form av försäkran om att klienten inte har förfalskat token.
Konfidentialitet är ett krav. Eftersom det beständiga tillståndet är betrott av servern kan det här tillståndet innehålla information som inte ska lämnas ut till en klient som inte är betrodd. Till exempel:
- En filväg.
- En behörighet.
- Ett handtag eller annan indirekt referens.
- Vissa serverspecifika data.
Isolering är ett krav. Eftersom moderna appar är komponentbaserade vill enskilda komponenter dra nytta av det här systemet utan hänsyn till andra komponenter i systemet. Anta till exempel att en ägartokenkomponent använder den här stacken. Den bör fungera utan interferens, till exempel från en anti-CSRF-mekanism som också använder samma stack.
Vissa vanliga antaganden kan begränsa kravens omfattning:
- Alla tjänster som körs inom kryptosystemet är lika betrodda.
- Data behöver inte genereras eller förbrukas utanför tjänsterna under vår direkta kontroll.
- Åtgärderna måste vara snabba eftersom varje begäran till webbtjänsten kan gå igenom kryptosystemet en eller flera gånger. Hastighetskravet gör symmetrisk kryptografi idealisk. Asymmetrisk kryptografi används inte förrän det krävs.
Designfilosofi
ASP.NET Core-dataskydd är en enkel att använda dataskyddsstack. Den baseras på följande principer:
- Enkelhet vid konfiguration. Systemet strävar efter nollkonfiguration. I situationer där utvecklare behöver konfigurera en specifik aspekt, till exempel nyckellagringsplatsen, är dessa specifika konfigurationer inte svåra.
- Erbjuda ett grundläggande api för konsumenter. API:erna är enkla att använda korrekt och svåra att använda felaktigt.
- Utvecklare behöver inte lära sig viktiga hanteringsprinciper. Systemet hanterar val av algoritm och nyckellivslängd åt utvecklaren. Utvecklaren har inte åtkomst till råmaterialet.
- Nycklar skyddas i vila så mycket som möjligt. Systemet räknar ut en lämplig standardskyddsmekanism och tillämpar den automatiskt.
Dataskydds-API:erna är inte i första hand avsedda för obegränsad beständighet av konfidentiella nyttolaster. Andra tekniker, till exempel Windows CNG DPAPI och Azure Rights Management är mer lämpade för scenariot med obegränsad lagring. De har motsvarande starka funktioner för nyckelhantering. Med detta sagt kan api:erna för ASP.NET Core-dataskydd användas för långsiktigt skydd av konfidentiella data.
Publik
Dataskyddssystemet tillhandahåller API:er som riktar sig till tre huvudsakliga målgrupper:
konsument-API:er riktar sig till applikations- och ramverksutvecklare.
Jag vill inte lära mig mer om hur stacken fungerar eller hur den är konfigurerad. Jag vill bara utföra en åtgärd med hög sannolikhet för att lyckas använda API:erna.
API:erna för konfigurationen riktar sig till app-utvecklare och systemadministratörer.
måste jag meddela dataskyddssystemet att min miljö kräver icke-standardsökvägar eller inställningar.
API:erna för utökningsbarhet riktar sig till utvecklare som ansvarar för att implementera anpassad princip. Användningen av dessa API:er är begränsad till sällsynta situationer och utvecklare med säkerhetsupplevelse.
Jag måste ersätta en hel komponent i systemet eftersom jag har verkligt unika beteendekrav. Jag är villig att lära mig ovanligt använda delar av API-ytan för att skapa ett plugin-program som uppfyller mina krav.
Paketlayout
Dataskyddsstacken består av fem paket:
Microsoft.AspNetCore.DataProtection.Abstractions innehåller:
- IDataProtectionProvider och IDataProtector gränssnitt för att skapa dataskyddstjänster.
- Användbara tilläggsmetoder för att arbeta med dessa typer. till exempel IDataProtector.Protect
Om dataskyddssystemet instansieras någon annanstans och du använder API:et refererar du till
Microsoft.AspNetCore.DataProtection.Abstractions
.Microsoft.AspNetCore.DataProtection innehåller kärnimplementeringen av dataskyddssystemet, inklusive:
- Grundläggande kryptografiska åtgärder.
- Nyckelhantering.
- Konfiguration och utökningsbarhet.
Om du vill instansiera dataskyddssystemet refererar du till
Microsoft.AspNetCore.DataProtection
. Du kan behöva referera till dataskyddssystemet när:- Lägga till den i en IServiceCollection.
- Ändra eller utöka dess beteende.
Microsoft.AspNetCore.DataProtection.Extensions innehåller ytterligare API:er som utvecklare kan ha nytta av men som inte hör hemma i kärnpaketet. Det här paketet innehåller till exempel:
- Fabriksmetoder för att instansiera dataskyddssystemet så att nycklar lagras på en plats i filsystemet utan beroendeinjektion. Se DataProtectionProvider.
- Tilläggsmetoder för att begränsa livslängden för skyddade nyttolaster. Se ITimeLimitedDataProtector.
Microsoft.AspNetCore.DataProtection.SystemWeb kan installeras i en befintlig ASP.NET 4.x-app för att omdirigera dess
<machineKey>
åtgärder för att använda den nya ASP.NET Core-dataskyddsstacken. Mer information finns i Ersätt ASP.NET machineKey i ASP.NET Core.Microsoft.AspNetCore.Cryptography.KeyDerivation tillhandahåller en implementering av PBKDF2-lösenordshashningsrutinen och kan användas av system som måste hantera användarlösenord på ett säkert sätt. Mer information finns i Hash-lösenord i ASP.NET Core.
Ytterligare resurser
ASP.NET Core tillhandahåller ett kryptografiskt API för att skydda data, inklusive nyckelhantering och rotation.
Webbappar behöver ofta lagra känsliga data. Windows dataskydds-API (DPAPI) är inte avsett för användning i webbappar.
ASP.NET Core-dataskyddsstacken har utformats för att:
- Tillhandahålla en inbyggd lösning för de flesta webbscenarier.
- Åtgärda många av bristerna i det tidigare krypteringssystemet.
- Fungerar som ersättning för elementet
<machineKey>
i ASP.NET 1.x–4.x.
Problemuttryck
Jag behöver bevara betrodd information för senare hämtning, men jag litar inte på beständighetsmekanismen. I webbtermer kan detta skrivas som jag behöver återföra ett betrott tillstånd via en icke-betrodd klient.
Äkthet, integritet och manipuleringssäkerhet är krav. Det kanoniska exemplet på detta är en autentisering cookie eller bärare-token. Servern genererar en jag är Groot och har xyz-behörigheter token och skickar den till klienten. Klienten presenterar denna token tillbaka till servern, men servern behöver någon form av försäkran om att klienten inte har förfalskat token.
Konfidentialitet är ett krav. Eftersom det beständiga tillståndet är betrott av servern kan det här tillståndet innehålla information som inte ska lämnas ut till en klient som inte är betrodd. Till exempel:
- En filsökväg.
- En behörighet.
- Ett handtag eller annan indirekt referens.
- Vissa serverspecifika data.
Isolering är ett krav. Eftersom moderna appar är komponentbaserade vill enskilda komponenter dra nytta av det här systemet utan hänsyn till andra komponenter i systemet. Anta till exempel att en ägartokenkomponent använder den här stacken. Den bör fungera utan interferens, till exempel från en anti-CSRF-mekanism som också använder samma stack.
Vissa vanliga antaganden kan begränsa kravens omfattning:
- Alla tjänster som körs inom kryptosystemet är lika betrodda.
- Data behöver inte genereras eller förbrukas utanför tjänsterna under vår direkta kontroll.
- Åtgärderna måste vara snabba eftersom varje begäran till webbtjänsten kan gå igenom kryptosystemet en eller flera gånger. Hastighetskravet gör symmetrisk kryptografi idealisk. Asymmetrisk kryptografi används inte förrän det krävs.
Designfilosofi
ASP.NET Core-dataskydd är en enkel att använda dataskyddsstack. Den baseras på följande principer:
- Lätt att konfigurera. Systemet strävar efter nollkonfiguration. I situationer där utvecklare behöver konfigurera en specifik aspekt, till exempel nyckellagringsplatsen, är dessa specifika konfigurationer inte svåra.
- Erbjuda ett grundläggande api för konsumenter. API:erna är enkla att använda korrekt men svåra att använda fel.
- Utvecklare behöver inte lära sig viktiga hanteringsprinciper. Systemet hanterar val av algoritm och nyckellivslängd åt utvecklaren. Utvecklaren har inte åtkomst till råmaterialet.
- Nycklar skyddas i vila så mycket som möjligt. Systemet räknar ut en lämplig standardskyddsmekanism och tillämpar den automatiskt.
Dataskydds-API:erna är inte i första hand avsedda för obegränsad beständighet av konfidentiella nyttolaster. Andra tekniker, till exempel Windows CNG DPAPI och Azure Rights Management är mer lämpade för scenariot med obegränsad lagring. De har motsvarande starka funktioner för nyckelhantering. Med detta sagt kan api:erna för ASP.NET Core-dataskydd användas för långsiktigt skydd av konfidentiella data.
Publik
Dataskyddssystemet tillhandahåller API:er som riktar sig till tre huvudsakliga målgrupper:
konsument-API:er målprogram- och ramverksutvecklare.
Jag vill inte lära mig mer om hur stacken fungerar eller hur den är konfigurerad. Jag vill bara utföra en åtgärd med hög sannolikhet för att använda API:erna framgångsrikt.
API:erna för konfiguration målprogramutvecklare och systemadministratörer.
måste jag meddela dataskyddssystemet att min miljö kräver icke-standardsökvägar eller inställningar.
API:erna för utökningsbarhet riktar sig till utvecklare som ansvarar för att implementera anpassad princip. Användningen av dessa API:er är begränsad till sällsynta situationer och utvecklare med säkerhetsupplevelse.
Jag måste ersätta en hel komponent i systemet eftersom jag har verkligt unika beteendekrav. Jag är villig att lära mig ovanligt använda delar av API-ytan för att skapa ett plugin-program som uppfyller mina krav.
Paketlayout
Dataskyddsstacken består av fem paket:
Microsoft.AspNetCore.DataProtection.Abstractions innehåller:
- IDataProtectionProvider och IDataProtector gränssnitt för att skapa dataskyddstjänster.
- Användbara tilläggsmetoder för att arbeta med dessa typer. till exempel IDataProtector.Protect
Om dataskyddssystemet instansieras någon annanstans och du använder API:et refererar du till
Microsoft.AspNetCore.DataProtection.Abstractions
.Microsoft.AspNetCore.DataProtection innehåller kärnimplementeringen av dataskyddssystemet, inklusive:
- Grundläggande kryptografiska åtgärder.
- Nyckelhantering.
- Konfiguration och utökningsbarhet.
Om du vill instansiera dataskyddssystemet refererar du till
Microsoft.AspNetCore.DataProtection
. Du kan behöva referera till dataskyddssystemet när:- Lägg till den i en IServiceCollection.
- Ändra eller utöka dess beteende.
Microsoft.AspNetCore.DataProtection.Extensions innehåller ytterligare API:er som utvecklare kan ha nytta av men som inte hör hemma i kärnpaketet. Det här paketet innehåller till exempel:
- Fabriksmetoder för att instansiera dataskyddssystemet som lagrar nycklar på en plats i filsystemet utan att använda beroendeinjektion. Se DataProtectionProvider.
- Tilläggsmetoder för att begränsa livslängden för skyddade nyttolaster. Se ITimeLimitedDataProtector.
Microsoft.AspNetCore.DataProtection.SystemWeb kan installeras i en befintlig ASP.NET 4.x-app för att omdirigera dess
<machineKey>
åtgärder för att använda den nya ASP.NET Core-dataskyddsstacken. Mer information finns i Ersätt ASP.NET machineKey i ASP.NET Core.Microsoft.AspNetCore.Cryptography.KeyDerivation tillhandahåller en implementering av PBKDF2-lösenordshashningsrutinen och kan användas av system som måste hantera användarlösenord på ett säkert sätt. Mer information finns i Hash-lösenord i ASP.NET Core.
Ytterligare resurser
ASP.NET Core