Hashes und digitale Signaturen (Windows Store-Apps)
Hashes
Eine kryptografische Hashfunktion gibt für einen an sie übergebenen Datenblock beliebiger Länge eine Bitzeichenfolge fester Größe zurück. Hashfunktionen werden normalerweise zum Signieren von Daten verwendet. Da die meisten Signaturvorgänge für öffentliche Schlüssel rechtenintensiv sind, ist das Signieren eines Nachrichtenhashes in der Regel effizienter als das Signieren der ursprünglichen Nachricht. Im folgenden Verfahren wird ein gängiges Szenario vorgestellt, das für diese Zwecke aber vereinfacht wurde:
- Andrea erstellt ein Schlüsselpaar, hält den privaten Schlüssel geheim und veröffentlicht den öffentlichen Schlüssel mithilfe einer vertrauenswürdigen Zertifizierungsstelle.
- Andrea erstellt eine Nachricht, wendet einen Hash auf sie an, signiert den Hash mit ihrem privaten Schlüssel und sendet die (unverschlüsselte) Nachricht sowie die Signatur an Sven.
- Sven ruft Andreas öffentlichen Schlüssel ab und entschlüsselt die Signatur, um ihren Hash abzurufen.
- Sven wendet den Hash auf die Nachricht von Andrea an und vergleicht den von ihm berechneten Hash mit dem entschlüsselten Hash. Wenn die Hashes identisch sind, kann Sven relativ sicher sein, dass die Nachricht von Andrea nicht manipuliert wurde.
Beachten Sie, dass Andrea eine unverschlüsselte Nachricht gesendet hat. Nur der Hash war verschlüsselt. Durch das Verfahren wird nur sichergestellt, dass die ursprüngliche Nachricht nicht verändert wurde und – durch die Verwendung von Andreas öffentlichem Schlüssel – dass der Nachrichtenhash von jemandem mit Zugriff auf Andreas privaten Schlüssel signiert wurde (wahrscheinlich von Andrea).
Sie können die HashAlgorithmProvider-Klasse verwenden, um die verfügbaren Hashalgorithmen aufzulisten und einen CryptographicHash-Wert zu erstellen.
Digitale Signaturen von öffentlichen Schlüsseln sind das Äquivalent der Nachrichtenauthentifizierungscodes (MACs) von privaten Schlüsseln. Während MACs private Schlüssel verwenden, um einem Nachrichtenempfänger das Überprüfen der Nachrichtenintegrität zu ermöglichen, verwenden Signaturen ein privates/öffentliches Schlüsselpaar.
Digitale Signaturen
Digitale Signaturen von öffentlichen Schlüsseln sind das Äquivalent der Nachrichtenauthentifizierungscodes (MACs) von privaten Schlüsseln. Während MACs private Schlüssel verwenden, um einem Nachrichtenempfänger das Überprüfen der Nachrichtenintegrität zu ermöglichen, verwenden Signaturen ein privates/öffentliches Schlüsselpaar.
Da die meisten Signaturvorgänge für öffentliche Schlüssel rechtenintensiv sind, ist das Signieren eines Nachrichtenhashes in der Regel aber effizienter als das Signieren der ursprünglichen Nachricht. Der Absender erstellt einen Nachrichtenhash, signiert ihn und sendet sowohl die Signatur als auch die (unverschlüsselte) Nachricht. Der Empfänger berechnet einen Hash für die Nachricht, entschlüsselt die Signatur und vergleicht die entschlüsselte Signatur mit dem Hashwert. Stimmen sie überein, kann der Empfänger relativ sicher sein, dass die Nachricht tatsächlich vom Absender stammt und während der Übertragung nicht manipuliert wurde.
Durch das Signieren wird nur sichergestellt, dass die ursprüngliche Nachricht nicht verändert wurde und – durch die Verwendung des öffentlichen Schlüssels des Absenders – dass der Nachrichtenhash von jemandem mit Zugriff auf den privaten Schlüssel signiert wurde.
Sie können ein AsymmetricKeyAlgorithmProvider-Objekt verwenden, um die verfügbaren Signaturalgorithmen aufzulisten und ein Schlüsselpaar zu generieren oder zu importieren. Sie können statische Methoden der CryptographicHash-Klasse zum Signieren einer Nachricht oder Überprüfen einer Signatur verwenden.