Ich versuche, ein öffentliches/privates Schlüsselpaar mithilfe der ECDSA-Kurve secp256k1 zu generieren
Beim Generieren des öffentlichen Schlüssels aus ec256.pem (privater Schlüssel) wird der folgende Fehler ausgegeben
„Schlüssel „ec256.pem“ laden: ungültiges Format“
Zum Generieren des privaten Schlüssels verwendete Befehle:
openssl ecparam -name secp256k1 -out secp256k1.pem
openssl ecparam -in secp256k1.pem -genkey -noout -out ec256.pem
chmod 400 ec256.pem
Zum Generieren des öffentlichen Schlüssels verwendeter Befehl:
ssh-keygen -y -f ec256.pem
Below is the error thrown on running the above cmd ,
Load key "ec256.pem": invalid format
Die verwendeten Versionen sind
OpenSSH_7.4p1, OpenSSL 1.0.2k-fips
Ich muss einen öffentlichen Schlüssel im SSH-Format für den privaten Schlüssel ec256.pem generieren
Antwort1
Wenn ich mir die Kurven anschaue, die unterstützt werden müssen,Standard, RFC 5656: „Integration von elliptischen Kurvenalgorithmen in die Secure Shell-Transportschicht“ (Abschnitt 10)dann sehe ich keine Unterstützung für secp256k1. Natürlich könnten Implementierungen es trotzdem implementieren, aber dies würde auf Kosten der Inkompatibilität mit anderen Implementierungen gehen.
Ich denke also, dass der einfache Grund, warum der private Schlüssel nicht analysiert werden kann, darin liegt, dass sein Format nicht unterstützt wird. Wenn Sie die Kurve einfach durch secp256r1 ersetzen (eine zufällige Primzahlkurve anstelle der secp256k1-Koblitz-Kurve, beachten Sie das „r“ anstelle des „k“ darin), läuft alles reibungslos und mit derselben oder einer höheren Sicherheitsstufe. Die Struktur des privaten Schlüssels ist identisch mit der secp256k1-Kurve, was deutlich zeigt, dass das Problem eher bei der Kurve als beim Dateiformat liegt.
Alternativ können Sie sich für die ausgefallenere Variante entscheidenEd25519-Kurve, wahrscheinlich auf Kosten der Abwärtskompatibilität und mehr Ärger. Dies ist möglicherweise nicht mit der OpenSSL-Befehlszeile kompatibel,siehe Kommentar unten.