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.
Dieser Artikel enthält eine Übersicht über die Verschlüsselungsmethoden und -praktiken, die von .NET unterstützt werden, einschließlich der ClickOnce-Manifeste.
Einführung in Kryptografie
Öffentliche Netzwerke wie das Internet bieten keine Möglichkeit der sicheren Kommunikation zwischen Entitäten. Die Kommunikation über solche Netzwerke ist anfällig dafür, von unbefugten Dritten gelesen oder sogar geändert zu werden. Kryptografie hilft, Daten vor der Anzeige zu schützen, bietet Möglichkeiten, zu erkennen, ob Daten geändert wurden, und hilft bei der Bereitstellung einer sicheren Kommunikation über andernfalls nicht unsichere Kanäle. Beispielsweise können Daten mithilfe eines Kryptografiealgorithmus verschlüsselt, in einem verschlüsselten Zustand übertragen und später von der vorgesehenen Partei entschlüsselt werden. Wenn ein Drittanbieter die verschlüsselten Daten abfangen, ist es schwierig zu entschlüsseln.
In .NET verwalten die Klassen im System.Security.Cryptography Namespace viele Details zur Kryptografie für Sie. Einige sind Wrapper für Betriebssystemimplementierungen, während andere rein verwaltete Implementierungen sind. Sie müssen kein Experte für Kryptografie sein, um diese Klassen zu verwenden. Wenn Sie eine neue Instanz einer der Verschlüsselungsalgorithmusklassen erstellen, werden Schlüssel automatisch für eine einfache Verwendung generiert, und Standardeigenschaften sind so sicher und sicher wie möglich.
Kryptografische Grundtypen
In einer typischen Situation, in der Kryptografie verwendet wird, kommunizieren zwei Parteien (Alice und Bob) über einen unsicheren Kanal. Alice und Bob wollen sicherstellen, dass ihre Kommunikation von jedem, der zuhören könnte, unverständlich bleibt. Da Alice und Bob an abgelegenen Standorten sind, muss Alice sicherstellen, dass die informationen, die sie von Bob erhält, während der Übertragung von niemandem geändert wurden. Darüber hinaus muss sie sicherstellen, dass die Informationen wirklich von Bob und nicht von jemanden stammen, der bob imitiert.
Kryptografie wird verwendet, um die folgenden Ziele zu erreichen:
Vertraulichkeit: Um die Identität oder Daten eines Benutzers vor unbefugtem Zugriff zu schützen.
Datenintegrität: Um zu schützen, dass Daten nicht geändert werden.
Authentifizierung: Um sicherzustellen, dass Daten von einer bestimmten Partei stammen.
Nichtabstreitbarkeit: Um zu verhindern, dass eine bestimmte Partei verweigert, dass sie eine Nachricht gesendet haben.
Um diese Ziele zu erreichen, können Sie eine Kombination aus Algorithmen und Methoden verwenden, die als kryptografische Grundtypen bezeichnet werden, um ein kryptografisches Schema zu erstellen. In der folgenden Tabelle sind die kryptografischen Grundtypen und deren Verwendung aufgeführt.
Kryptografischer Grundtyp | Verwendung |
---|---|
Verschlüsselung mit geheimem Schlüssel (symmetrische Kryptografie) | Führt eine Transformation von Daten durch, damit sie von Dritten nicht gelesen werden kann. Diese Art von Verschlüsselung verwendet einen einzelnen freigegebenen, geheimen Schlüssel zum Verschlüsseln und Entschlüsseln von Daten. |
Verschlüsselung mit öffentlichem Schlüssel (asymmetrische Kryptografie) | Führt eine Transformation von Daten durch, damit sie von Dritten nicht gelesen werden kann. Diese Art von Verschlüsselung verwendet ein öffentliches/privates Schlüsselpaar zum Verschlüsseln und Entschlüsseln von Daten. |
Kryptografische Signatur | Hilft beim Überprüfen, ob Daten von einer bestimmten Partei stammen, indem eine digitale Signatur erstellt wird, die für diese Partei eindeutig ist. Dieser Prozess verwendet auch Hashfunktionen. |
Kryptografische Hashes | Ordnet Daten beliebiger Länge einer Bytefolge fester Länge zu. Hashs sind statistisch eindeutig; eine unterschiedliche 2-Byte-Sequenz erzielt nicht denselben Hashwert. |
Verschlüsselung mit geheimem Schlüssel
Verschlüsselungsalgorithmen mit geheimem Schlüssel verwenden einen einzigen geheimen Schlüssel zum Verschlüsseln und Entschlüsseln von Daten. Sie müssen den Schlüssel vor dem Zugriff durch nicht autorisierte Agents schützen, da jede Partei, die über den Schlüssel verfügt, sie verwenden kann, um Ihre Daten zu entschlüsseln oder ihre eigenen Daten zu verschlüsseln, wobei behauptet wird, dass er von Ihnen stammt.
Verschlüsselung mit geheimen Schlüsseln wird auch als symmetrische Verschlüsselung bezeichnet, da derselbe Schlüssel für Verschlüsselung und Entschlüsselung verwendet wird. Verschlüsselungsalgorithmen mit geheimen Schlüsseln sind sehr schnell (im Vergleich zu Algorithmen mit öffentlichem Schlüssel) und eignen sich gut für die Durchführung kryptografischer Transformationen in großen Datenströmen. Asymmetrische Verschlüsselungsalgorithmen wie RSA sind mathematisch eingeschränkt, wie viele Daten sie verschlüsseln können. Symmetrische Verschlüsselungsalgorithmen haben diese Probleme im Allgemeinen nicht.
Eine Art geheimer Schlüsselalgorithmus, der als Blockchiffre bezeichnet wird, wird verwendet, um jeweils einen Datenblock zu verschlüsseln. Blockchiffre wie Data Encryption Standard (DES), TripleDES und Advanced Encryption Standard (AES) transformieren kryptografisch einen Eingabeblock von n Bytes in einen Ausgabeblock verschlüsselter Bytes. Wenn Sie eine Abfolge von Bytes verschlüsseln oder entschlüsseln möchten, müssen Sie sie per Block blockieren. Da n klein ist (8 Bytes für DES und TripleDES; 16 Bytes [Standard], 24 Bytes oder 32 Bytes für AES), müssen Datenwerte, die größer als n sind, jeweils einen Block verschlüsselt werden. Datenwerte, die kleiner als n sind, müssen um n erweitert werden, um verarbeitet zu werden.
Eine einfache Form der Blockchiffre wird als der elektronische Codebookmodus (ECB) bezeichnet. Der ECB-Modus gilt nicht als sicher, da er keinen Initialisierungsvektor verwendet, um den ersten Nur-Text-Block zu initialisieren. Bei einem bestimmten geheimen Schlüssel k verschlüsselt eine einfache Blockchiffre, die keinen Initialisierungsvektor verwendet, den gleichen Eingabeblock mit Nur-Text in den gleichen Ausgabeblock von Chiffretext. Wenn Sie daher doppelte Blöcke in Ihrem Eingabe-Nur-Text-Datenstrom haben, verfügen Sie über doppelte Blöcke im Ausgabechiffretextdatenstrom. Diese doppelten Ausgabeblöcke warnen nicht autorisierte Benutzer vor der schwachen Verschlüsselung, die von den möglicherweise eingesetzten Algorithmen verwendet wurde, und den möglichen Angriffsmodi. Der ECB-Verschlüsselungsmodus ist daher ziemlich anfällig für Analysen und letztendlich Schlüsselentdeckung.
Die Blockchiffreklassen, die in der Basisklassenbibliothek bereitgestellt werden, verwenden einen Standardverkettungsmodus namens Verschlüsselungsblockverkettung (CBC), obwohl Sie diese Standardeinstellung bei Bedarf ändern können.
CBC-Chiffre überwinden die Probleme, die mit ECB-Chiffre verbunden sind, indem ein Initialisierungsvektor (IV) verwendet wird, um den ersten Nur-Text-Block zu verschlüsseln. Jeder nachfolgende Nur-Text-Block wird einem bitweise exklusiven OR (XOR
) -Vorgang mit dem vorherigen Chiffretextblock unterzogen, bevor er verschlüsselt wird. Jeder Chiffretextblock ist daher von allen vorherigen Blöcken abhängig. Wenn dieses System verwendet wird, können allgemeine Nachrichtenkopfzeilen, die einem nicht autorisierten Benutzer bekannt sind, nicht zum Reverse Engineering eines Schlüssels verwendet werden.
Eine Möglichkeit, Daten zu kompromittieren, die mit einer CBC-Chiffre verschlüsselt sind, besteht darin, eine vollständige Suche nach jedem möglichen Schlüssel durchzuführen. Abhängig von der Größe des Schlüssels, der zur Verschlüsselung verwendet wird, ist diese Art von Suche sehr zeitaufwändig, selbst mit den schnellsten Computern, und daher nicht durchführbar. Größere Schlüsselgrößen sind schwieriger zu entschlüsseln. Obwohl die Verschlüsselung es für einen Angreifer theoretisch nicht unmöglich macht, die verschlüsselten Daten abzurufen, erhöht sie die Kosten dafür. Wenn es drei Monate dauert, bis eine vollständige Suche durchgeführt wird, um Daten abzurufen, die nur für ein paar Tage aussagekräftig sind, ist die erschöpfende Suchmethode unpraktisch.
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. Der Initialisierungsvektor ist nicht geheim und kann mit der Nachricht in Klartext übermittelt werden. Der Schlüssel muss jedoch vor nicht autorisierten Benutzern geheim gehalten werden. Aufgrund dieser Probleme wird die Verschlüsselung mit geheimen Schlüsseln häufig zusammen mit public-key-Verschlüsselung verwendet, um die Werte des Schlüssels und IV privat zu kommunizieren.
Vorausgesetzt, Alice und Bob sind zwei Parteien, die über einen unsicheren Kanal kommunizieren möchten, können sie die Verschlüsselung mit geheimem Schlüssel wie folgt verwenden: Alice und Bob stimmen zu, einen bestimmten Algorithmus (z. B. AES) mit einem bestimmten Schlüssel und IV zu verwenden. Alice verfasst eine Nachricht und erstellt einen Netzwerkdatenstrom (möglicherweise eine benannte Pipe oder Netzwerk-E-Mail), an der die Nachricht gesendet werden soll. Als Nächstes verschlüsselt sie den Text mithilfe des Schlüssels und IV und sendet die verschlüsselte Nachricht und IV über das Intranet an Bob. Bob erhält den verschlüsselten Text und entschlüsselt ihn mithilfe des IV und zuvor vereinbarten Schlüssels. Wenn die Übertragung abgefangen wird, kann der Interceptor die ursprüngliche Nachricht nicht wiederherstellen, da sie den Schlüssel nicht kennen. In diesem Szenario muss nur der Schlüssel geheim bleiben. In einem realen Szenario generiert Alice oder Bob einen geheimen Schlüssel und verwendet public-key (asymmetrische) Verschlüsselung, um den geheimen (symmetrischen) Schlüssel an die andere Partei zu übertragen. Weitere Informationen zur Verschlüsselung mit öffentlichem Schlüssel finden Sie im nächsten Abschnitt.
.NET stellt die folgenden Klassen bereit, die Verschlüsselungsalgorithmen mit geheimen Schlüsseln implementieren:
HMACSHA256, HMACSHA384 und HMACSHA512. (Dies sind technisch geheime Algorithmen, da sie Nachrichtenauthentifizierungscodes darstellen, die mithilfe einer kryptografischen Hashfunktion in Kombination mit einem geheimen Schlüssel berechnet werden. Siehe Hashwerte weiter unten in diesem Artikel.)
Verschlüsselung mit öffentlichem Schlüssel
Die Verschlüsselung mit öffentlichem Schlüssel verwendet einen privaten Schlüssel, der vor nicht autorisierten Benutzern geheim gehalten werden muss, und einen öffentlichen Schlüssel, der für jeden öffentlich zugänglich gemacht werden kann. Der öffentliche Schlüssel und der private Schlüssel sind mathematisch verknüpft; Daten, die mit dem öffentlichen Schlüssel verschlüsselt sind, können nur mit dem privaten Schlüssel entschlüsselt werden, und Daten, die mit dem privaten Schlüssel signiert sind, können nur mit dem öffentlichen Schlüssel überprüft werden. Der öffentliche Schlüssel kann jedem zur Verfügung gestellt werden; es wird verwendet, um Daten zu verschlüsseln, die an den Keeper des privaten Schlüssels gesendet werden. Kryptografiealgorithmen für öffentliche Schlüssel werden auch als asymmetrische Algorithmen bezeichnet, da ein Schlüssel zum Verschlüsseln von Daten erforderlich ist und ein anderer Schlüssel zum Entschlüsseln von Daten erforderlich ist. Eine grundlegende kryptografische Regel verbietet die Wiederverwendung von Schlüsseln, und beide Schlüssel sollten für jede Kommunikationssitzung eindeutig sein. In der Praxis sind asymmetrische Schlüssel jedoch im Allgemeinen langlebig.
Zwei Parteien (Alice und Bob) können die Verschlüsselung mit öffentlichem Schlüssel wie folgt verwenden: Zuerst generiert Alice ein öffentliches/privates Schlüsselpaar. Wenn Bob Alice eine verschlüsselte Nachricht senden möchte, fragt er sie nach ihrem öffentlichen Schlüssel. Alice schickt Bob ihren öffentlichen Schlüssel über ein unsicheres Netzwerk, und Bob verwendet diesen Schlüssel, um eine Nachricht zu verschlüsseln. Bob sendet die verschlüsselte Nachricht an Alice und entschlüsselt sie mit ihrem privaten Schlüssel. Wenn Bob Alices Schlüssel über einen nicht unsicheren Kanal erhalten hat, z. B. ein öffentliches Netzwerk, ist Bob offen für einen Man-in-the-Middle-Angriff. Daher muss Bob mit Alice überprüfen, ob er über eine korrekte Kopie ihres öffentlichen Schlüssels verfügt.
Während der Übertragung des öffentlichen Schlüssels von Alice kann ein nicht autorisierter Agent den Schlüssel abfangen. Darüber hinaus kann derselbe Agent die verschlüsselte Nachricht von Bob abfangen. Der Agent kann die Nachricht jedoch nicht mit dem öffentlichen Schlüssel entschlüsseln. Die Nachricht kann nur mit dem privaten Schlüssel von Alice entschlüsselt werden, der nicht übertragen wurde. Alice verwendet ihren privaten Schlüssel nicht, um eine Antwortnachricht an Bob zu verschlüsseln, da jeder mit dem öffentlichen Schlüssel die Nachricht entschlüsseln konnte. Wenn Andrea eine Nachricht zurück an Bob senden möchte, fragt sie Bob nach seinem öffentlichen Schlüssel und verschlüsselt ihre Nachricht mit diesem öffentlichen Schlüssel. Bob entschlüsselt dann die Nachricht mit seinem zugeordneten privaten Schlüssel.
In diesem Szenario verwenden Alice und Bob die Verschlüsselung mit öffentlichem Schlüssel (asymmetrisch), um einen geheimen (symmetrischen) Schlüssel zu übertragen und die Verschlüsselung geheimer Schlüssel für den Rest ihrer Sitzung zu verwenden.
Die folgende Liste bietet Vergleiche zwischen Kryptografiealgorithmen mit öffentlichem Schlüssel und geheimen Schlüsseln:
Kryptografiealgorithmen mit öffentlichem Schlüssel verwenden eine feste Puffergröße, während kryptografische Algorithmen mit geheimem Schlüssel einen Puffer mit variabler Länge verwenden.
Public-Key-Algorithmen können nicht verwendet werden, um Daten in Datenströme zu verketten, wie es geheime Schlüsselalgorithmen können, da nur kleine Datenmengen verschlüsselt werden können. Daher verwenden asymmetrische Vorgänge nicht das gleiche Streamingmodell wie symmetrische Vorgänge.
Die Verschlüsselung mit öffentlichem Schlüssel hat einen wesentlich größeren Schlüsselbereich (Bereich möglicher Werte für den Schlüssel) als verschlüsselung mit geheimem Schlüssel. Daher ist die Verschlüsselung öffentlicher Schlüssel weniger anfällig für erschöpfende Angriffe, die jeden möglichen Schlüssel ausprobieren.
Öffentliche Schlüssel sind einfach zu verteilen, da sie nicht gesichert werden müssen, vorausgesetzt, dass es eine Möglichkeit gibt, die Identität des Absenders zu überprüfen.
Einige Public Key-Algorithmen (z. B. RSA und DSA, aber nicht Diffie-Hellman) können verwendet werden, um digitale Signaturen zu erstellen, um die Identität des Absenders von Daten zu überprüfen.
Public-Key-Algorithmen sind im Vergleich zu Algorithmen mit geheimen Schlüsseln sehr langsam und nicht für die Verschlüsselung großer Datenmengen ausgelegt. Public Key-Algorithmen sind nur für die Übertragung sehr kleiner Datenmengen nützlich. In der Regel wird die Verschlüsselung mit öffentlichem Schlüssel verwendet, um einen Schlüssel und einen Initialisierungsvektor (IV) zu verschlüsseln, die anschließend von einem geheimen Schlüsselalgorithmus benutzt werden. Nachdem der Schlüssel und IV übertragen wurden, wird die Verschlüsselung mit geheimen Schlüsseln für den Rest der Sitzung verwendet.
.NET stellt die folgenden Klassen bereit, die Public Key-Algorithmen implementieren:
RSA ermöglicht sowohl Verschlüsselung als auch Signierung, aber DSA kann nur zum Signieren verwendet werden. DSA ist nicht so sicher wie RSA, und wir empfehlen RSA. Diffie-Hellman kann nur für die Schlüsselgenerierung verwendet werden. Im Allgemeinen sind Public Key-Algorithmen in ihrer Verwendung eingeschränkter als private Schlüsselalgorithmen.
Digitale Signaturen
Öffentliche Schlüsselalgorithmen können auch verwendet werden, um digitale Signaturen zu bilden. Digitale Signaturen authentifizieren die Identität eines Absenders (wenn Sie dem öffentlichen Schlüssel des Absenders vertrauen) und schützen die Integrität von Daten. Mithilfe eines von Alice generierten öffentlichen Schlüssels kann der Empfänger der Daten von Alice überprüfen, ob Alice ihn gesendet hat, indem er die digitale Signatur mit den Daten von Alice und dem öffentlichen Schlüssel von Alice vergleicht.
Um public-key-Kryptografie zum digitalen Signieren einer Nachricht zu verwenden, wendet Alice zuerst einen Hashalgorithmus auf die Nachricht an, um einen Nachrichtendigest zu erstellen. Der Nachrichtendigest ist eine kompakte und eindeutige Darstellung von Daten. Alice verschlüsselt dann den Nachrichtendigest mit ihrem privaten Schlüssel, um ihre persönliche Signatur zu erstellen. Nach Erhalt der Nachricht und Signatur entschlüsselt Bob die Signatur mithilfe des öffentlichen Schlüssels von Alice, um den Nachrichtendigest wiederherzustellen und die Nachricht mit demselben Hashalgorithmus wiederherzustellen, den Alice verwendet hat. Wenn der Nachrichtendigest, den Bob berechnet, genau mit dem von Alice empfangenen Nachrichtendigest übereinstimmt, ist Bob sicher, dass die Nachricht vom Besitzer des privaten Schlüssels stammt und dass die Daten nicht geändert wurden. Wenn Bob vertraut, dass Alice der Besitzer des privaten Schlüssels ist, weiß er, dass die Nachricht von Alice stammt.
Hinweis
Eine Signatur kann von jeder Person überprüft werden, da der öffentliche Schlüssel des Absenders allgemein bekannt ist und in der Regel im Format der digitalen Signatur enthalten ist. Diese Methode behält die Geheimhaltung der Nachricht nicht bei; damit die Nachricht geheim ist, muss sie auch verschlüsselt werden.
.NET stellt die folgenden Klassen bereit, die Algorithmen für digitale Signaturen implementieren:
Hashwerte
Hashalgorithmen ordnen Binäre Werte einer beliebigen Länge zu kleineren Binärwerten einer festen Länge zu, die als Hashwerte bezeichnet werden. Ein Hashwert ist eine numerische Darstellung eines Datenabschnitts. Wenn Sie einen Absatz mit Nur-Text hashen und sogar einen Buchstaben des Absatzes ändern, erzeugt ein nachfolgendes Hash einen anderen Wert. Wenn der Hash kryptografisch stark ist, ändert sich der Wert erheblich. Wenn beispielsweise ein einzelnes Bit einer Nachricht geändert wird, kann eine starke Hashfunktion eine Ausgabe erzeugen, die sich um 50 Prozent unterscheidet. Viele Eingabewerte können einen Hash auf denselben Ausgabewert aufweisen. Dennoch ist es rechnerisch unmöglich, zwei verschiedene Eingabewerte zu ermitteln, die denselben Hashwert bilden.
Zwei Parteien (Alice und Bob) könnten eine Hashfunktion verwenden, um die Nachrichtenintegrität sicherzustellen. Sie würden einen Hashalgorithmus auswählen, um ihre Nachrichten zu signieren. Alice schreibt eine Nachricht und erstellt dann einen Hash dieser Nachricht mithilfe des ausgewählten Algorithmus. Anschließend folgen sie einer der folgenden Methoden:
Alice sendet die Nur-Text-Nachricht und die Hashnachricht (digitale Signatur) an Bob. Bob empfängt und hashet die Nachricht und vergleicht seinen Hashwert mit dem Hashwert, den er von Alice erhalten hat. Wenn die Hashwerte identisch sind, wurde die Nachricht nicht geändert. Wenn die Werte nicht identisch sind, wurde die Nachricht geändert, nachdem Alice sie geschrieben hat.
Leider stellt diese Methode die Authentizität des Absenders nicht fest. Jeder kann Alice imitieren und eine Nachricht an Bob senden. Sie können denselben Hash-Algorithmus verwenden, um ihre Nachricht zu signieren, und alles, was Bob feststellen kann, ist, dass die Nachricht mit ihrer Signatur übereinstimmt. Dies ist eine Form eines Man-in-the-middle-Angriffs. Weitere Informationen finden Sie unter Cryptography Next Generation (CNG) Secure Communication Example.
Alice sendet die Klartextnachricht an Bob über einen unsicheren öffentlichen Kanal. Sie sendet die Hashnachricht über einen sicheren privaten Kanal an Bob. Bob empfängt die Nur-Text-Nachricht, hashet sie und vergleicht den Hash mit dem privat ausgetauschten Hash. Wenn die Hashes übereinstimmen, weiß Bob zwei Dinge:
Die Nachricht wurde nicht geändert.
Der Absender der Nachricht (Alice) ist authentifiziert.
Damit dieses System funktioniert, muss Alice ihren ursprünglichen Hashwert von allen Parteien außer Bob ausblenden.
Alice sendet die Nur-Text-Nachricht an Bob über einen nicht unsicheren öffentlichen Kanal und platziert die Hashnachricht auf ihrer öffentlich sichtbaren Website.
Mit dieser Methode wird verhindert, dass Nachrichten manipuliert werden, indem verhindert wird, dass jeder den Hashwert ändert. Obwohl die Nachricht und ihr Hash von jedem gelesen werden können, kann der Hashwert nur von Alice geändert werden. Ein Angreifer, der alice imitieren möchte, benötigt Zugriff auf die Website von Alice.
Keiner der vorherigen Methoden verhindert, dass jemand Alices Nachrichten liest, weil sie in Nur-Text übertragen werden. Die vollständige Sicherheit erfordert in der Regel digitale Signaturen (Nachrichtensignatur) und Verschlüsselung.
.NET stellt die folgenden Klassen bereit, die Hashingalgorithmen implementieren:
.NET stellt außerdem bereit MD5 und SHA1. Die ALGORITHMEN MD5 und SHA-1 wurden jedoch als unsicher erwiesen, und SHA-2 wird stattdessen empfohlen. SHA-2 umfasst SHA256, SHA384 und SHA512.
Zufallszahlengenerierung
Die Zufallszahlengenerierung ist für viele kryptografische Vorgänge integral. Beispielsweise müssen kryptografische Schlüssel so zufällig wie möglich sein, damit sie nicht reproduzierbar sind. Kryptografische Zufallszahlengeneratoren müssen eine Ausgabe erzeugen, die mit einer Wahrscheinlichkeit von mehr als 1/2 nicht vorhergesagt werden kann. Daher darf jede Methode zur Vorhersage des nächsten Ausgabebits nicht besser als zufällige Schätzvorgänge ausgeführt werden. Die Klassen in .NET verwenden Zufallszahlengeneratoren, um kryptografische Schlüssel zu generieren.
Die RandomNumberGenerator Klasse ist eine Implementierung eines Zufallszahlengeneratoralgorithmus.
ClickOnce-Manifeste
Mit den folgenden Kryptografieklassen können Sie Informationen zu Manifestsignaturen für Anwendungen abrufen und überprüfen, die mithilfe der ClickOnce-Technologie bereitgestellt werden:
Die ManifestSignatureInformation Klasse ruft Informationen zu einer Manifestsignatur ab, wenn Sie deren VerifySignature Methodenüberladungen verwenden.
Mit der ManifestKinds Enumeration können Sie angeben, welche Manifeste überprüft werden sollen. Das Ergebnis der Überprüfung ist einer der SignatureVerificationResult Enumerationswerte.
Die ManifestSignatureInformationCollection -Klasse stellt eine schreibgeschützte Auflistung der ManifestSignatureInformation -Objekte der überprüften Signatur bereit.
Darüber hinaus stellen die folgenden Klassen spezifische Signaturinformationen bereit:
StrongNameSignatureInformation Enthält die Informationen zur starken Namenssignatur für ein Manifest.
AuthenticodeSignatureInformation stellt die Authenticode-Signaturinformationen für ein Manifest dar.
TimestampInformation enthält Informationen zum Zeitstempel einer Authenticode-Signatur.
TrustStatus bietet eine einfache Möglichkeit, zu überprüfen, ob eine Authenticode-Signatur vertrauenswürdig ist.
Kryptografieklassen der nächsten Generation (CNG)
Die Cryptography Next Generation (CNG)-Klassen stellen einen verwalteten Wrapper um die systemeigenen CNG-Funktionen bereit. (CNG ist der Ersatz für CryptoAPI.) Diese Klassen haben "Cng" als Teil ihrer Namen. Zentral für die CNG-Wrapperklassen ist die CngKey Schlüsselcontainerklasse, die den Speicher und die Verwendung von CNG-Schlüsseln abstrahiert. Mit dieser Klasse können Sie ein Schlüsselpaar oder einen öffentlichen Schlüssel sicher speichern und mithilfe eines einfachen Zeichenfolgennamens darauf verweisen. Die elliptische kurvenbasierte ECDsaCng Signaturklasse und die ECDiffieHellmanCng Verschlüsselungsklasse können CngKey Objekte verwenden.
Die CngKey Klasse wird für eine Vielzahl zusätzlicher Vorgänge verwendet, einschließlich Öffnen, Erstellen, Löschen und Exportieren von Schlüsseln. Sie stellt auch den Zugriff auf das zugrunde liegende Schlüsselhandle bereit, das für den direkten Aufruf systemeigener Funktionen verwendet wird.
.NET enthält auch eine Vielzahl von unterstützenden CNG-Klassen, z. B. die folgenden:
CngProvider verwaltet einen Schlüsselspeicheranbieter.
CngAlgorithm verwaltet einen CNG-Algorithmus.
CngProperty verwaltet häufig verwendete Schlüsseleigenschaften.
Siehe auch
- Kryptografiemodell – Beschreibt, wie Kryptografie in der Basisklassenbibliothek implementiert wird.
- Plattformübergreifende Kryptografie
- Verwenden der Auffüllung für die Zeitsteuerung bei Sicherheitsrisiken mit symmetrischer Entschlüsselung im CBC-Modus
- ASP.NET Kerndatenschutz