Kryptografische DiensteCryptographic Services

Öffentliche Netzwerke wie das Internet bieten keine sichere Kommunikation zwischen Entitäten.Public networks such as the Internet do not provide a means of secure communication between entities. Bei einer Kommunikation über derartige Netzwerke besteht die Gefahr, dass Unbefugte Inhalte lesen oder sogar Änderungen daran vornehmen.Communication over such networks is susceptible to being read or even modified by unauthorized third parties. Die Kryptografie schützt Daten vor der Anzeige, stellt Möglichkeiten bereit, mit denen erkannt werden kann, ob Daten geändert wurden, und bietet sichere Kommunikation über ansonsten unsichere Kanäle.Cryptography helps protect data from being viewed, provides ways to detect whether data has been modified, and helps provide a secure means of communication over otherwise nonsecure channels. So können Daten beispielsweise mithilfe eines kryptografischen Algorithmus verschlüsselt, im verschlüsselten Zustand übertragen und später beim vorgesehenen Empfänger wieder entschlüsselt werden.For example, data can be encrypted by using a cryptographic algorithm, transmitted in an encrypted state, and later decrypted by the intended party. Wenn ein Dritter die verschlüsselten Daten abfängt, sind diese schwer zu entziffern.If a third party intercepts the encrypted data, it will be difficult to decipher.

In .NET Framework werden viele Aspekte der Kryptografie von den Klassen im System.Security.Cryptography -Namespace verwaltet.In the .NET Framework, the classes in the System.Security.Cryptography namespace manage many details of cryptography for you. Einige davon sind Wrapper für die nicht verwaltete Microsoft Cryptography API (CryptoAPI), bei anderen handelt es sich um rein verwaltete Implementierungen.Some are wrappers for the unmanaged Microsoft Cryptography API (CryptoAPI), while others are purely managed implementations. Sie müssen kein Experte in Sachen Kryptografie sein, um diese Klassen verwenden zu können.You do not need to be an expert in cryptography to use these classes. Wenn Sie eine neue Instanz einer Verschlüsselungsalgorithmusklasse erstellen, werden der Einfachheit halber automatisch Schlüssel erzeugt. Die Standardeigenschaften sind dabei auf möglichst hohe Sicherheit und hohen Schutz ausgelegt.When you create a new instance of one of the encryption algorithm classes, keys are autogenerated for ease of use, and default properties are as safe and secure as possible.

Diese Übersicht bietet eine Zusammenfassung der Verschlüsselungsmethoden und Methoden, die von .NET Framework, einschließlich der ClickOnce-Manifeste, Suite B und Cryptography Next Generation (CNG) unterstützt, die seit .NET Framework 3.5 unterstützt.This overview provides a synopsis of the encryption methods and practices supported by the .NET Framework, including the ClickOnce manifests, Suite B, and Cryptography Next Generation (CNG) support introduced in the .NET Framework 3.5.

Diese Übersicht enthält folgende Abschnitte:This overview contains the following sections:

Weitere Informationen zur Kryptografie sowie zu Microsoft-Diensten, -Komponenten und -Tools, mit deren Hilfe Sie Ihre Anwendungen mit kryptografischer Sicherheit versehen können, finden Sie in dieser Dokumentation im Abschnitt Sicherheit unter Win32- und COM-Entwicklung.For additional information about cryptography and about Microsoft services, components, and tools that enable you to add cryptographic security to your applications, see the Win32 and COM Development, Security section of this documentation.

Kryptografische GrundelementeCryptographic Primitives

Eine typische Situation für den Einsatz von Kryptografie ist die Kommunikation zwischen zwei Teilnehmern (Alice und Bob) über einen unsicheren Kanal.In a typical situation where cryptography is used, two parties (Alice and Bob) communicate over a nonsecure channel. Alice und Bob möchten sicherstellen, dass ihre Kommunikation bei eventuellen Abhörversuchen unverständlich bleibt.Alice and Bob want to ensure that their communication remains incomprehensible by anyone who might be listening. Da sich Alice und Bob an Remotestellen befinden, muss außerdem gewährleistet sein, dass die Informationen, die Alice von Bob empfängt, während der Übertragung nicht geändert wurden.Furthermore, because Alice and Bob are in remote locations, Alice must make sure that the information she receives from Bob has not been modified by anyone during transmission. Alice muss außerdem sicher sein, dass die Informationen tatsächlich von Bob stammen und nicht von jemandem, der Bobs Identität angenommen hat.In addition, she must make sure that the information really does originate from Bob and not from someone who is impersonating Bob.

Die Kryptografie wird für folgende Zielsetzungen verwendet:Cryptography is used to achieve the following goals:

  • Vertraulichkeit: Um die Identität oder Daten eines Benutzers zu schützen, gelesen werden.Confidentiality: To help protect a user's identity or data from being read.

  • Datenintegrität: Zum Schutz der Daten nicht geändert werden.Data integrity: To help protect data from being changed.

  • Authentifizierung: Um sicherzustellen, dass Daten von einem bestimmten Teilnehmer stammen.Authentication: To ensure that data originates from a particular party.

  • Non-repudiation: Um zu verhindern, dass eine bestimmte Partei leugnen, dass sie eine Nachricht gesendet.Non-repudiation: To prevent a particular party from denying that they sent a message.

Um diese Ziele zu erreichen, können Sie aus einer Kombination von Algorithmen und Vorgehensweisen, die als kryptografische Grundelemente bezeichnet werden, ein kryptografisches Schema erstellen.To achieve these goals, you can use a combination of algorithms and practices known as cryptographic primitives to create a cryptographic scheme. In der nachstehenden Tabelle sind die kryptografischen Grundelemente und deren Verwendungszweck aufgeführt.The following table lists the cryptographic primitives and their uses.

