Generieren von Schlüsseln für die Verschlüsselung und Entschlüsselung

Das Erstellen und Verwalten von Schlüsseln ist ein wichtiger Bestandteil des kryptografischen Prozesses. Bei symmetrischen Algorithmen müssen ein Schlüssel und ein Initialisierungsvektor (IV) erstellt werden. Sie müssen diesen Schlüssel vor allen Personen geheim halten, die Ihre Daten nicht entschlüsseln dürfen. Der IV muss nicht geheim sein, sollte aber für jede Sitzung geändert werden. Bei asymmetrischen Algorithmen müssen ein öffentlicher und ein privater Schlüssel erstellt werden. Der öffentliche Schlüssel darf allgemein bekannt sein, doch nur die Personen auf der entschlüsselnden Seite dürfen den entsprechenden privaten Schlüssel kennen. In diesem Abschnitt wird beschrieben, wie Schlüssel für symmetrische und asymmetrische Algorithmen erzeugt und verwaltet werden.

Symmetrische Schlüssel

Für die von .NET bereitgestellten symmetrischen Verschlüsselungsklassen sind ein Schlüssel und ein neuer IV erforderlich, damit Daten verschlüsselt und entschlüsselt werden können. Wenn Sie mithilfe der parameterlosen Create()-Methode eine neue Instanz einer verwalteten symmetrischen Kryptografieklasse erstellen, werden automatisch ein neuer Schlüssel und ein neuer IV erzeugt. 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. Generell sollten für jede Sitzung ein neuer Schlüssel und ein neuer IV erstellt werden, von denen keiner für eine spätere Sitzung gespeichert werden sollte.

Um den symmetrischen Schlüssel und den IV der Gegenseite mitzuteilen, wird der symmetrische Schlüssel in der Regel asymmetrisch verschlüsselt. Das Senden des unverschlüsselten Schlüssels über ein nicht sicheres Netzwerk birgt ein großes Sicherheitsrisiko, da alle, die den Schlüssel und den IV abfangen, die Daten entschlüsseln können.

Im folgenden Beispiel wird veranschaulicht, wie Sie eine neue Instanz der Standardimplementierungsklasse für den Algorithmus Aes erstellen:

Dim aes As Aes = Aes.Create()  
Aes aes = Aes.Create();  

Durch Ausführen des obigen Codes werden ein neuer Schlüssel und ein neuer IV generiert und als Werte für die Eigenschaften Key bzw. IV festgelegt.

Manchmal müssen u. U. mehrere Schlüssel erzeugt werden. In diesem Fall können Sie eine neue Instanz einer Klasse erstellen, die einen symmetrischen Algorithmus implementiert. Rufen Sie dann die Methoden GenerateKey und GenerateIV auf, um einen neuen Schlüssel und einen neuen IV zu erstellen. Das folgende Codebeispiel veranschaulicht, wie nach dem Erstellen einer neuen Instanz der symmetrischen Kryptografieklasse neue Schlüssel und IVs generiert werden:

Dim aes As Aes = Aes.Create()  
aes.GenerateIV()  
aes.GenerateKey()  
Aes aes = Aes.Create();  
aes.GenerateIV();  
aes.GenerateKey();  

Durch Ausführen des obigen Codes werden eine neue Instanz von Aes erstellt und ein Schlüssel und ein IV generiert. Ein weiterer Schlüssel und ein weiterer IV werden beim Aufruf der Methoden GenerateKey und GenerateIV erstellt.

Asymmetrische Schlüssel

.NET stellt die RSA-Klasse für die asymmetrische Verschlüsselung bereit. Wenn Sie zum Erstellen einer neuen Instanz die parameterlose Create()-Methode verwenden, erstellt die Klasse RSA ein öffentliches/privates Schlüsselpaar. Asymmetrische Schlüssel können entweder nur für eine Sitzung erzeugt oder gespeichert und für mehrere Sitzungen verwendet werden. Während der öffentliche Schlüssel verfügbar gemacht werden kann, muss der private Schlüssel streng geheim gehalten werden.

Bei jedem Erstellen einer neuen Instanz einer asymmetrischen Algorithmusklasse wird ein öffentliches/privates Schlüsselpaar erzeugt. Nachdem Sie eine neue Instanz der Klasse erstellt haben, können Sie die Schlüsselinformationen mithilfe der Methode ExportParameters extrahieren. Diese Methode gibt eine RSAParameters-Struktur mit den Schlüsselinformationen zurück. Die Methode akzeptiert auch einen booleschen Wert, der angibt, ob nur die Informationen des öffentlichen Schlüssels oder die Informationen beider Schlüssel (öffentlich und privat) zurückgegeben werden sollen.

Zur Extraktion der Schlüsselinformationen stehen Ihnen auch folgende andere Methoden zur Verfügung:

Sie können mit der Methode ImportParameters eine RSA-Instanz mit dem Wert einer RSAParameters-Struktur initialisieren. Oder Sie können mit der Methode RSA.Create(RSAParameters) eine neue Instanz erstellen.

Speichern Sie asymmetrische private Schlüssel niemals wörtlich oder im Nur-Text-Format auf dem lokalen Computer. Wenn Sie einen privaten Schlüssel speichern müssen, verwenden Sie einen Schlüsselcontainer. Weitere Informationen zum Speichern eines privaten Schlüssels in einem Schlüsselcontainer finden Sie unter Vorgehensweise: Speichern asymmetrischer Schlüssel in einem Schlüsselcontainer.

Im folgenden Codebeispiel werden eine neue Instanz der RSA-Klasse und ein öffentliches/privates Schlüsselpaar erstellt sowie die Informationen des öffentlichen Schlüssels in einer RSAParameters-Struktur gespeichert:

'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);  

Siehe auch