Zum Inhalt springen
ecdsa.com

Signaturprüfung

Die Public-Key-Prüfung, ob eine Signatur über genau diese Nachricht mit dem privaten Schlüssel erzeugt wurde, der zu einem gegebenen öffentlichen Schlüssel gehört – mit einem Algorithmus, den der Verifizierer vorab gewählt hat.
Auch geschrieben alssignature verificationverify signature

Eingaben sind der öffentliche Schlüssel, die Nachricht (oder ihr Digest), die Signatur und der Algorithmus mit seinen Parametern; die Ausgabe lautet gültig oder ungültig. Ein strenger Verifizierer weist außerdem fehlerhafte Eingaben zurück: nicht minimales DER, r oder s außerhalb von 1…n−1, ein S bei EdDSA, das nicht kleiner als die Gruppenordnung ist, rohe Signaturen falscher Länge, Punkte, die nicht auf der Kurve liegen, und Schlüssel des falschen Typs.

Die meisten Fehler vom Typ „invalid signature“ im Produktivbetrieb sind nicht kryptografisch: Es wurden andere Bytes signiert (neu serialisiertes JSON, geänderter Whitespace oder geänderte Zeilenenden, ein fehlender abschließender Zeilenumbruch), ein anderer Hash wurde verwendet, eine DER-Signatur landete bei einem Verifizierer für rohe Signaturen oder umgekehrt, Kurve oder Salt-Länge bei PSS weichen ab, oder der falsche Schlüssel wurde ausgewählt. Prüfe jede Eingabe einzeln; der Signatur-Verifizierer zeigt, welche Kurve, welchen Hash und welche Kodierung er verwendet hat.

Sicherheitsregeln, die in der Praxis erfolgreiche Angriffe verhindern: Lege den Algorithmus auf der Seite des Verifizierers fest, statt ihn aus der Nachricht zu lesen (alg im JWT, RFC 8725 §3.1); prüfe, bevor du die Payload parst oder verarbeitest; prüfe die Bindung zwischen Schlüssel und Identität (Pfadvalidierung von Zertifikaten, kid im JWKS, known_hosts); und lege dich bei Konsenssystemen auf einen einzigen Satz von Prüfregeln fest, da Bibliotheken bei Grenzfällen wie der EdDSA-Prüfung mit Kofaktor uneins sind.

Standards und Quellen

Alle Begriffe