Kryptografisches GrundelementCryptographic primitive MitUse
Verschlüsselung mit geheimem Schlüssel (symmetrische Kryptografie)Secret-key encryption (symmetric cryptography) Transformiert die Daten und verhindert, dass sie von Dritten gelesen werden.Performs a transformation on data to keep it from being read by third parties. Bei diesem Verschlüsselungstyp werden die Daten mit einem einzigen, gemeinsam genutzten, geheimen Schlüssel ver- und entschlüsselt.This type of encryption uses a single shared, secret key to encrypt and decrypt data.
Verschlüsselung mit öffentlichem Schlüssel (asymmetrische Kryptografie)Public-key encryption (asymmetric cryptography) Transformiert die Daten und verhindert, dass sie von Dritten gelesen werden.Performs a transformation on data to keep it from being read by third parties. Bei diesem Verschlüsselungstyp werden die Daten mit einem Paar aus öffentlichem und privatem Schlüssel ver- und entschlüsselt.This type of encryption uses a public/private key pair to encrypt and decrypt data.
Kryptografische SignaturCryptographic signing Stellt sicher, dass die Daten von einem bestimmten Teilnehmer stammen. Dazu wird eine digitale Signatur erstellt, die diesen Teilnehmer eindeutig bezeichnet.Helps verify that data originates from a specific party by creating a digital signature that is unique to that party. Bei diesem Prozess werden auch Hashfunktionen verwendet.This process also uses hash functions.
Kryptografische HashsCryptographic hashes Ordnet Daten beliebiger Länge einer Bytefolge fester Länge zu.Maps data from any length to a fixed-length byte sequence. Hashs sind statistisch eindeutig; eine unterschiedliche 2-Byte-Sequenz erzielt nicht denselben Hashwert.Hashes are statistically unique; a different two-byte sequence will not hash to the same value.

Zurück nach obenBack to top

Verschlüsselung mit geheimem SchlüsselSecret-Key Encryption

Bei Verschlüsselungsalgorithmen mit geheimem Schlüssel werden die Daten mit einem einzigen geheimen Schlüssel ver- und entschlüsselt.Secret-key encryption algorithms use a single secret key to encrypt and decrypt data. Der Schlüssel muss vor dem Zugriff Unbefugter geschützt werden, da jeder, der im Besitz des Schlüssels ist, Ihre Daten entschlüsseln oder eigene Daten verschlüsseln und als Ihre Daten ausgeben kann.You must secure the key from access by unauthorized agents, because any party that has the key can use it to decrypt your data or encrypt their own data, claiming it originated from you.

Die Verschlüsselung mit geheimem Schlüssel wird auch als symmetrische Verschlüsselung bezeichnet, da für das Ver- und Entschlüsseln derselbe Schlüssel verwendet wird.Secret-key encryption is also referred to as symmetric encryption because the same key is used for encryption and decryption. Die Verschlüsselungsalgorithmen mit geheimem Schlüssel sind im Vergleich zu den Algorithmen mit öffentlichem Schlüssel außergewöhnlich schnell und gut für die kryptografische Transformation großer Datenstreams geeignet.Secret-key encryption algorithms are very fast (compared with public-key algorithms) and are well suited for performing cryptographic transformations on large streams of data. Asymmetrische Verschlüsselungsalgorithmen wie RSA sind hinsichtlich der Datenmenge, die verschlüsselt werden kann, mathematisch eingeschränkt.Asymmetric encryption algorithms such as RSA are limited mathematically in how much data they can encrypt. Symmetrische Verschlüsselungsalgorithmen haben diese Probleme im Allgemeinen nicht.Symmetric encryption algorithms do not generally have those problems.

