Zum Inhalt springen
ecdsa.com
WebCrypto crypto.subtleWebCrypto

Fehlermeldung

NotSupportedError: Unrecognized algorithm name

Der Text oben ist die Formulierung von Node; für unbekannte Kurven meldet Node außerdem „Unrecognized namedCurve“. Chrome gibt „Failed to execute 'generateKey' on 'SubtleCrypto': Algorithm: Unrecognized name“ aus, Firefox „Operation is not supported“, Safari „The operation is not supported.“ – beständig ist der DOMException-Name NotSupportedError.

WebCrypto crypto.subtle — browsers & Node

Was der Fehler bedeutet

Der angegebene Algorithmus (oder die angegebene Kurve) gehört nicht zu dem, was diese WebCrypto-Implementierung anbietet. Entweder enthält der Bezeichner einen Tippfehler, oder du hast etwas angefordert, das tatsächlich außerhalb des Standardumfangs liegt – meistens secp256k1: Die Kurve fehlt in WebCrypto, obwohl sie eine EC-Kurve wie die der P-*-Familie ist. Die Prüfung läuft, bevor Schlüsselmaterial angefasst wird; derselbe Aufruf gelingt also, sobald der Name korrigiert ist.

Warum der Fehler auftritt

So behebst du den Fehler

  1. 1.

    Exakte WebCrypto-Bezeichner verwenden

    Beim Abgleich der Namen spielt die Groß- und Kleinschreibung keine Rolle, es müssen aber die registrierten Namen sein – und Kurvennamen müssen exakt stimmen. Beachte die zwei Parameter-Dictionaries: generateKey/importKey erwarten namedCurve, sign/verify dagegen hash; sie zu verwechseln ist eine eigene Spielart dieses Fehlers.

    js
    const key = await crypto.subtle.generateKey(
      { name: "ECDSA", namedCurve: "P-256" },   // not "ES256", not "secp256r1"
      false, ["sign", "verify"],
    );
    const sig = await crypto.subtle.sign({ name: "ECDSA", hash: "SHA-256" }, key.privateKey, data);
  2. 2.

    Für secp256k1 eine Bibliothek verwenden

    Im Browser ist eine auditierte Implementierung in reinem JavaScript der übliche Weg; in Node beherrscht das eingebaute crypto-Modul (außerhalb von WebCrypto) die Kurve nativ, Servercode hat also zwei Optionen.

    js
    // browser: @noble/curves (audited, dependency-free)
    import { secp256k1 } from "@noble/curves/secp256k1";
    const ok = secp256k1.verify(signature, msgHash, publicKey);
    
    // node: built-in
    crypto.generateKeyPairSync("ec", { namedCurve: "secp256k1" });

Verwandte Fehler

Gesamte Signaturfehler-Datenbank durchsuchen