Generera nycklar för kryptering och dekryptering
Att skapa och hantera nycklar är en viktig del av den kryptografiska processen. Symmetriska algoritmer kräver att en nyckel och en initieringsvektor (IV) skapas. Du måste hålla den här nyckelhemligheten från alla som inte ska dekryptera dina data. IV behöver inte vara hemligt men bör ändras för varje session. Asymmetriska algoritmer kräver att en offentlig nyckel och en privat nyckel skapas. Den offentliga nyckeln kan göras känd för vem som helst, men dekrypteringsparten får bara känna till motsvarande privata nyckel. I det här avsnittet beskrivs hur du genererar och hanterar nycklar för både symmetriska och asymmetriska algoritmer.
Symmetriska nycklar
De symmetriska krypteringsklasser som tillhandahålls av .NET kräver en nyckel och en ny IV för att kryptera och dekryptera data. En ny nyckel och IV skapas automatiskt när du skapar en ny instans av en av de hanterade symmetriska kryptografiska klasserna med hjälp av den parameterlösa Create()
metoden. Alla som du tillåter att dekryptera dina data måste ha samma nyckel och IV och använda samma algoritm. I allmänhet bör en ny nyckel och IV skapas för varje session, och varken nyckeln eller IV ska lagras för användning i en senare session.
För att kommunicera en symmetrisk nyckel och IV till en fjärransluten part krypterar du vanligtvis den symmetriska nyckeln med hjälp av asymmetrisk kryptering. Att skicka nyckeln över ett osäkert nätverk utan kryptering är osäkert eftersom alla som fångar upp nyckeln och IV sedan kan dekryptera dina data.
I följande exempel visas skapandet av en ny instans av standardimplementeringsklassen för algoritmen Aes :
Dim aes As Aes = Aes.Create()
Aes aes = Aes.Create();
Körningen av föregående kod genererar en ny nyckel och IV och anger dem som värden för egenskaperna Keyrespektive IV .
Ibland kan du behöva generera flera nycklar. I den här situationen kan du skapa en ny instans av en klass som implementerar en symmetrisk algoritm. Skapa sedan en ny nyckel och IV genom att anropa GenerateKey
metoderna och GenerateIV
. I följande kodexempel visas hur du skapar nya nycklar och IV:er när en ny instans av den symmetriska kryptografiska klassen har skapats:
Dim aes As Aes = Aes.Create()
aes.GenerateIV()
aes.GenerateKey()
Aes aes = Aes.Create();
aes.GenerateIV();
aes.GenerateKey();
Körningen av föregående kod skapar en ny instans av Aes
och genererar en nyckel och IV. En annan nyckel och IV skapas när GenerateKey
metoderna och GenerateIV
anropas.
Asymmetriska nycklar
.NET tillhandahåller RSA klassen för asymmetrisk kryptering. När du använder den parameterlösa Create()
metoden för att skapa en ny instans RSA skapar klassen ett offentligt/privat nyckelpar. Asymmetriska nycklar kan antingen lagras för användning i flera sessioner eller genereras endast för en session. Du kan göra den offentliga nyckeln tillgänglig, men du måste noga skydda den privata nyckeln.
Ett offentligt/privat nyckelpar genereras när du skapar en ny instans av en asymmetrisk algoritmklass. När du har skapat en ny instans av klassen kan du extrahera nyckelinformationen ExportParameters med hjälp av metoden . Den här metoden returnerar en RSAParameters struktur som innehåller nyckelinformationen. Metoden accepterar också ett booleskt värde som anger om endast den offentliga informationen ska returneras eller att både den offentliga nyckeln och informationen om den privata nyckeln ska returneras.
Du kan också använda andra metoder för att extrahera viktig information, till exempel:
- RSA.ExportRSAPublicKey
- RSA.ExportRSAPrivateKey
- AsymmetricAlgorithm.ExportSubjectPublicKeyInfo
- AsymmetricAlgorithm.ExportPkcs8PrivateKey
- AsymmetricAlgorithm.ExportEncryptedPkcs8PrivateKey
Du kan använda ImportParameters metoden för att initiera en RSA
instans till värdet för en RSAParameters
struktur. Du kan också använda RSA.Create(RSAParameters) metoden för att skapa en ny instans.
Lagra aldrig asymmetriska privata nycklar ordagrant eller som oformaterad text på den lokala datorn. Om du behöver lagra en privat nyckel måste du använda en nyckelcontainer. Mer information om hur du lagrar en privat nyckel i en nyckelcontainer finns i Så här lagrar du asymmetriska nycklar i en nyckelcontainer.
I följande kodexempel skapas en ny instans av RSA
klassen, ett offentligt/privat nyckelpar skapas och informationen om den offentliga nyckeln sparas i en RSAParameters
struktur:
'Generate a public/private key pair.
Dim rsa as RSA = RSA.Create()
'Save the public key information to an RSAParameters structure.
Dim rsaKeyInfo As RSAParameters = rsa.ExportParameters(false)
//Generate a public/private key pair.
RSA rsa = RSA.Create();
//Save the public key information to an RSAParameters structure.
RSAParameters rsaKeyInfo = rsa.ExportParameters(false);