Compartir a través de


Hash y firmas digitales (aplicaciones de la Tienda Windows)

Hash

Un función hash criptográfica toma un bloque de datos de una longitud arbitraria y devuelve una cadena de bits de tamaño fijo. Las funciones hash se suelen usar al firmar datos. Como la mayoría de las operaciones de firma con clave pública requieren realizar cálculos intensivos, suele ser más eficiente firmar (cifrar) un hash de mensaje que firmar el mensaje original. El siguiente procedimiento representa un escenario frecuente (aunque simplificado):

  • Alicia crea un par de claves, mantiene su clave privada en secreto y publica su clave pública mediante una entidad de certificación de confianza.
  • Después Alicia crea un mensaje, le aplica un algoritmo hash, firma el hash con su clave privada y envía el mensaje (sin cifrar) y la firma a Roberto.
  • Roberto recupera la clave pública de Alicia y descifra la firma para recuperar el hash de Alicia.
  • Después Roberto aplica el algoritmo hash al mensaje recibido de Alicia y compara el hash que ha calculado con el hash descifrado. Si coinciden, Roberto puede estar razonablemente seguro de que no se ha manipulado el mensaje de Alicia.

Ten en cuenta que Alicia envió un mensaje sin cifrar. Lo que cifró fue el hash. Este procedimiento solo garantiza que no se manipuló el mensaje original y, mediante la clave pública de Alicia, que alguien con acceso a la clave privada de Alicia (probablemente Alicia) firmó el hash de mensaje.

Puedes usar la clase HashAlgorithmProvider para enumerar los algoritmos hash disponibles y crear un valor CryptographicHash.

Las firmas digitales son el equivalente de clave pública a los códigos de autenticación de mensaje (MAC) de clave privada. A diferencia de los MAC, que usan claves privadas para permitir que el destinatario de un mensaje compruebe que el mensaje no se ha manipulado durante la transmisión, las firmas usan un par de claves, la pública y la privada.

Firmas digitales

Las firmas digitales son el equivalente de clave pública a los códigos de autenticación de mensaje (MAC) de clave privada. A diferencia de los MAC, que usan claves privadas para permitir que el destinatario de un mensaje compruebe que el mensaje no se ha manipulado durante la transmisión, las firmas usan un par de claves, la pública y la privada.

Pero como la mayoría de las operaciones de firma con clave pública requieren realizar cálculos intensivos, suele ser más eficiente firmar (cifrar) un hash de mensaje que firmar el mensaje original. El remitente crea un hash de mensaje, lo firma y envía la firma y el mensaje (sin cifrar). El destinatario calcula un hash para el mensaje, descifra la firma y compara la firma descifrada con el valor de hash. Si coinciden, el destinatario puede estar razonablemente seguro de que el mensaje proviene realmente del remitente y no se manipuló durante la transmisión.

La firma solo garantiza que no se manipuló el mensaje original y, mediante la clave pública del remitente, que alguien con acceso a la clave privada firmó el hash de mensaje.

Puedes usar un objeto AsymmetricKeyAlgorithmProvider para enumerar los algoritmos de firma disponibles y generar o importar un par de claves. Puedes usar métodos estáticos en la clase CryptographicHash para firmar un mensaje o comprobar una firma.

Temas relacionados

MAC, hash y firmas

Guía básica para crear aplicaciones de la Tienda Windows con C# o Visual Basic