我正在尝试使用 ECDSA 曲线 secp256k1 生成公钥/私钥对
从 ec256.pem(私钥)生成公钥时会引发以下错误
“加载密钥“ec256.pem”:格式无效”
生成私钥的命令:
openssl ecparam -name secp256k1 -out secp256k1.pem
openssl ecparam -in secp256k1.pem -genkey -noout -out ec256.pem
chmod 400 ec256.pem
生成公钥的命令:
ssh-keygen -y -f ec256.pem
Below is the error thrown on running the above cmd ,
Load key "ec256.pem": invalid format
使用的版本是
OpenSSH_7.4p1,OpenSSL 1.0.2k-fips
我需要为 ec256.pem 私钥生成 ssh 格式的公钥
答案1
如果我看一下需要支持的曲线标准,RFC 5656:“安全外壳传输层中的椭圆曲线算法集成”(第 10 节)那么我没有看到对 secp256k1 的任何支持。当然,实现仍然可以实现它,但这将以与其他实现不兼容为代价。
所以我认为私钥无法解析的简单原因是不支持其格式。如果您只是用 secp256r1(随机素数曲线而不是 secp256k1 Koblitz 曲线,请注意其中的“r”而不是“k”)替换曲线,那么一切都会顺利运行,并且安全级别相同或更高。私钥的结构与 secp256k1 曲线相同,因此这清楚地表明问题出在曲线上,而不是文件格式上。
或者你也可以选择更花哨的Ed25519曲线,可能会以向后兼容性和更多麻烦为代价。这可能与 OpenSSL 命令行不兼容,请参阅下面的评论。