Aller au contenu
ecdsa.com
OpenSSL CLI (openssl dgst -verify)CLI OpenSSL

Message d’erreur

Verification failure

Formulation d’OpenSSL 3.x. OpenSSL 1.1.x l’écrit avec des majuscules : « Verification Failure ». openssl pkeyutl -verify affiche le message voisin « Signature Verification Failure ». Sous OpenSSL 3.x, les deux sont accompagnés d’une ligne de la pile d’erreurs telle que « error:030000EA:digital envelope routines:EVP_DigestVerifyFinal:provider signature failure » (reproduit avec 3.6). Une signature qui n’est pas du tout en DER n’arrive jamais jusque-là : elle provoque « Error verifying data ».

Ce que cela signifie

openssl dgst -verify a calculé le condensat de vos données, vérifié la signature avec la clé publique, et les mathématiques ont répondu non. La clé, les données et la signature étaient toutes lisibles : l’un des trois éléments ne va pas avec les deux autres. Pour comparaison, la sortie en cas de succès est « Verified OK ».

Pourquoi cela se produit

Comment corriger l’erreur

  1. 1.

    Écarter d’abord l’encodage de la signature

    dgst -verify ne lit les signatures ECDSA qu’en ASN.1 DER. Une signature brute r‖s issue de WebCrypto, de JWS ou d’une API Go/Python en mode brut (exactement 64 octets pour P-256, 96 pour P-384) échoue plus tôt, sur « Error verifying data ». Si la vôtre est en DER et échoue quand même ici, ce sont les données, le condensat ou la clé qui sont erronés. L’outil DER ⇄ brut ci-dessous convertit d’une forme à l’autre et signale les valeurs high-S non canoniques que les vérificateurs stricts rejettent.

  2. 2.

    Vérifier un condensat précalculé avec pkeyutl

    Lorsque vous disposez du condensat plutôt que du message, dgst n’est pas le bon outil (il hacherait de nouveau). pkeyutl effectue la vérification directement sur le condensat brut.

    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.

    Éliminer les dérives de données

    Comparez les condensats des octets exacts des deux côtés ; toute différence signifie que c’est le message qui a changé, et non la cryptographie.

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

Erreurs associées

Parcourir toute la base de données des erreurs de signature