OpenSSLコマンドラインを使用して、次の仕様を満たすECDH公開キーを生成しようとしています。
グループP256のECDH公開鍵を含むBase64エンコードX.509 SubjectPublicKeyInfo構造を使用します
次のコマンドは、キーを提供します。
openssl ecparam -name prime256v1 -out prime256v1.pem
openssl ecparam -in prime256v1.pem -genkey -noout -out prime256v1-key.pem
openssl ec -in prime256v1-key.pem -pubout -out pubkey.pem
Key: MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE85KGK3YiX7tC7mFm+Te1xRYOeDq23h80MPPt1nMZ/ZRpwjRGPEUr6vaoOCB8QC3uHmaPKOAgQ0Kk9Sc4M1QUmA==
ただし、このキーは、アクセスしているAPIで受け入れられません。
機能しているキーの例は次のとおりです。
MDkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDIgACKoJz0lSBocGMsdl8TiMasRsBOxpMywCqzAoOLwZfUl0=
このサンプルキーは44(Base64)バイト短く、わずかに異なるSubjectPublickKeyInfo
署名があります。
私の質問は、これらの2つのキーの違いは何であり、OpenSSLコマンドラインツールを使用してそのようなキーペアを生成するにはどうすればよいかです。
「機能するキーの例」として投稿したのは、PEMラッパーと通常の改行なしのbase64でエンコードされたEC pubkeyです。より具体的には、EC公開キーの圧縮バージョンです。しかし、opensslは デフォルトでは非圧縮キー と書き込みます。
次のように、圧縮バージョンと非圧縮バージョンの間で変換できます。
$ cat ExampleOfRejectedKey.headerlesspem
MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE85KGK3YiX7tC7mFm+Te1xRYOeDq23h80MPPt1nMZ/ZRpwjRGPEUr6vaoOCB8QC3uHmaPKOAgQ0Kk9Sc4M1QUmA==
$ openssl ec -inform DER -pubin -in <(base64 -d ExampleOfRejectedKey.headerlesspem)
read EC key
writing EC key
-----BEGIN PUBLIC KEY-----
MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE85KGK3YiX7tC7mFm+Te1xRYOeDq2
3h80MPPt1nMZ/ZRpwjRGPEUr6vaoOCB8QC3uHmaPKOAgQ0Kk9Sc4M1QUmA==
-----END PUBLIC KEY-----
$ openssl ec -inform DER -pubin -in <(base64 -d ExampleOfRejectedKey.headerlesspem) -conv_form compressed
read EC key
writing EC key
-----BEGIN PUBLIC KEY-----
MDkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDIgAC85KGK3YiX7tC7mFm+Te1xRYOeDq2
3h80MPPt1nMZ/ZQ=
-----END PUBLIC KEY-----
ご覧のとおり、今ではかなり短くなっています。そして、長さが作業キーに近い。これを試して。 (なぜAPIが圧縮表現を主張し、そうは言わないのかは私を超えています。)
この質問を参照してください:2011-07-12、 EC公開鍵の標準化された固定長エンコーディングはありますか?