Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
In diesem Artikel wird erläutert, wie Sie Standardschlüsselableitungsfunktionen verwenden, um Schlüssel abzuleiten und Inhalte mithilfe symmetrischer und asymmetrischer Schlüssel zu verschlüsseln.
Symmetrische Schlüssel
Die symmetrische Schlüsselverschlüsselung, auch als Verschlüsselung für geheimen Schlüssel bezeichnet, erfordert, dass der für die Verschlüsselung verwendete Schlüssel auch für die Entschlüsselung verwendet wird. Sie können eine SymmetricKeyAlgorithmProvider-Klasse verwenden, um einen symmetrischen Algorithmus anzugeben und einen Schlüssel zu erstellen oder zu importieren. Sie können statische Methoden für die CryptographicEngine-Klasse verwenden, um Daten mithilfe des Algorithmus und des Schlüssels zu verschlüsseln und zu entschlüsseln.
Die symmetrische Schlüsselverschlüsselung verwendet in der Regel Blockchiffre und Blockchiffremodi. Eine Blockchiffre ist eine symmetrische Verschlüsselungsfunktion, die auf Blöcken mit fester Größe arbeitet. Wenn die zu verschlüsselnde Nachricht länger als die Blocklänge ist, müssen Sie einen Blockchiffremodus verwenden. Ein Blockchiffremodus ist eine symmetrische Verschlüsselungsfunktion, die mithilfe einer Blockchiffre erstellt wird. Sie verschlüsselt Klartext in einer Serie von Blöcken fester Größe. Die folgenden Modi werden für Apps unterstützt:
- Der ECB-Modus (elektronisches Codebook) verschlüsselt jeden Block der Nachricht separat. Dies gilt nicht als sicherer Verschlüsselungsmodus.
- Der CBC-Modus (Chiffreblockverkettung) verwendet den vorherigen Chiffretextblock, um den aktuellen Block zu verschleiern. Sie müssen bestimmen, welcher Wert für den ersten Block verwendet werden soll. Dieser Wert wird als Initialisierungsvektor (IV) bezeichnet.
- Der CCM-Modus (Zähler mit CBC-MAC) kombiniert den CBC-Blockchiffremodus mit einem Nachrichtenauthentifizierungscode (MAC).
- Der GCM-Modus (Galois Counter Mode) kombiniert den Gegenverschlüsselungsmodus mit dem Galois-Authentifizierungsmodus.
Einige Modi wie CBC erfordern, dass Sie einen Initialisierungsvektor (IV) für den ersten Chiffretextblock verwenden. Im Folgenden finden Sie allgemeine Initialisierungsvektoren. Sie geben den IV an, wenn Sie CryptographicEngine.Encrypt aufrufen. In den meisten Fällen ist es wichtig, dass der IV nie mit demselben Schlüssel wiederverwendet wird.
- Für alle Nachrichten, die verschlüsselt werden, wird derselbe IV verwendet. Diese Weitergabe von Informationen wird nicht empfohlen, und ihre Verwendung ist nicht empfohlen.
- Der Zähler erhöht den Wert der IV für jeden Block.
- Die Funktion Random erstellt ein pseudorandomes IV. Sie können CryptographicBuffer.GenerateRandom verwenden, um den IV zu erstellen.
- Nonce-Generated verwendet eine eindeutige Nummer für jede zu verschlüsselnde Nachricht. In der Regel ist die Nonce ein modifizierter Nachrichten- oder Transaktionsbezeichner. Die Nonce muss nicht geheim gehalten werden, sollte jedoch niemals mit demselben Schlüssel erneut verwendet werden.
Die meisten Modi erfordern, dass die Länge des Nur-Text-Elements ein genaues Vielfaches der Blockgröße ist. Dies erfordert in der Regel, dass Sie den Klartext auffüllen, um die entsprechende Länge zu erreichen.
Während Blockchiffre feste Datenblöcke verschlüsseln, sind Datenstromchiffre symmetrische Verschlüsselungsfunktionen, die Nur-Text-Bits mit einem Pseudorandom-Bitstrom (als Schlüsselstrom bezeichnet) kombinieren, um den Chiffretext zu generieren. Einige Blockchiffremodi wie der Ausgaberückmeldungsmodus (OTF) und der Gegenmodus (CTR) verwandeln eine Blockchiffre effektiv in eine Datenstromchiffre. Tatsächliche Stromchiffre wie RC4 funktionieren jedoch in der Regel mit höheren Geschwindigkeiten als Blockchiffremodi erreichen können.
Das folgende Beispiel zeigt, wie Sie die SymmetricKeyAlgorithmProvider-Klasse verwenden, um einen symmetrischen Schlüssel zu erstellen und sie zum Verschlüsseln und Entschlüsseln von Daten zu verwenden.
Asymmetrische Schlüssel
Asymmetrische Schlüsselkryptografie, auch als Kryptografie für öffentliche Schlüssel bezeichnet, verwendet einen öffentlichen Schlüssel und einen privaten Schlüssel, um Verschlüsselung und Entschlüsselung durchzuführen. Die Schlüssel sind unterschiedlich, aber mathematisch verwandt. Normalerweise wird der private Schlüssel geheim gehalten und zum Entschlüsseln von Daten verwendet, während der öffentliche Schlüssel an interessierte Parteien verteilt wird und zum Verschlüsseln von Daten verwendet wird. Die asymmetrische Kryptografie ist auch für das Signieren von Daten nützlich.
Da die asymmetrische Kryptografie viel langsamer ist als die symmetrische Kryptografie, wird sie selten verwendet, um große Datenmengen direkt zu verschlüsseln. Stattdessen wird sie in der Regel auf die folgende Weise zum Verschlüsseln von Schlüsseln verwendet.
- Andrea erfordert, dass Bob nur verschlüsselte Nachrichten sendet.
- Alice erstellt ein paar private/öffentliche Schlüssel, behält ihren privaten Schlüssel geheim und veröffentlicht ihren öffentlichen Schlüssel.
- Bob hat eine Nachricht, die er an Alice senden möchte.
- Bob erstellt einen symmetrischen Schlüssel.
- Bob verwendet seinen neuen symmetrischen Schlüssel, um seine Nachricht an Alice zu verschlüsseln.
- Bob verwendet den öffentlichen Schlüssel von Alice, um seinen symmetrischen Schlüssel zu verschlüsseln.
- Bob sendet die verschlüsselte Nachricht und den verschlüsselten symmetrischen Schlüssel an Alice (umschlag).
- Alice verwendet ihren privaten Schlüssel (aus dem privaten/öffentlichen Paar), um Bobs symmetrischen Schlüssel zu entschlüsseln.
- Alice verwendet den symmetrischen Schlüssel von Bob, um die Nachricht zu entschlüsseln.
Sie können ein AsymmetricKeyAlgorithmProvider-Objekt verwenden, um einen asymmetrischen Algorithmus oder einen Signaturalgorithmus anzugeben, um ein temporäres Schlüsselpaar zu erstellen oder zu importieren oder den öffentlichen Teil eines Schlüsselpaares zu importieren.
Ableiten von Schlüsseln
Es ist häufig erforderlich, zusätzliche Schlüssel von einem gemeinsamen Geheimnis abzuleiten. Sie können die KeyDerivationAlgorithmProvider-Klasse und eine der folgenden spezialisierten Methoden in der KeyDerivationParameters-Klasse verwenden, um Schlüssel abzuleiten.
| Objekt | Beschreibung |
|---|---|
| BuildForPbkdf2 | Erstellt ein KeyDerivationParameters -Objekt für die Verwendung in der kennwortbasierten Schlüsselableitungsfunktion 2 (PBKDF2). |
| BuildForSP800108 | Erstellt ein KeyDerivationParameters-Objekt für die Nutzung in einer Zählermodus, Hash-basierten Nachrichtenauthentifizierungscode (HMAC)-Schlüsselableitungsfunktion. |
| BuildForSP80056a | Erstellt ein KeyDerivationParameters -Objekt für die Verwendung in der SP800-56A-Schlüsselableitungsfunktion. |
Windows developer