Erzeugen von Schlüsseln für die Ver- und EntschlüsselungGenerating Keys for Encryption and Decryption

Das Erstellen und Verwalten von Schlüsseln ist ein wichtiger Bestandteil des kryptografischen Prozesses.Creating and managing keys is an important part of the cryptographic process. Bei symmetrischen Algorithmen müssen ein Schlüssel und ein Initialisierungsvektor (IV) erstellt werden.Symmetric algorithms require the creation of a key and an initialization vector (IV). Der Schlüssel muss vor Unbefugten, die Ihre Daten nicht entschlüsseln können sollen, geheim gehalten werden.The key must be kept secret from anyone who should not decrypt your data. Der IV muss nicht geheim sein, sollte aber für jede Sitzung geändert werden.The IV does not have to be secret, but should be changed for each session. Bei asymmetrischen Algorithmen müssen ein öffentlicher und ein privater Schlüssel erstellt werden.Asymmetric algorithms require the creation of a public key and a private key. Der öffentliche Schlüssel kann allgemein zugänglich sein, während der private Schlüssel nur dem Teilnehmer bekannt sein darf, der die mit dem öffentlichen Schlüssel verschlüsselten Daten entschlüsselt.The public key can be made public to anyone, while the private key must known only by the party who will decrypt the data encrypted with the public key. In diesem Abschnitt wird beschrieben, wie Schlüssel für symmetrische und asymmetrische Algorithmen erzeugt und verwaltet werden.This section describes how to generate and manage keys for both symmetric and asymmetric algorithms.

Symmetrische SchlüsselSymmetric Keys

Für die von .NET Framework bereitgestellten symmetrischen Verschlüsselungsklassen sind ein Schlüssel und ein neuer Initialisierungsvektor (IV) erforderlich, damit Daten verschlüsselt und entschlüsselt werden können.The symmetric encryption classes supplied by the .NET Framework require a key and a new initialization vector (IV) to encrypt and decrypt data. Wenn Sie mit dem Standardkonstruktor eine neue Instanz einer verwalteten symmetrischen Kryptografieklasse erstellen, werden automatisch ein neuer Schlüssel und ein neuer IV erzeugt.Whenever you create a new instance of one of the managed symmetric cryptographic classes using the default constructor, a new key and IV are automatically created. Alle Benutzer, die zum Entschlüsseln der Daten berechtigt sind, müssen über den gleichen Schlüssel und IV verfügen und den gleichen Algorithmus verwenden.Anyone that you allow to decrypt your data must possess the same key and IV and use the same algorithm. Generell sollten für jede Sitzung ein neuer Schlüssel und IV erstellt und weder Schlüssel noch IV für eine spätere Sitzung gespeichert werden.Generally, a new key and IV should be created for every session, and neither the key nor IV should be stored for use in a later session.

Um den symmetrischen Schlüssel und IV der Gegenseite mitzuteilen, wird der symmetrische Schlüssel in der Regel asymmetrisch verschlüsselt.To communicate a symmetric key and IV to a remote party, you would usually encrypt the symmetric key by using asymmetric encryption. Das Senden des unverschlüsselten Schlüssels über ein nicht sicheres Netzwerk birgt ein großes Sicherheitsrisiko, da jeder, der den Schlüssel und den IV abfängt, die Daten entschlüsseln kann.Sending the key across an insecure network without encrypting it is unsafe, because anyone who intercepts the key and IV can then decrypt your data. Weitere Informationen zum verschlüsselten Datenaustausch finden Sie unter Erstellen eines kryptografischen Schemas.For more information about exchanging data by using encryption, see Creating a Cryptographic Scheme.

Im folgenden Beispiel wird eine neue Instanz der TripleDESCryptoServiceProvider -Klasse erstellt, durch die der TripleDES-Algorithmus implementiert wird.The following example shows the creation of a new instance of the TripleDESCryptoServiceProvider class that implements the TripleDES algorithm.

Dim TDES As TripleDESCryptoServiceProvider = new TripleDESCryptoServiceProvider()  
TripleDESCryptoServiceProvider TDES = new TripleDESCryptoServiceProvider();  

Beim Ausführen des obigen Codes werden ein neuer Schlüssel und IV erzeugt und in die Key -Eigenschaft bzw. die IV -Eigenschaft aufgenommen.When the previous code is executed, a new key and IV are generated and placed in the Key and IV properties, respectively.

Manchmal müssen u. U. mehrere Schlüssel erzeugt werden.Sometimes you might need to generate multiple keys. In diesem Fall können Sie zuerst eine neue Instanz einer Klasse, durch die ein symmetrischer Algorithmus implementiert wird, erstellen und erzeugen dann durch den Aufruf der GenerateKey -Methode und der GenerateIV -Methode einen neuen Schlüssel und IV.In this situation, you can create a new instance of a class that implements a symmetric algorithm and then create a new key and IV by calling the GenerateKey and GenerateIV methods. Das folgende Codebeispiel veranschaulicht, wie nach dem Erstellen einer neuen Instanz der asymmetrischen kryptografischen Klasse neue Schlüssel und IVs erzeugt werden.The following code example illustrates how to create new keys and IVs after a new instance of the asymmetric cryptographic class has been made.

