Saltar al contenido
ecdsa.com
OpenSSL CLI (openssl dgst -verify)CLI de OpenSSL

Mensaje de error

Verification failure

Texto de OpenSSL 3.x. OpenSSL 1.1.x lo escribe con mayúsculas: «Verification Failure». openssl pkeyutl -verify imprime su variante hermana, «Signature Verification Failure». En OpenSSL 3.x, ambos mensajes van acompañados de una línea de la pila de errores como «error:030000EA:digital envelope routines:EVP_DigestVerifyFinal:provider signature failure» (reproducido en 3.6). Una firma que ni siquiera es DER nunca llega hasta aquí: falla con «Error verifying data».

Qué significa

openssl dgst -verify calculó el resumen de tus datos, comprobó la firma con la clave pública y las matemáticas dijeron que no. La clave, los datos y la firma se pudieron leer sin problemas: uno de los tres no corresponde a los otros dos. Como contraste, la salida en caso de éxito es «Verified OK».

Por qué ocurre

Cómo solucionarlo

  1. 1.

    Descartar primero la codificación de la firma

    dgst -verify solo lee las firmas ECDSA en ASN.1 DER. Una firma r‖s en bruto de WebCrypto, de JWS o de una API de Go/Python en modo raw —exactamente 64 bytes para P-256 y 96 para P-384— falla antes, con «Error verifying data». Si la tuya es DER y aun así falla aquí, lo que está mal son los datos, el resumen o la clave. La herramienta DER ⇄ raw de abajo convierte entre ambas formas y señala los valores high-S no canónicos que rechazan los verificadores estrictos.

  2. 2.

    Verificar con pkeyutl un resumen ya calculado

    Cuando tienes el resumen y no el mensaje, dgst no es la herramienta adecuada (volvería a calcular el hash). pkeyutl verifica contra el resumen en bruto.

    bash
    openssl dgst -sha256 -binary message.bin > msg.hash
    openssl pkeyutl -verify -pubin -inkey pub.pem \
      -sigfile sig.der -in msg.hash -pkeyopt digest:sha256
  3. 3.

    Descartar cambios en los datos

    Compara los resúmenes de los bytes exactos en ambos lados; cualquier diferencia significa que cambió el mensaje, no la criptografía.

    bash
    openssl dgst -sha256 message.bin       # run on signer and verifier sides
    xxd message.bin | tail -2                # check for a sneaky trailing 0a

Errores relacionados

Explorar toda la base de datos de errores de firma