Zum Inhalt springen
ecdsa.com
Python cryptographyPython cryptography

Fehlermeldung

cryptography.exceptions.InvalidSignature

Die Exception wird ohne Meldungstext ausgelöst – der Traceback endet mit dem bloßen Klassennamen (reproduziert mit cryptography 50.0).

Python cryptography — raised by verify()

Was der Fehler bedeutet

public_key.verify(signature, data, ...) hat festgestellt, dass die Signatur für diese Daten mit diesem Schlüssel nicht gültig ist. Geparst wurde alles fehlerfrei; nur die Prüfung ist fehlgeschlagen. Weil die Exception absichtlich keine Details enthält, heißt Diagnose: jede Eingabe einzeln testen – Schlüssel, Datenbytes, Kodierung der Signatur, Hash.

Warum der Fehler auftritt

So behebst du den Fehler

  1. 1.

    Rohe Signaturen in DER umwandeln

    Ist die Signatur 64 Byte lang (P-256), teile sie in r und s auf und kodiere sie vor der Prüfung neu als DER.

    python
    from cryptography.hazmat.primitives.asymmetric.utils import encode_dss_signature
    
    r = int.from_bytes(raw_sig[:32], "big")
    s = int.from_bytes(raw_sig[32:], "big")
    der_sig = encode_dss_signature(r, s)
    public_key.verify(der_sig, message, ec.ECDSA(hashes.SHA256()))
  2. 2.

    Prehashed für vorab berechnete Digests verwenden

    Hast du den Digest statt der Nachricht, sag das ausdrücklich – sonst hasht die Bibliothek deinen Hash.

    python
    from cryptography.hazmat.primitives.asymmetric import utils
    
    public_key.verify(
        der_sig,
        digest_bytes,                                    # already SHA-256(message)
        ec.ECDSA(utils.Prehashed(hashes.SHA256())),
    )
  3. 3.

    Herausfinden, welche Eingabe falsch ist

    Füge Schlüssel, Nachricht und Signatur unten in das Tool zur Fehlerdiagnose ein: Es testet die üblichen Hypothesen für eine Abweichung – falscher Hash, Rohformat statt DER, doppeltes Hashing, High-S-Normalisierung, falsche Kurve – und nennt die, mit der deine Signatur gültig wird.

Verwandte Fehler

Gesamte Signaturfehler-Datenbank durchsuchen