Compartir a través de


Comprobar firmas

Con el fin de comprobar que alguien en concreto firmó los datos, debe disponer de la información siguiente:

  • La clave pública del firmante de los datos.

  • La firma digital.

  • Los datos firmados.

  • El algoritmo hash que utilizó el firmante.

Para comprobar una firma proveniente de la clase RSAPKCS1SignatureFormatter, utilice la clase RSAPKCS1SignatureDeformatter. La clase RSAPKCS1SignatureDeformatter debe recibir la clave pública del firmante. Necesitará los valores del módulo y el exponente para especificar la clave pública. (La parte que generó el par de claves pública y privada debe proporcionar estos valores.) Primero, debe crear un objeto RSACryptoServiceProvider para contener la clave pública que comprobará la firma y, después, debe inicializar una estructura RSAParameters con los valores del módulo y del exponente que especifican la clave pública.

En el código siguiente se muestra la creación de una estructura RSAParameters. Como valor de la propiedad Modulus se establece una matriz de bytes denominada ModulusData y como valor de la propiedad Exponent se establece una matriz de bytes denominada ExponentData.

Dim RSAKeyInfo As RSAParameters
RSAKeyInfo.Modulus = ModulusData
RSAKeyInfo.Exponent = ExponentData
RSAParameters RSAKeyInfo;
RSAKeyInfo.Modulus = ModulusData;
RSAKeyInfo.Exponent = ExponentData;

Después de crear el objeto RSAParameters, puede inicializar una nueva instancia de la clase RSACryptoServiceProvider con los valores especificados en RSAParameters. RSACryptoServiceProvider, a su vez, se pasa al constructor de RSAPKCS1SignatureDeformatter para transferir la clave.

En el ejemplo siguiente se muestra este proceso. En este ejemplo, HashValue y SignedHashValue son matrices de bytes que proporciona una parte remota. La parte remota ha firmado HashValue utilizando el algoritmo SHA1, con lo que ha generado la firma digital SignedHashValue. El método RSAPKCS1SignatureDeformatter.VerifySignature comprueba que la firma digital es válida y que se utilizó para firmar HashValue.

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.");
}

Este fragmento de código mostrará "The signature is valid" si la firma es válida, y "The signature is not valid" si no lo es.

Vea también

Conceptos

Generar firmas
Firmas criptográficas

Otros recursos

Tareas criptográficas
Servicios criptográficos