Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Den här artikeln visar hur du använder standardfunktioner för nyckelhärledning för att härleda nycklar och hur du krypterar innehåll med symmetriska och asymmetriska nycklar.
Symmetriska nycklar
Symmetrisk nyckelkryptering, även kallad kryptering av hemlig nyckel, kräver att nyckeln som används för kryptering också används för dekryptering. Du kan använda klassen SymmetricKeyAlgorithmProvider för att ange en symmetrisk algoritm och skapa eller importera en nyckel. Du kan använda statiska metoder i klassen CryptographicEngine för att kryptera och dekryptera data med hjälp av algoritmen och nyckeln.
Symmetrisk nyckelkryptering använder vanligtvis blockchiffer och blockchifferlägen. Ett blockkryptering är en symmetrisk krypteringsfunktion som fungerar på fasta storleksblock. Om meddelandet som du vill kryptera är längre än blocklängden måste du använda ett blockkrypteringsläge. Ett blockkrypteringsläge är en symmetrisk krypteringsfunktion som skapats med hjälp av ett block chiffer. Den krypterar klartext som en serie block med fast storlek. Följande lägen stöds för appar:
- ECB-läget (elektronisk kodbok) krypterar varje block i meddelandet separat. Detta anses inte vara ett säkert krypteringsläge.
- CBC-läget (chifferblockslänkning) använder det tidigare chiffertextblocket för att maskera det aktuella blocket. Du måste bestämma vilket värde som ska användas för det första blocket. Det här värdet kallas initieringsvektor (IV).
- CCM-läget, räknaren med CBC-MAC, kombinerar CBC-blockchifferläge med en kod för meddelandeautentisering (MAC).
- GCM-läget (Galois counter mode) kombinerar räknarkrypteringsläget med Galois-autentiseringsläget.
Vissa lägen, till exempel CBC, kräver att du använder en initieringsvektor (IV) för det första chiffertextblocket. Följande är vanliga initieringsvektorer. Du anger IV när du anropar CryptographicEngine.Encrypt. I de flesta fall är det viktigt att IV aldrig återanvänds med samma nyckel.
- Fast använder samma IV för alla meddelanden som ska krypteras. Detta läcker information och dess användning rekommenderas inte.
- Räknaren ökar värdet på initiella vektorn (IV) för varje block.
- Random skapar en pseudorandom IV. Du kan använda CryptographicBuffer.GenerateRandom för att skapa IV.
- Nonce-Generated använder ett unikt nummer för varje meddelande som ska krypteras. Vanligtvis är "nonce" en modifierad meddelande- eller transaktionsidentifierare. Nonce behöver inte hållas hemlig, men den bör aldrig återanvändas under samma nyckel.
De flesta lägen kräver att längden på klartexten är en exakt multipel av blockstorleken. Detta kräver vanligtvis att du fyller på klartexten för att få rätt längd.
Blockchiffer krypterar data i block med fast storlek, medan strömkrypton är symmetriska krypteringsfunktioner som kombinerar klartextbitar med en pseudotillfällig bitström (kallas nyckelström) för att generera chiffertext. Vissa blockchifferlägen, till exempel utdata-feedback-läge (OTF) och räknarläge (CTR), effektivt förvandla ett blockchiffer till en strömkrypter. Verkliga strömchiffer, såsom RC4, fungerar vanligtvis vid högre hastigheter än vad blockchifferlägen kan uppnå.
I följande exempel visas hur du använder klassen SymmetricKeyAlgorithmProvider för att skapa en symmetrisk nyckel och använda den för att kryptera och dekryptera data.
Asymmetriska nycklar
Asymmetrisk nyckelkryptografi, även kallad kryptering av offentliga nycklar, använder en offentlig nyckel och en privat nyckel för att utföra kryptering och dekryptering. Nycklarna är olika men matematiskt relaterade. Vanligtvis hålls den privata nyckeln hemlig och används för att dekryptera data medan den offentliga nyckeln distribueras till berörda parter och används för att kryptera data. Asymmetrisk kryptografi är också användbart för signering av data.
Eftersom asymmetrisk kryptografi är mycket långsammare än symmetrisk kryptografi används den sällan för att kryptera stora mängder data direkt. I stället används den vanligtvis på följande sätt för att kryptera nycklar.
- Alice kräver att Bob skickar sina enda krypterade meddelanden.
- Alice skapar ett privat/offentligt nyckelpar, håller sin privata nyckel hemlig och publicerar sin offentliga nyckel.
- Bob har ett meddelande han vill skicka till Alice.
- Bob skapar en symmetrisk nyckel.
- Bob använder sin nya symmetriska nyckel för att kryptera sitt meddelande till Alice.
- Bob använder Alices offentliga nyckel för att kryptera sin symmetriska nyckel.
- Bob skickar det krypterade meddelandet och den krypterade symmetriska nyckeln till Alice (omsluten).
- Alice använder sin privata nyckel (från det privata/offentliga paret) för att dekryptera Bobs symmetriska nyckel.
- Alice använder Bobs symmetriska nyckel för att dekryptera meddelandet.
Du kan använda ett AsymmetricKeyAlgorithmProvider-objekt för att ange en asymmetrisk algoritm eller en signeringsalgoritm, för att skapa eller importera ett tillfälliga nyckelpar eller för att importera den offentliga nyckeldelen av ett nyckelpar.
Härleda nycklar
Det är ofta nödvändigt att härleda ytterligare nycklar från en delad hemlighet. Du kan använda klassen KeyDerivationAlgorithmProvider och någon av följande specialiserade metoder i klassen KeyDerivationParameters för att härleda nycklar.
| Objekt | Beskrivning |
|---|---|
| BuildForPbkdf2 | Skapar ett KeyDerivationParameters-objekt för användning i den lösenordsbaserade nyckelhärledningsfunktionen 2 (PBKDF2). |
| BuildForSP800108 | Skapar ett KeyDerivationParameters-objekt för användning i räknarläge med hashbaserad HMAC-nyckelhärledningsfunktion. |
| BuildForSP80056a | Skapar ett KeyDerivationParameters-objekt för användning i funktionen SP800-56A-nyckelhärledning. |
Windows developer