Überprüfen von Signaturen
Um zu überprüfen, ob Daten von einem bestimmten Teilnehmer signiert wurden, sind folgende Informationen erforderlich:
der öffentliche Schlüssel des Teilnehmers, der die Daten signiert hat.
die digitale Signatur.
die Daten, die signiert wurden.
der Hashalgorithmus, der vom Signaturgeber verwendet wurde.
Mit der RSAPKCS1SignatureDeformatter-Klasse können Sie eine mit der RSAPKCS1SignatureFormatter-Klasse erstellte Signatur überprüfen. Der RSAPKCS1SignatureDeformatter-Klasse muss der öffentliche Schlüssel des Signaturgebers zur Verfügung gestellt werden. Zum Definieren des öffentlichen Schlüssels sind die Modulooperator- und Exponentenwerte erforderlich. (Diese Werte müssen von dem Teilnehmer, der das öffentliche/private Schlüsselpaar generiert hat, bereitgestellt werden.) Zuerst wird ein RSACryptoServiceProvider-Objekt erstellt, das den öffentlichen Schlüssel enthält, mit dem die Signatur überprüft wird. Danach wird mit den Modulooperator- und Exponentenwerten, durch die der öffentliche Schlüssel definiert wird, eine RSAParameters-Struktur initialisiert.
Anhand des folgenden Codes wird die Erstellung einer RSAParameters-Struktur verdeutlicht. Für die Modulus-Eigenschaft wird der Wert eines Bytearrays mit dem Namen ModulusData
und für die Exponent-Eigenschaft der Wert eines Bytearrays mit dem Namen ExponentData
festgelegt.
Dim RSAKeyInfo As RSAParameters
RSAKeyInfo.Modulus = ModulusData
RSAKeyInfo.Exponent = ExponentData
RSAParameters RSAKeyInfo;
RSAKeyInfo.Modulus = ModulusData;
RSAKeyInfo.Exponent = ExponentData;
Nach der Erstellung des RSAParameters-Objekts können Sie mit den dort definierten Werten eine neue Instanz der RSACryptoServiceProvider-Klasse initialisieren. Die RSACryptoServiceProvider-Instanz wird dann zum Übertragen des Schlüssels an den Konstruktor einer RSAPKCS1SignatureDeformatter-Klasse übergeben.
Dieser Prozess wird anhand des folgenden Beispiels veranschaulicht. HashValue
und SignedHashValue
sind in diesem Beispiel Bytearrays, die von einer Gegenseite bereitgestellt wurden. Die Gegenseite hat den Wert HashValue
mit dem SHA1-Algorithmus signiert und so die digitale Signatur SignedHashValue
erzeugt. Mit der RSAPKCS1SignatureDeformatter.VerifySignature-Methode wird überprüft, ob die digitale Signatur gültig ist und zum Signieren des Werts HashValue
verwendet wurde.
Dim RSA As New RSACryptoServiceProvider()
RSA.ImportParameters(RSAKeyInfo)
Dim RSADeformatter As New RSAPKCS1SignatureDeformatter(RSA)
RSADeformatter.SetHashAlgorithm("SHA1")
If RSADeformatter.VerifySignature(HashValue, SignedHashValue) Then
Console.WriteLine("The signature is valid.")
Else
Console.WriteLine("The signture is not valid.")
End If
RSACryptoServiceProvider RSA = new RSACryptoServiceProvider();
RSA.ImportParameters(RSAKeyInfo);
RSAPKCS1SignatureDeformatter RSADeformatter = new RSAPKCS1SignatureDeformatter(RSA);
RSADeformatter.SetHashAlgorithm("SHA1");
if(RSADeformatter.VerifySignature(HashValue, SignedHashValue))
{
Console.WriteLine("The signature is valid.");
}
else
{
Console.WriteLine("The signature is not valid.");
}
Wenn die Signatur gültig ist, wird durch dieses Codefragment die Meldung "The signature is valid
" ausgegeben. Wenn die Signatur ungültig ist, wird die Meldung "The signature is not valid
" angezeigt.
Siehe auch
Konzepte
Generieren von Signaturen
Kryptografische Signaturen