Dim TDES As TripleDESCryptoServiceProvider = new TripleDESCryptoServiceProvider()  
TDES.GenerateIV()  
TDES.GenerateKey()  
TripleDESCryptoServiceProvider TDES = new TripleDESCryptoServiceProvider();  
TDES.GenerateIV();  
TDES.GenerateKey();  

Beim Ausführen des obigen Codes werden beim Erstellen der neuen TripleDESCryptoServiceProvider -Instanz ein Schlüssel und IV erzeugt.When the previous code is executed, a key and IV are generated when the new instance of TripleDESCryptoServiceProvider is made. Ein weiterer Schlüssel und ein weiterer IV werden beim Aufruf der GenerateKey -Methode und der GenerateIV -Methode erstellt.Another key and IV are created when the GenerateKey and GenerateIV methods are called.

Asymmetrische SchlüsselAsymmetric Keys

.NET Framework stellt die Klassen RSACryptoServiceProvider und DSACryptoServiceProvider für asymmetrische Verschlüsselung bereit.The .NET Framework provides the RSACryptoServiceProvider and DSACryptoServiceProvider classes for asymmetric encryption. Durch diese Klassen wird beim Erstellen einer neuen Instanz mit dem Standardkonstruktor ein öffentliches/privates Schlüsselpaar erzeugt.These classes create a public/private key pair when you use the default constructor to create a new instance. Asymmetrische Schlüssel können entweder nur für eine Sitzung erzeugt oder gespeichert und für mehrere Sitzungen verwendet werden.Asymmetric keys can be either stored for use in multiple sessions or generated for one session only. Während der öffentliche Schlüssel öffentlich verfügbar sein kann, sollte der private Schlüssel streng geheim gehalten werden.While the public key can be made generally available, the private key should be closely guarded.

Bei jedem Erstellen einer neuen Instanz einer asymmetrischen Algorithmusklasse wird ein öffentliches/privates Schlüsselpaar erzeugt.A public/private key pair is generated whenever a new instance of an asymmetric algorithm class is created. Nachdem eine neue Instanz der Klasse erstellt worden ist, können die Schlüsselinformationen mit einer der folgenden beiden Methoden extrahiert werden:After a new instance of the class is created, the key information can be extracted using one of two methods:

Bei beiden Methoden wird ein boolescher Wert akzeptiert, der angibt, ob nur die Informationen des öffentlichen Schlüssels oder die Informationen beider Schlüssel (öffentlich und privat) zurückgegeben werden sollen.Both methods accept a Boolean value that indicates whether to return only the public key information or to return both the public-key and the private-key information. Eine RSACryptoServiceProvider -Klasse kann mit dem Wert einer RSAParameters -Struktur initialisiert werden, indem die ImportParameters -Methode verwendet wird.An RSACryptoServiceProvider class can be initialized to the value of an RSAParameters structure by using the ImportParameters method.

Asymmetrische private Schlüssel sollten in keinem Fall in vollem Wortlaut oder in Klartext auf dem lokalen Computer gespeichert werden.Asymmetric private keys should never be stored verbatim or in plain text on the local computer. Wenn ein privater Schlüssel gespeichert werden muss, sollten Sie einen Schlüsselcontainer verwenden.If you need to store a private key, you should use a key container. Weitere Informationen zum Speichern eines privaten Schlüssels in einem Schlüsselcontainer finden Sie unter How to: Store Asymmetric Keys in a Key Container.For more on how to store a private key in a key container, see How to: Store Asymmetric Keys in a Key Container.

Im folgenden Codebeispiel wird eine neue Instanz der RSACryptoServiceProvider -Klasse erstellt, wodurch ein öffentliches/privates Schlüsselpaar erzeugt wird. Dann werden die Informationen des öffentlichen Schlüssels in einer RSAParameters- Struktur gespeichert.The following code example creates a new instance of the RSACryptoServiceProvider class, creating a public/private key pair, and saves the public key information to an RSAParameters structure.

'Generate a public/private key pair.  
Dim RSA as RSACryptoServiceProvider = new RSACryptoServiceProvider()  
'Save the public key information to an RSAParameters structure.  
Dim RSAKeyInfo As RSAParameters = RSA.ExportParameters(false)  
//Generate a public/private key pair.  
RSACryptoServiceProvider RSA = new RSACryptoServiceProvider();  
//Save the public key information to an RSAParameters structure.  
RSAParameters RSAKeyInfo = RSA.ExportParameters(false);  

Siehe auchSee Also

Verschlüsseln von DatenEncrypting Data
Entschlüsseln von DatenDecrypting Data
Cryptographic ServicesCryptographic Services
Vorgehensweise: Speichern asymmetrischer Schlüssel in einem SchlüsselcontainerHow to: Store Asymmetric Keys in a Key Container