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
secp256k1 bei WebCrypto angefordert
häufigBitcoin-/Ethereum-Code nimmt oft an, dass namedCurve: "secp256k1" genauso funktioniert wie P-256. Das war nie so: Die WebCrypto-Registry umfasst nur P-256, P-384 und P-521. (Das crypto-Modul von Node außerhalb von WebCrypto unterstützt secp256k1 sehr wohl.)
Namen im JWT-Stil als Algorithmusnamen verwendet
häufig„ES256“, „RS256“ oder „ECDSA_P256_SHA256“ sind Bezeichner aus JOSE oder anderen Ökosystemen. WebCrypto erwartet { name: "ECDSA", namedCurve: "P-256" } für Schlüssel und { name: "ECDSA", hash: "SHA-256" } für Operationen.
Neuere Algorithmen in älteren Laufzeitumgebungen
gelegentlichEd25519/X25519 sind im Lauf von 2023–2025 in WebCrypto angekommen; ältere Browser, Node-Versionen und manche WebViews lehnen sie noch ab. Prüfe per Feature-Detection, ob sie verfügbar sind, bevor du dich auf sie verlässt.
So behebst du den Fehler
- 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.
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" });