Sleutels genereren voor versleuteling en ontsleuteling
Het maken en beheren van sleutels is een belangrijk onderdeel van het cryptografische proces. Voor symmetrische algoritmen is het maken van een sleutel en een initialisatievector (IV) vereist. U moet dit sleutelgeheim bewaren voor iedereen die uw gegevens niet mag ontsleutelen. De IV hoeft niet geheim te zijn, maar moet voor elke sessie worden gewijzigd. Voor asymmetrische algoritmen is het maken van een openbare sleutel en een persoonlijke sleutel vereist. De openbare sleutel kan voor iedereen bekend worden gemaakt, maar de ontsleutelingspartij mag alleen de bijbehorende persoonlijke sleutel kennen. In deze sectie wordt beschreven hoe u sleutels genereert en beheert voor zowel symmetrische als asymmetrische algoritmen.
Symmetrische sleutels
Voor de symmetrische versleutelingsklassen van .NET is een sleutel en een nieuwe IV vereist voor het versleutelen en ontsleutelen van gegevens. Er wordt automatisch een nieuwe sleutel en IV gemaakt wanneer u een nieuw exemplaar van een van de beheerde symmetrische cryptografische klassen maakt met behulp van de methode zonder parameters Create()
. Iedereen die u toestaat om uw gegevens te ontsleutelen, moet dezelfde sleutel en IV hebben en hetzelfde algoritme gebruiken. Over het algemeen moet er voor elke sessie een nieuwe sleutel en IV worden gemaakt, en de sleutel noch de IV moeten worden opgeslagen voor gebruik in een latere sessie.
Als u een symmetrische sleutel en IV wilt communiceren met een externe partij, versleutelt u de symmetrische sleutel meestal met behulp van asymmetrische versleuteling. Het verzenden van de sleutel via een onveilig netwerk zonder versleuteling is onveilig omdat iedereen die de sleutel onderschept en IV vervolgens uw gegevens kan ontsleutelen.
In het volgende voorbeeld ziet u het maken van een nieuw exemplaar van de standaard implementatieklasse voor het Aes algoritme:
Dim aes As Aes = Aes.Create()
Aes aes = Aes.Create();
De uitvoering van de voorgaande code genereert een nieuwe sleutel en IV en stelt deze respectievelijk in als waarden voor de eigenschappen Sleutel en IV .
Soms moet u mogelijk meerdere sleutels genereren. In deze situatie kunt u een nieuw exemplaar van een klasse maken waarmee een symmetrisch algoritme wordt geïmplementeerd. Maak vervolgens een nieuwe sleutel en IV door de GenerateKey
en GenerateIV
methoden aan te roepen. In het volgende codevoorbeeld ziet u hoe u nieuwe sleutels en IVs maakt nadat een nieuw exemplaar van de symmetrische cryptografische klasse is gemaakt:
Dim aes As Aes = Aes.Create()
aes.GenerateIV()
aes.GenerateKey()
Aes aes = Aes.Create();
aes.GenerateIV();
aes.GenerateKey();
De uitvoering van de voorgaande code maakt een nieuw exemplaar van Aes
en genereert een sleutel en IV. Er wordt een andere sleutel en IV gemaakt wanneer de GenerateKey
en GenerateIV
methoden worden aangeroepen.
Asymmetrische sleutels
.NET biedt de RSA klasse voor asymmetrische versleuteling. Wanneer u de methode zonder parameters Create()
gebruikt om een nieuw exemplaar te maken, maakt de RSA klasse een openbaar/persoonlijk sleutelpaar. Asymmetrische sleutels kunnen worden opgeslagen voor gebruik in meerdere sessies of alleen voor één sessie worden gegenereerd. Hoewel u de openbare sleutel beschikbaar kunt maken, moet u de persoonlijke sleutel nauw bewaken.
Er wordt een openbaar/persoonlijk sleutelpaar gegenereerd wanneer u een nieuw exemplaar van een asymmetrische algoritmeklasse maakt. Nadat u een nieuw exemplaar van de klasse hebt gemaakt, kunt u de sleutelgegevens extraheren met behulp van de ExportParameters methode. Deze methode retourneert een RSAParameters structuur die de belangrijkste informatie bevat. De methode accepteert ook een Booleaanse waarde die aangeeft of alleen de openbare-sleutelgegevens moeten worden geretourneerd of dat zowel de openbare sleutel als de gegevens van de persoonlijke sleutel moeten worden geretourneerd.
U kunt ook andere methoden gebruiken om de belangrijkste informatie te extraheren, zoals:
- RSA.ExportRSAPublicKey
- RSA.ExportRSAPrivateKey
- AsymmetricAlgorithm.ExportSubjectPublicKeyInfo
- AsymmetricAlgorithm.ExportPkcs8PrivateKey
- AsymmetricAlgorithm.ExportEncryptedPkcs8PrivateKey
U kunt de ImportParameters methode gebruiken om een RSA
exemplaar te initialiseren naar de waarde van een RSAParameters
structuur. U kunt ook de RSA.Create(RSAParameters) methode gebruiken om een nieuw exemplaar te maken.
Sla nooit asymmetrische persoonlijke sleutels letterlijk of als tekst zonder opmaak op de lokale computer op. Als u een persoonlijke sleutel wilt opslaan, moet u een sleutelcontainer gebruiken. Zie Instructies voor het opslaan van asymmetrische sleutels in een sleutelcontainer voor meer informatie over het opslaan van een persoonlijke sleutel in een sleutelcontainer.
In het volgende codevoorbeeld wordt een nieuw exemplaar van de RSA
klasse gemaakt, wordt een openbaar/persoonlijk sleutelpaar gemaakt en worden de gegevens van de openbare sleutel opgeslagen in een RSAParameters
structuur:
'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);