Ein Algorithmus mit geheimem Schlüssel, eine so genannte Blockchiffre, wird zum Verschlüsseln von jeweils einem Datenblock verwendet.A type of secret-key algorithm called a block cipher is used to encrypt one block of data at a time. Blockverschlüsselungsverfahren wie DES (Data Encryption Standard), TripleDES und AES (Advanced Encryption Standard transformieren einen Eingabeblock mit n Bytes in einen Ausgabeblock mit verschlüsselten Bytes kryptografisch.Block ciphers such as Data Encryption Standard (DES), TripleDES, and Advanced Encryption Standard (AES) cryptographically transform an input block of n bytes into an output block of encrypted bytes. Wenn eine Bytefolge ver- oder entschlüsselt werden soll, muss das blockweise geschehen.If you want to encrypt or decrypt a sequence of bytes, you have to do it block by block. Da n klein ist (8 Bytes bei DES und TripleDES, 16 Bytes [Standard], 24 Bytes oder 32 Bytes bei AES), müssen Werte, die größer als n sind, jeweils blockweise verschlüsselt werden.Because n is small (8 bytes for DES and TripleDES; 16 bytes [the default], 24 bytes, or 32 bytes for AES), data values that are larger than n have to be encrypted one block at a time. Datenwerte, die kleiner als n sind, müssen auf n erweitert werden, um verarbeitet werden zu können.Data values that are smaller than n have to be expanded to n in order to be processed.

Eine einfache Form einer Blockchiffre wird als ECB-Modus (Electronic Codebook) bezeichnet.One simple form of block cipher is called the electronic codebook (ECB) mode. Der ECB-Modus gilt als nicht sicher, da zum Initialisieren des ersten Klartextblocks kein Initialisierungsvektor verwendet wird.ECB mode is not considered secure, because it does not use an initialization vector to initialize the first plaintext block. Bei einem geheimen Schlüssel kwird ein Eingabeblock mit Klartext mithilfe einer einfachen Blockchiffre ohne Initialisierungsvektor in denselben Ausgabeblock mit verschlüsseltem Text transformiert.For a given secret key k, a simple block cipher that does not use an initialization vector will encrypt the same input block of plaintext into the same output block of ciphertext. Wenn der Klartexteingabestream doppelte Blöcke enthält, befinden sich diese somit auch im verschlüsselten Textausgabestream.Therefore, if you have duplicate blocks in your input plaintext stream, you will have duplicate blocks in your output ciphertext stream. Diese doppelten Ausgabeblöcke weisen darauf hin, dass für die schwache Codierung nicht autorisierte Benutzer die möglicherweise eingesetzten Algorithmen verwendet haben, und geben die möglichen Angriffsformen an.These duplicate output blocks alert unauthorized users to the weak encryption used the algorithms that might have been employed, and the possible modes of attack. Der ECB-Verschlüsselungsverfahrensmodus kann daher recht leicht analysiert und somit der Schlüssel leicht erkannt werden.The ECB cipher mode is therefore quite vulnerable to analysis, and ultimately, key discovery.

Für die Blockchiffreklassen in der Basisklassenbibliothek wird ein Standardverkettungsmodus mit der Bezeichnung Cipher Block Chaining (CBC) verwendet. Sie können diese Standardeinstellung jedoch ändern, wenn Sie möchten.The block cipher classes that are provided in the base class library use a default chaining mode called cipher-block chaining (CBC), although you can change this default if you want.

Bei CBC-Verschlüsselungsverfahren wurden die bei ECB-Verschlüsselungsverfahren vorhandenen Probleme durch die Verwendung eines Initialisierungsvektors (IV) zum Verschlüsseln des ersten Klartextblocks behoben.CBC ciphers overcome the problems associated with ECB ciphers by using an initialization vector (IV) to encrypt the first block of plaintext. Mit jedem nachfolgenden Klartextblock wird vor der Verschlüsselung eine bitweiseXOR-Operation mit dem vorherigen verschlüsselten Block durchgeführt.Each subsequent block of plaintext undergoes a bitwise exclusive OR (XOR) operation with the previous ciphertext block before it is encrypted. Somit hängt jeder verschlüsselte Block von allen vorhergehenen Blöcken ab.Each ciphertext block is therefore dependent on all previous blocks. Mit diesem System ist es nicht möglich, anhand häufig verwendeter Nachrichtenheader, die einem Unbefugten bekannt sein könnten, den Schlüssel zurückzuentwickeln.When this system is used, common message headers that might be known to an unauthorized user cannot be used to reverse-engineer a key.

Eine Möglichkeit, mit einem CBC-Verschlüsselungsverfahren verschlüsselte Daten unbefugt zu entschlüsseln, ist das Ausprobieren jedes möglichen Schlüssels.One way to compromise data that is encrypted with a CBC cipher is to perform an exhaustive search of every possible key. Je nach Größe des verwendeten Schlüssels ist diese Suchmethode jedoch selbst mit dem schnellsten Rechner äußerst zeitaufwendig und daher nicht realisierbar.Depending on the size of the key that is used to perform encryption, this kind of search is very time-consuming using even the fastest computers and is therefore infeasible. Größere Schlüssel sind schwieriger zu entschlüsseln.Larger key sizes are more difficult to decipher. Obwohl mit dem Verschlüsseln das Lesen verschlüsselter Daten für Unbefugte theoretisch nicht völlig ausgeschlossen ist, treibt es doch den Kostenaufwand in die Höhe.Although encryption does not make it theoretically impossible for an adversary to retrieve the encrypted data, it does raise the cost of doing this. Wenn es mit einer umfassenden Suche drei Monate dauert, Daten zu entziffern, die nur ein paar Tage lang von Bedeutung sind, ist diese Suchmethode unbrauchbar.If it takes three months to perform an exhaustive search to retrieve data that is meaningful only for a few days, the exhaustive search method is impractical.

Die Verschlüsselung mit geheimem Schlüssel hat den Nachteil, dass sich zwei Teilnehmer auf einen Schlüssel und einen Initialisierungsvektor geeinigt und die entsprechenden Werte ausgetauscht haben müssen.The disadvantage of secret-key encryption is that it presumes two parties have agreed on a key and IV, and communicated their values. Der Initialisierungsvektor ist nicht geheim und kann mit der Nachricht in Klartext übermittelt werden.The IV is not considered a secret and can be transmitted in plaintext with the message. Der Schlüssel muss jedoch vor Unbefugten geheim gehalten werden.However, the key must be kept secret from unauthorized users. Aufgrund dieser Probleme wird die Verschlüsselung mit geheimem Schlüssel oft in Verbindung mit der Verschlüsselung mit öffentlichem Schlüssel eingesetzt, um die Werte von Schlüssel und Initialisierungsvektor vertraulich zu kommunizieren.Because of these problems, secret-key encryption is often used together with public-key encryption to privately communicate the values of the key and IV.

Vorausgesetzt, dass Alice und Bob um zwei Teilnehmer, die über einen unsicheren Kanal miteinander kommunizieren möchten handelt, können sie die Verschlüsselung mit geheimem Schlüssel wie folgt verwenden: Alice und Bob stimmen auf einen bestimmten Algorithmus (z. B. AES) mit einem bestimmten Schlüssel und Initialisierungsvektor zu verwenden.Assuming that Alice and Bob are two parties who want to communicate over a nonsecure channel, they might use secret-key encryption as follows: Alice and Bob agree to use one particular algorithm (AES, for example) with a particular key and IV. Alice verfasst eine Nachricht und erstellt einen Netzwerkstream (eventuell eine benannte Pipe oder eine Netzwerk-e-Mail) auf dem die Nachricht zu senden.Alice composes a message and creates a network stream (perhaps a named pipe or network email) on which to send the message. Danach verschlüsselt sie mithilfe des Schlüssels und des Initialisierungsvektors den Text und sendet die verschlüsselten Nachricht und den Initialisierungsvektor über das Intranet an Bob.Next, she encrypts the text using the key and IV, and sends the encrypted message and IV to Bob over the intranet. Bob empfängt den verschlüsselten Text und entschlüsselt ihn mit dem Initialisierungsvektor und dem zuvor vereinbarten Schlüssel.Bob receives the encrypted text and decrypts it by using the IV and previously agreed upon key. Wenn die Übertragung abgefangen wird, kann der unbefugte Dritte die Originalnachricht nicht entschlüsseln, da er den Schlüssel nicht kennt.If the transmission is intercepted, the interceptor cannot recover the original message, because he does not know the key. In diesem Szenario muss nur der Schlüssel geheim bleiben.In this scenario, only the key must remain secret. In der Realität würde entweder Alice oder Bob einen geheimen (symmetrischen) Schlüssel erzeugen und ihn mithilfe der asymmetrischen Verschlüsselung (mit öffentlichem Schlüssel) an die Gegenseite übertragen.In a real world scenario, either Alice or Bob generates a secret key and uses public-key (asymmetric) encryption to transfer the secret (symmetric) key to the other party. Weitere Informationen zur Verschlüsselung mit öffentlichem Schlüssel finden Sie im nachfolgenden Abschnitt.For more information about public-key encryption, see the next section.

.NET Framework bietet die folgenden Klassen, die Verschlüsselungsalgorithmen mit geheimem Schlüssel implementieren:The .NET Framework provides the following classes that implement secret-key encryption algorithms:

Zurück nach obenBack to top

Verschlüsselung mit öffentlichem SchlüsselPublic-Key Encryption

Bei der Verschlüsselung mit öffentlichem Schlüssel werden zwei Schlüssel verwendet, nämlich ein privater Schlüssel, der vor Unbefugten geheim gehalten werden muss, und ein öffentlicher Schlüssel, der jedem zugänglich sein kann.Public-key encryption uses a private key that must be kept secret from unauthorized users and a public key that can be made public to anyone. Der öffentliche und der private Schlüssel sind mathematisch miteinander verknüpft. Mit dem öffentlichen Schlüssel verschlüsselte Daten können nur mit dem privaten Schlüssel entschlüsselt werden, und mit dem privaten Schlüssel signierte Daten können nur mit dem öffentlichen Schlüssel überprüft werden.The public key and the private key are mathematically linked; data that is encrypted with the public key can be decrypted only with the private key, and data that is signed with the private key can be verified only with the public key. Der öffentliche Schlüssel kann jedem zugänglich sein, da er zum Verschlüsseln von Daten verwendet wird, die an den Inhaber des privaten Schlüssels gesendet werden.The public key can be made available to anyone; it is used for encrypting data to be sent to the keeper of the private key. Kryptografische Algorithmen mit öffentlichem Schlüssel werden auch als asymmetrische Algorithmen bezeichnet, da ein Schlüssel für das Verschlüsseln der Daten und ein anderer für das Entschlüsseln erforderlich ist.Public-key cryptographic algorithms are also known as asymmetric algorithms because one key is required to encrypt data, and another key is required to decrypt data. Eine grundlegende kryptografische Regel verhindert die Schlüsselwiederverwendung, und beide Schlüssel müssen für jede Kommunikationssitzung eindeutig sein.A basic cryptographic rule prohibits key reuse, and both keys should be unique for each communication session. In der Praxis jedoch sind asymmetrische Schlüssel im Allgemeinen langlebig.However, in practice, asymmetric keys are generally long-lived.

Zwei Teilnehmer (Alice und Bob) könnten die Verschlüsselung mit öffentlichem Schlüssel wie folgt verwenden: Zuerst erzeugt Alice ein öffentliches/privates Schlüsselpaar.Two parties (Alice and Bob) might use public-key encryption as follows: First, Alice generates a public/private key pair. Wenn Bob Alice eine verschlüsselte Nachricht senden möchte, bittet er Alice um den öffentlichen Schlüssel.If Bob wants to send Alice an encrypted message, he asks her for her public key. Alice sendet Bob ihren öffentlichen Schlüssel über ein unsicheres Netzwerk, und Bob verschlüsselt damit eine Nachricht.Alice sends Bob her public key over a nonsecure network, and Bob uses this key to encrypt a message. Bob sendet die verschlüsselte Nachricht an Alice, die sie mit ihrem privaten Schlüssel entschlüsselt.Bob sends the encrypted message to Alice, and she decrypts it by using her private key. Wenn Bob den Schlüssel von Alice über einen unsicheren Kanal (z. B. ein öffentliches Netzwerk) erhalten hat, ist Bob im Hinblick auf einen Man-in-the-middle-Angriff gefährdet.If Bob received Alice's key over a nonsecure channel, such as a public network, Bob is open to a man-in-the-middle attack. Daher muss Bob bei Alice nachfragen, ob es sich um die richtige Kopie des öffentlichen Schlüssels handelt.Therefore, Bob must verify with Alice that he has a correct copy of her public key.

Während der Übertragung des öffentlichen Schlüssels von Alice hätte ein Unbefugter den Schlüssel abfangen können.During the transmission of Alice's public key, an unauthorized agent might intercept the key. Außerdem hätte derselbe Unbefugte auch die verschlüsselte Nachricht von Bob abfangen können.Furthermore, the same agent might intercept the encrypted message from Bob. Er kann die Nachricht mit dem öffentlichen Schlüssel jedoch nicht entschlüsseln.However, the agent cannot decrypt the message with the public key. Die Nachricht kann nur mit Alices privatem Schlüssel entschlüsselt werden, der nicht übertragen wurde.The message can be decrypted only with Alice's private key, which has not been transmitted. Alice benutzt für die Verschlüsselung der Rückantwort an Bob nicht ihren privaten Schlüssel, da jeder mit dem öffentlichen Schlüssel die Nachricht entschlüsseln könnte.Alice does not use her private key to encrypt a reply message to Bob, because anyone with the public key could decrypt the message. Wenn Alice eine Rückantwort an Bob senden möchte, bittet sie Bob um dessen öffentlichen Schlüssel und verschlüsselt ihre Nachricht damit.If Alice wants to send a message back to Bob, she asks Bob for his public key and encrypts her message using that public key. Bob wiederum entschlüsselt die Nachricht mit seinem zugehörigen privaten Schlüssel.Bob then decrypts the message using his associated private key.

In diesem Szenario würden Alice und Bob die (asymmetrische) Verschlüsselung mit öffentlichem Schlüssel zum Übertragen eines geheimen (symmetrischen) Schlüssels verwenden und für die restliche Sitzung die Verschlüsselung mit geheimem Schlüssel.In this scenario, Alice and Bob use public-key (asymmetric) encryption to transfer a secret (symmetric) key and use secret-key encryption for the remainder of their session.

In der folgenden Liste werden Kryptographiealgorithmen mit öffentlichem und geheimem Schlüssel verglichen:The following list offers comparisons between public-key and secret-key cryptographic algorithms:

  • Für kryptografische Algorithmen mit öffentlichem Schlüssel wird eine feste Puffergröße verwendet, während solche mit geheimem Schlüssel Puffer mit variabler Länge erfordern.Public-key cryptographic algorithms use a fixed buffer size, whereas secret-key cryptographic algorithms use a variable-length buffer.

  • Algorithmen mit öffentlichem Schlüssel können nicht zum Verketten von Daten in Streams verwendet werden, wie das bei Algorithmen mit geheimem Schlüssel möglich ist, da nur kleine Datenmengen verschlüsselt werden können.Public-key algorithms cannot be used to chain data together into streams the way secret-key algorithms can, because only small amounts of data can be encrypted. Daher wird bei asymmetrischen Operationen ein anderes Streamingmodell als bei symmetrischen Operationen verwendet.Therefore, asymmetric operations do not use the same streaming model as symmetric operations.

  • Bei der Verschlüsselung mit öffentlichem Schlüssel steht eine größere Schlüssellänge (Bereich von möglichen Werten für den Schlüssel) als bei der Verschlüsselung mit geheimem Schlüssel zur Verfügung.Public-key encryption has a much larger keyspace (range of possible values for the key) than secret-key encryption. Daher ist die Verschlüsselung mit öffentlichem Schlüssel weniger anfällig für Brute-Force-Attacken, bei denen alle möglichen Schlüssel ausprobiert werden.Therefore, public-key encryption is less susceptible to exhaustive attacks that try every possible key.

  • Öffentliche Schlüssel sind problemlos zu verteilen, da sie nicht geschützt werden müssen, vorausgesetzt, es gibt eine Möglichkeit, die Identität des Absenders zu überprüfen.Public keys are easy to distribute because they do not have to be secured, provided that some way exists to verify the identity of the sender.

  • Einige Algorithmen mit öffentlichem Schlüssel (wie RSA und DAS, jedoch nicht Diffie-Hellman) können zum Erstellen digitaler Signaturen verwendet werden, mit denen die Identität des Absenders der Daten überprüft wird.Some public-key algorithms (such as RSA and DSA, but not Diffie-Hellman) can be used to create digital signatures to verify the identity of the sender of data.

  • Algorithmen mit öffentlichem Schlüssel sind im Vergleich zu Algorithmen mit geheimem Schlüssel extrem langsam und für die Verschlüsselung großer Datenmengen nicht geeignet.Public-key algorithms are very slow compared with secret-key algorithms, and are not designed to encrypt large amounts of data. Algorithmen mit öffentlichem Schlüssel sind nur für die Übertragung sehr kleiner Datenmengen sinnvoll.Public-key algorithms are useful only for transferring very small amounts of data. In der Regel werden bei der Verschlüsselung mit öffentlichem Schlüssel ein Schlüssel und ein Initialisierungsvektor verschlüsselt, die in einem Algorithmus mit geheimem Schlüssel verwendet werden sollen.Typically, public-key encryption is used to encrypt a key and IV to be used by a secret-key algorithm. Nach der Übertragung von Schlüssel und Initialisierungsvektor wird für die restliche Sitzung die Verschlüsselung mit geheimem Schlüssel verwendet.After the key and IV are transferred, secret-key encryption is used for the remainder of the session.

.NET Framework bietet die folgenden Klassen, die Algorithmen für Verschlüsselung mit öffentlichem Schlüssel implementieren:The .NET Framework provides the following classes that implement public-key encryption algorithms:

RSA ermöglicht sowohl die Verschlüsselung als auch die Signatur. DSA kann dagegen nur für die Signatur und Diffie-Hellman nur für die Erzeugung von Schlüsseln verwendet werden.RSA allows both encryption and signing, but DSA can be used only for signing, and Diffie-Hellman can be used only for key generation. Algorithmen mit öffentlichem Schlüssel sind im Hinblick auf ihre Verwendung stärker eingeschränkt als Algorithmen mit privatem Schlüssel.In general, public-key algorithms are more limited in their uses than private-key algorithms.

Zurück nach obenBack to top

Digitale SignaturenDigital Signatures

Algorithmen mit öffentlichem Schlüssel können auch für digitale Signaturen verwendet werden.Public-key algorithms can also be used to form digital signatures. Digitale Signaturen authentifizieren die Identität eines Absenders (wenn Sie dem öffentlichen Schlüssel des Absenders vertrauen) und schützen die Datenintegrität.Digital signatures authenticate the identity of a sender (if you trust the sender's public key) and help protect the integrity of data. Mit dem von Alice erzeugten öffentlichen Schlüssel kann der Empfänger von Alices Daten überprüfen, dass sie tatsächlich von Alice gesendet wurden. Dazu vergleicht er die digitale Signatur mit Alices Daten mit ihrem öffentlichen Schlüssel.Using a public key generated by Alice, the recipient of Alice's data can verify that Alice sent it by comparing the digital signature to Alice's data and Alice's public key.

Um die Kryptografie mit öffentlichem Schlüssel zum digitalen Signieren einer Nachricht zu verwenden, wendet Alice zunächst einen Hashalgorithmus auf die Nachricht an, um einen Message Digest zu erstellen.To use public-key cryptography to digitally sign a message, Alice first applies a hash algorithm to the message to create a message digest. Der Message Digest ist eine komprimierte und eindeutige Darstellung von Daten.The message digest is a compact and unique representation of data. Danach verschlüsselt Alice den Message Digest mit ihrem privaten Schlüssel und erstellt so ihre persönliche Signatur.Alice then encrypts the message digest with her private key to create her personal signature. Beim Empfang der Nachricht und der Signatur entschlüsselt Bob die Signatur mit dem öffentlichen Schlüssel von Alice, um den Message Digest wiederherzustellen. Dann wendet er denselben Hashalgorithmus auf die Nachricht an, den auch Alice verwendet hat.Upon receiving the message and signature, Bob decrypts the signature using Alice's public key to recover the message digest and hashes the message using the same hash algorithm that Alice used. Wenn der von Bob ermittelte Message Digest exakt mit dem von Alice empfangenen Message Digest übereinstimmt, kann Bob sicher sein, dass die Nachricht vom Besitzer des privaten Schlüssels stammt und die Daten nicht modifiziert wurden.If the message digest that Bob computes exactly matches the message digest received from Alice, Bob is assured that the message came from the possessor of the private key and that the data has not been modified. Wenn Bob darauf vertraut, dass Alice der Besitzer des privaten Schlüssels ist, weiß er, dass die Nachricht von Alice stammt.If Bob trusts that Alice is the possessor of the private key, he knows that the message came from Alice.

Hinweis

Eine Signatur kann von jedem überprüft werden, da der öffentliche Schlüssel des Absenders allgemein bekannt und in der Regel im digitalen Signaturformat enthalten ist.A signature can be verified by anyone because the sender's public key is common knowledge and is typically included in the digital signature format. Mit dieser Methode wird die Nachricht nicht geheim gehalten. Hierzu muss sie zusätzlich verschlüsselt werden.This method does not retain the secrecy of the message; for the message to be secret, it must also be encrypted.

.NET Framework bietet die folgenden Klassen, die digitale Signaturalgorithmen implementiert:The .NET Framework provides the following classes that implement digital signature algorithms:

Zurück nach obenBack to top

HashwerteHash Values

Mit Hashalgorithmen werden kleineren binären Werten fester Länge, die als Hashwerte bezeichnet werden, binäre Werte beliebiger Länge zugeordnet.Hash algorithms map binary values of an arbitrary length to smaller binary values of a fixed length, known as hash values. Ein Hashwert ist eine numerische Darstellung eines Datenelements.A hash value is a numerical representation of a piece of data. Wenn ein Klartextabsatz gehasht ist und nur ein Buchstabe geändert wird, ergibt sich bei einem nachfolgenden Hashvorgang ein anderer Wert.If you hash a paragraph of plaintext and change even one letter of the paragraph, a subsequent hash will produce a different value. Wenn der Hashvorgang kryptografisch stark ist, ändert sich der zugehörige Wert erheblich.If the hash is cryptographically strong, its value will change significantly. Wenn sich beispielsweise ein einzelnes Bit einer Nachricht ändert, kann eine starke Hashfunktion ein um 50 % anderes Ergebnis liefern.For example, if a single bit of a message is changed, a strong hash function may produce an output that differs by 50 percent. Viele Eingabewerte ergeben möglicherweise denselben Hashausgabewert.Many input values may hash to the same output value. Dennoch ist es rechnerisch unmöglich, zwei verschiedene Eingabewerte zu ermitteln, die denselben Hashwert bilden.However, it is computationally infeasible to find two distinct inputs that hash to the same value.

Zwei Teilnehmer (Alice und Bob) könnten eine Hashfunktion verwenden, um die Nachrichtenintegrität sicherzustellen.Two parties (Alice and Bob) could use a hash function to ensure message integrity. Sie würden einen Hashalgorithmus zum Signieren ihrer Nachrichten auswählen.They would select a hash algorithm to sign their messages. Alice schreibt eine Nachricht und erstellt dann mithilfe des ausgewählten Algorithmus einen Hash dieser Nachricht.Alice would write a message, and then create a hash of that message by using the selected algorithm. Die Teilnehmer würden dann eine der folgenden Methoden verwenden:They would then follow one of the following methods:

  • Alice sendet die Klartext-Nachricht und die Hashnachricht (digitale Signatur) an Bob.Alice sends the plaintext message and the hashed message (digital signature) to Bob. Bob empfängt die Nachricht, wendet den Hashalgorithmus darauf an und vergleicht seinen Hashwert mit dem von Alice empfangenen Hashwert.Bob receives and hashes the message and compares his hash value to the hash value that he received from Alice. Wenn die Hashwerte identisch sind, wurde die Nachricht nicht geändert.If the hash values are identical, the message was not altered. Wenn die Werte nicht identisch sind, wurde die Nachricht geändert, nachdem sie von Alice geschrieben wurde.If the values are not identical, the message was altered after Alice wrote it.

    Leider wird mit dieser Methode nicht die Echtheit des Absenders angegeben.Unfortunately, this method does not establish the authenticity of the sender. Jeder kann die Identität von Alice annehmen und eine Nachricht an Bob senden.Anyone can impersonate Alice and send a message to Bob. Derselbe Hashalgorithmus kann zum Signieren der Nachricht verwendet werden, und Bob kann lediglich feststellen, dass die Nachricht mit ihrer Signatur übereinstimmt.They can use the same hash algorithm to sign their message, and all Bob can determine is that the message matches its signature. Dies ist eine Form eines Man-in-the-middle-Angriffs.This is one form of a man-in-the-middle attack. Weitere Informationen finden Sie unter Beispiel für sichere Cryptography Next Generation (CNG) Kommunikation.For more information, see Cryptography Next Generation (CNG) Secure Communication Example.

  • Alice sendet die Klartext-Nachricht über einen unsicheren öffentlichen Kanal an Bob.Alice sends the plaintext message to Bob over a nonsecure public channel. Sie sendet die Hashnachricht über einen sicheren privaten Kanal an Bob.She sends the hashed message to Bob over a secure private channel. Bob empfängt die Klartext-Meldung, wendet den Hashalgorithmus darauf an, und vergleicht den Hash mit dem privat ausgetauschten Hash.Bob receives the plaintext message, hashes it, and compares the hash to the privately exchanged hash. Wenn die Hashs zusammenpassen, weiß Bob zwei Dinge:If the hashes match, Bob knows two things:

    • Die Nachricht wurde nicht geändert.The message was not altered.

    • Der Absender der Nachricht (Alice) ist authentisch.The sender of the message (Alice) is authentic.

    Damit dieses System funktioniert, muss Alice den originalen Hashwert geheim halten. Nur Bob darf ihn kennen.For this system to work, Alice must hide her original hash value from all parties except Bob.

  • Alice sendet die Klartext-Nachricht über einen unsicheren öffentlichen Kanal an Bob und platziert die Haschnachricht auf ihrer öffentlich zugänglichen Website.Alice sends the plaintext message to Bob over a nonsecure public channel and places the hashed message on her publicly viewable Web site.

    Mit dieser Methode wird eine Manipulation der Nachricht verhindert, da jeder an einer Änderung des Hashwerts gehindert wird.This method prevents message tampering by preventing anyone from modifying the hash value. Obwohl die Nachricht und deren Hash von jedem gelesen werden kann, kann der Hashwert nur von Alice geändert werden.Although the message and its hash can be read by anyone, the hash value can be changed only by Alice. Ein Angreifer, der die Identität von Alice annehmen will, müsste Zugriff auf die Website von Alice haben.An attacker who wants to impersonate Alice would require access to Alice's Web site.

Mit keiner der vorherigen Methoden wird verhindert, dass Dritte die Nachrichten von Alice lesen, da sie als Klartext übertragen werden.None of the previous methods will prevent someone from reading Alice's messages, because they are transmitted in plaintext. Vollständige Sicherheit ist in der Regel nur mit digitalen Signaturen (Signieren von Nachrichten) und Verschlüsselung möglich.Full security typically requires digital signatures (message signing) and encryption.

.NET Framework bietet die folgenden Klassen, die Hashalgorithmen implementiert:The .NET Framework provides the following classes that implement hashing algorithms:

Hinweis

Fehler im Design von MD5 wurden 1996 erkannt und stattdessen SHA-1 empfohlen.MD5 design flaws were discovered in 1996, and SHA-1 was recommended instead. 2004 wurden weitere Fehler festgestellt, und der MD5-Algorithmus galt nicht mehr als sicher.In 2004, additional flaws were discovered, and the MD5 algorithm is no longer considered secure. Der SHA-1-Algorithmus wurde ebenfalls als unsicher eingestuft, und nun wird stattdessen SHA-2 empfohlen.The SHA-1 algorithm has also been found to be insecure, and SHA-2 is now recommended instead.

Zurück nach obenBack to top

ZufallszahlengenerierungRandom Number Generation

Die Zufallszahlengenerierung ist wichtiger Bestandteil vieler kryptografischer Vorgänge.Random number generation is integral to many cryptographic operations. Kryptografische Schlüssel müssen z. B. möglichst zufällig erzeugt werden, sodass ein Replizieren unmöglich ist.For example, cryptographic keys need to be as random as possible so that it is infeasible to reproduce them. Mit Generatoren für kryptografische Zufallszahlen müssen Ausgabewerte erzeugt werden, die rechnerisch mit einer Wahrscheinlichkeit von weniger als 0,5 vorhergesagt werden können.Cryptographic random number generators must generate output that is computationally infeasible to predict with a probability that is better than one half. Deshalb darf jede Methode zur Vorhersage des nächsten Ausgabebits nicht besser sein als eine bloße Vermutung.Therefore, any method of predicting the next output bit must not perform better than random guessing. Die Klassen in .NET Framework verwenden Zufallszahlengeneratoren kryptografische Schlüssel zu generieren.The classes in the .NET Framework use random number generators to generate cryptographic keys.

Die RNGCryptoServiceProvider -Klasse ist die Implementierung eines Algorithmus mit Zufallszahlengenerator.The RNGCryptoServiceProvider class is an implementation of a random number generator algorithm.

Zurück nach obenBack to top

ClickOnce-ManifesteClickOnce Manifests

Die folgenden kryptografischen Klassen in .NET Framework 3.5 können Sie abrufen und überprüfen die Informationen zu manifestsignaturen für Anwendungen, die mit bereitgestellt werden ClickOnce-Technologie:In the .NET Framework 3.5, the following cryptography classes let you obtain and verify information about manifest signatures for applications that are deployed using ClickOnce technology:

Außerdem stellen die folgenden Klassen bestimmte Signaturinformationen bereit:In addition, the following classes provide specific signature information:

Zurück nach obenBack to top

Suite B-UnterstützungSuite B Support

.NET Framework 3.5 unterstützt die Suite B-Satz kryptografischer Algorithmen, die von der National Security Agency (NSA) veröffentlicht.The .NET Framework 3.5 supports the Suite B set of cryptographic algorithms published by the National Security Agency (NSA). Weitere Informationen zur Suite B finden Sie im NSA-Suite-B-Kryptographie-Merkblatt.For more information about Suite B, see the NSA Suite B Cryptography Fact Sheet.

Dazu gehören die folgenden Algorithmen:The following algorithms are included:

  • AES-Algorithmus (Advanced Encryption Standard) mit Schlüsselgrößen von 128, 192 und 256 Bit für die Verschlüsselung.Advanced Encryption Standard (AES) algorithm with key sizes of 128, 192, , and 256 bits for encryption.

  • SHA-1, SHA-256, SHA-384 und SHA-512 für Hashverfahren.Secure Hash Algorithms SHA-1, SHA-256, SHA-384, and SHA-512 for hashing. (Die letzten beiden werden meist unter der Bezeichnung SHA-2 zusammengefasst.)(The last three are generally grouped together and referred to as SHA-2.)

  • ECDSA (Elliptic Curve Digital Signature Algorithm) unter Verwendung von Kurven von 256-Bit-, 384-Bit- und 521-Bit-Primzahlenmodulen für Signaturen.Elliptic Curve Digital Signature Algorithm (ECDSA), using curves of 256-bit, 384-bit, and 521-bit prime moduli for signing. Die NSA-Dokumentation definiert diese Kurven ausdrücklich und nennt sie P-256, P-384 und P-521.The NSA documentation specifically defines these curves, and calls them P-256, P-384, and P-521. Dieser Algorithmus wird von der ECDsaCng -Klasse bereitgestellt.This algorithm is provided by the ECDsaCng class. Er ermöglicht das Signieren mit einem privaten Schlüssel und das Überprüfen mit einem öffentlichen Schlüssel.It enables you to sign with a private key and verify the signature with a public key.

  • ECDH-Algorithmus (Elliptic Curve Diffie-Hellman) mit Kurven von 256-Bit-, 384-Bit- und 521-Bit-Primzahlenmodulen für den Schlüsselaustausch und Geheimvertrag.Elliptic Curve Diffie-Hellman (ECDH) algorithm, using curves of 256-bit, 384-bit, and 521-bit prime moduli for the key exchange and secret agreement. Dieser Algorithmus wird von der ECDiffieHellmanCng -Klasse bereitgestellt.This algorithm is provided by the ECDiffieHellmanCng class.

Wrapper für verwalteten Code für die FIPS-zertifizierten (Federal Information Processing Standard) Implementierungen von AES, SHA-256, SHA-384 und SHA-512 sind in den neuen Klassen AesCryptoServiceProvider, SHA256CryptoServiceProvider, SHA384CryptoServiceProviderund SHA512CryptoServiceProvider verfügbar.Managed code wrappers for the Federal Information Processing Standard (FIPS) certified implementations of the AES, SHA-256, SHA-384, and SHA-512 implementations are available in the new AesCryptoServiceProvider, SHA256CryptoServiceProvider, SHA384CryptoServiceProvider, and SHA512CryptoServiceProvider classes.

Zurück nach obenBack to top

CNG-Klassen (Cryptography Next Generation)Cryptography Next Generation (CNG) Classes

Die CNG-Klassen (Cryptography Next Generation) stellen einen verwalteten Wrapper um die systemeigenen CNG-Funktionen bereit.The Cryptography Next Generation (CNG) classes provide a managed wrapper around the native CNG functions. (CNG ist der Ersatz für CryptoAPI.) "Cng" ist Teil des Namens dieser Klassen.(CNG is the replacement for CryptoAPI.) These classes have "Cng" as part of their names. Zentrales Element dieser CNG-Wrapperklassen ist die CngKey -Schlüsselcontainerklasse, die die Speicherung und Verwendung von CNG-Schlüsseln abstrahiert.Central to the CNG wrapper classes is the CngKey key container class, which abstracts the storage and use of CNG keys. Diese Klasse ermöglicht es, ein Schlüsselpaar oder einen öffentlichen Schlüssel sicher zu speichern und mittels eines einfachen Zeichenfolgennamens auf diesen zu verweisen.This class lets you store a key pair or a public key securely and refer to it by using a simple string name. Die ECDSA-basierte ECDsaCng -Signaturklasse und die ECDiffieHellmanCng -Verschlüsselungsklasse können CngKey -Objekte verwenden.The elliptic curve-based ECDsaCng signature class and the ECDiffieHellmanCng encryption class can use CngKey objects.

Die CngKey -Klasse wird für eine Vielzahl zusätzlicher Operationen verwendet, einschließlich dem Öffnen, Erstellen, Löschen und Exportieren von Schlüsseln.The CngKey class is used for a variety of additional operations, including opening, creating, deleting, and exporting keys. Sie stellt auch den Zugriff auf das zugrunde liegende Schlüsselhandle bereit, das für den direkten Aufruf systemeigener Funktionen verwendet wird.It also provides access to the underlying key handle to use when calling native functions directly.

.NET Framework 3.5 enthält auch eine Reihe von CNG-Klassen, wie die folgende Unterstützung:The .NET Framework 3.5 also includes a variety of supporting CNG classes, such as the following:

Zurück nach obenBack to top

TitelTitle BeschreibungDescription
KryptografiemodellCryptography Model Beschreibt das Implementieren von Kryptografie in der Basisklassenbibliothek.Describes how cryptography is implemented in the base class library.
Exemplarische Vorgehensweise: Erstellen einer kryptografischen AnwendungWalkthrough: Creating a Cryptographic Application Veranschaulicht grundlegende Verschlüsselungs- und Entschlüsselungsaufgaben.Demonstrates basic encryption and decryption tasks.
Konfigurieren kryptografischer KlassenConfiguring Cryptography Classes Beschreibt das Zuordnen von Algorithmusnamen zu kryptografischen Klassen und von Objektbezeichnern zu einem kryptografischen Algorithmus.Describes how to map algorithm names to cryptographic classes and map object identifiers to a cryptographic algorithm.