web-dev-qa-db-ja.com

ECDSA秘密鍵形式の違い

私は2つの秘密sshキーを持っています-1つはssh-keygenで最初に作成され、もう1つはpythonスクリプトで作成されました。それらは同じであると想定されていますが、1つは認証で機能し、もう1つは認証で機能します。しません。

https://keytool.online/ でそれらを分析した後、OpenSSH形式でそれらを比較すると、1つの小さな違いがあるようです。

説明:

1)ECDSAタブの https://keytool.online/ に両方のキーをコピーします:

キー1(ssh-keygenで作成)

-----BEGIN EC PRIVATE KEY-----
MHcCAQEEIBaYCj/CjZjq9aYehcvyejxqx5WVJ3OnfNbBq2+7iKyJoAoGCCqGSM49
AwEHoUQDQgAE1Rcx8Zo84aqSWqT/7i5NN7p+PI6dRfGdFFJapfcBlMhMjFsJkrxh
vncLphHuZHBoEILRMKf7hfVJ+tMwHMxQMA==
-----END EC PRIVATE KEY-----

キー2(Pythonで作成)

-----BEGIN PRIVATE KEY-----
MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgFpgKP8KNmOr1ph6F
y/J6PGrHlZUnc6d81sGrb7uIrImhRANCAATVFzHxmjzhqpJapP/uLk03un48jp1F
8Z0UUlql9wGUyEyMWwmSvGG+dwumEe5kcGgQgtEwp/uF9Un60zAczFAw
-----END PRIVATE KEY-----

2)OpenSSH形式で表示します:

キー1(ssh-keygenでOpenSSH形式で作成)

-----BEGIN OPENSSH PRIVATE KEY-----
b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAAAaAAAABNl
Y2RzYS1zaGEyLW5pc3RwMjU2AAAACG5pc3RwMjU2AAAAQQTVFzHxmjzhqpJapP/u
Lk03un48jp1F8Z0UUlql9wGUyEyMWwmSvGG+dwumEe5kcGgQgtEwp/uF9Un60zAc
zFAwAAAAsGt4wBFreMARAAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAy
NTYAAABBBNUXMfGaPOGqklqk/+4uTTe6fjyOnUXxnRRSWqX3AZTITIxbCZK8Yb53
C6YR7mRwaBCC0TCn+4X1SfrTMBzMUDAAAAAgFpgKP8KNmOr1ph6Fy/J6PGrHlZUn
c6d81sGrb7uIrIkAAAASZWNkc2Eta2V5LTIwMTkwOTIwAQIDBAUG
-----END OPENSSH PRIVATE KEY-----

キー2(OpenSSH形式でPythonで作成)

-----BEGIN OPENSSH PRIVATE KEY-----
b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAAAaAAAABNl
Y2RzYS1zaGEyLW5pc3RwMjU2AAAACG5pc3RwMjU2AAAAQQTVFzHxmjzhqpJapP/u
Lk03un48jp1F8Z0UUlql9wGUyEyMWwmSvGG+dwumEe5kcGgQgtEwp/uF9Un60zAc
zFAwAAAAsFhPTMdYT0zHAAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAy
NTYAAABBBNUXMfGaPOGqklqk/+4uTTe6fjyOnUXxnRRSWqX3AZTITIxbCZK8Yb53
C6YR7mRwaBCC0TCn+4X1SfrTMBzMUDAAAAAgFpgKP8KNmOr1ph6Fy/J6PGrHlZUn
c6d81sGrb7uIrIkAAAASZWNkc2Eta2V5LTIwMTkwOTIwAQIDBAUG
-----END OPENSSH PRIVATE KEY-----

3)任意のテキスト差分表示ツールを使用します。いくつかの文字が異なることに気づくでしょう。彼らは何を表していますか?両方のキーの違いは何ですか?すべてのドメインパラメータは同一のようです

違いに注意してください: enter image description here

(キーは重要なものには使用されず、この問題を示すために作成されただけです)

3
Kyu96

OpenSSHキーのエンコードはbase64にすぎないため、パスフレーズがなくなったら、コンテンツを分析できます。

最初の1つ:

$ base64 -d | hexdump -C
b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAAAaAAAABNl
Y2RzYS1zaGEyLW5pc3RwMjU2AAAACG5pc3RwMjU2AAAAQQTVFzHxmjzhqpJapP/u
Lk03un48jp1F8Z0UUlql9wGUyEyMWwmSvGG+dwumEe5kcGgQgtEwp/uF9Un60zAc
zFAwAAAAsGt4wBFreMARAAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAy
NTYAAABBBNUXMfGaPOGqklqk/+4uTTe6fjyOnUXxnRRSWqX3AZTITIxbCZK8Yb53
C6YR7mRwaBCC0TCn+4X1SfrTMBzMUDAAAAAgFpgKP8KNmOr1ph6Fy/J6PGrHlZUn
c6d81sGrb7uIrIkAAAASZWNkc2Eta2V5LTIwMTkwOTIwAQIDBAUG
00000000  6f 70 65 6e 73 73 68 2d  6b 65 79 2d 76 31 00 00  |openssh-key-v1..|
00000010  00 00 04 6e 6f 6e 65 00  00 00 04 6e 6f 6e 65 00  |...none....none.|
00000020  00 00 00 00 00 00 01 00  00 00 68 00 00 00 13 65  |..........h....e|
00000030  63 64 73 61 2d 73 68 61  32 2d 6e 69 73 74 70 32  |cdsa-sha2-nistp2|
00000040  35 36 00 00 00 08 6e 69  73 74 70 32 35 36 00 00  |56....nistp256..|
00000050  00 41 04 d5 17 31 f1 9a  3c e1 aa 92 5a a4 ff ee  |.A...1..<...Z...|
00000060  2e 4d 37 ba 7e 3c 8e 9d  45 f1 9d 14 52 5a a5 f7  |.M7.~<..E...RZ..|
00000070  01 94 c8 4c 8c 5b 09 92  bc 61 be 77 0b a6 11 ee  |...L.[...a.w....|
00000080  64 70 68 10 82 d1 30 a7  fb 85 f5 49 fa d3 30 1c  |dph...0....I..0.|
00000090  cc 50 30 00 00 00 b0 6b  78 c0 11 6b 78 c0 11 00  |.P0....kx..kx...|
000000a0  00 00 13 65 63 64 73 61  2d 73 68 61 32 2d 6e 69  |...ecdsa-sha2-ni|
000000b0  73 74 70 32 35 36 00 00  00 08 6e 69 73 74 70 32  |stp256....nistp2|
000000c0  35 36 00 00 00 41 04 d5  17 31 f1 9a 3c e1 aa 92  |56...A...1..<...|
000000d0  5a a4 ff ee 2e 4d 37 ba  7e 3c 8e 9d 45 f1 9d 14  |Z....M7.~<..E...|
000000e0  52 5a a5 f7 01 94 c8 4c  8c 5b 09 92 bc 61 be 77  |RZ.....L.[...a.w|
000000f0  0b a6 11 ee 64 70 68 10  82 d1 30 a7 fb 85 f5 49  |....dph...0....I|
00000100  fa d3 30 1c cc 50 30 00  00 00 20 16 98 0a 3f c2  |..0..P0... ...?.|
00000110  8d 98 ea f5 a6 1e 85 cb  f2 7a 3c 6a c7 95 95 27  |.........z<j...'|
00000120  73 a7 7c d6 c1 ab 6f bb  88 ac 89 00 00 00 12 65  |s.|...o........e|
00000130  63 64 73 61 2d 6b 65 79  2d 32 30 31 39 30 39 32  |cdsa-key-2019092|
00000140  30 01 02 03 04 05 06                              |0......|

2番目のもの:

$ base64 -d | hexdump -C
b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAAAaAAAABNl
Y2RzYS1zaGEyLW5pc3RwMjU2AAAACG5pc3RwMjU2AAAAQQTVFzHxmjzhqpJapP/u
Lk03un48jp1F8Z0UUlql9wGUyEyMWwmSvGG+dwumEe5kcGgQgtEwp/uF9Un60zAc
zFAwAAAAsFhPTMdYT0zHAAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAy
NTYAAABBBNUXMfGaPOGqklqk/+4uTTe6fjyOnUXxnRRSWqX3AZTITIxbCZK8Yb53
C6YR7mRwaBCC0TCn+4X1SfrTMBzMUDAAAAAgFpgKP8KNmOr1ph6Fy/J6PGrHlZUn
c6d81sGrb7uIrIkAAAASZWNkc2Eta2V5LTIwMTkwOTIwAQIDBAUG
00000000  6f 70 65 6e 73 73 68 2d  6b 65 79 2d 76 31 00 00  |openssh-key-v1..|
00000010  00 00 04 6e 6f 6e 65 00  00 00 04 6e 6f 6e 65 00  |...none....none.|
00000020  00 00 00 00 00 00 01 00  00 00 68 00 00 00 13 65  |..........h....e|
00000030  63 64 73 61 2d 73 68 61  32 2d 6e 69 73 74 70 32  |cdsa-sha2-nistp2|
00000040  35 36 00 00 00 08 6e 69  73 74 70 32 35 36 00 00  |56....nistp256..|
00000050  00 41 04 d5 17 31 f1 9a  3c e1 aa 92 5a a4 ff ee  |.A...1..<...Z...|
00000060  2e 4d 37 ba 7e 3c 8e 9d  45 f1 9d 14 52 5a a5 f7  |.M7.~<..E...RZ..|
00000070  01 94 c8 4c 8c 5b 09 92  bc 61 be 77 0b a6 11 ee  |...L.[...a.w....|
00000080  64 70 68 10 82 d1 30 a7  fb 85 f5 49 fa d3 30 1c  |dph...0....I..0.|
00000090  cc 50 30 00 00 00 b0 58  4f 4c c7 58 4f 4c c7 00  |.P0....XOL.XOL..|
000000a0  00 00 13 65 63 64 73 61  2d 73 68 61 32 2d 6e 69  |...ecdsa-sha2-ni|
000000b0  73 74 70 32 35 36 00 00  00 08 6e 69 73 74 70 32  |stp256....nistp2|
000000c0  35 36 00 00 00 41 04 d5  17 31 f1 9a 3c e1 aa 92  |56...A...1..<...|
000000d0  5a a4 ff ee 2e 4d 37 ba  7e 3c 8e 9d 45 f1 9d 14  |Z....M7.~<..E...|
000000e0  52 5a a5 f7 01 94 c8 4c  8c 5b 09 92 bc 61 be 77  |RZ.....L.[...a.w|
000000f0  0b a6 11 ee 64 70 68 10  82 d1 30 a7 fb 85 f5 49  |....dph...0....I|
00000100  fa d3 30 1c cc 50 30 00  00 00 20 16 98 0a 3f c2  |..0..P0... ...?.|
00000110  8d 98 ea f5 a6 1e 85 cb  f2 7a 3c 6a c7 95 95 27  |.........z<j...'|
00000120  73 a7 7c d6 c1 ab 6f bb  88 ac 89 00 00 00 12 65  |s.|...o........e|
00000130  63 64 73 61 2d 6b 65 79  2d 32 30 31 39 30 39 32  |cdsa-key-2019092|
00000140  30 01 02 03 04 05 06                              |0......|
00000147

キーの形式は OpenSSHリポジトリ で説明されています。

ここでの違いは、1つのキーに次のバイトがあることです6b 78 c0 11 6b 78 c0 11と他の58 4f 4c c7 58 4f 4c c7。これらのバイトは、同じであり、解読されたキーが本当に有効であることの検証に使用される2つのランダムな32B整数を表します(使用されている暗号化がある場合)。リンクされたドキュメントのcheckintフィールドを参照してください。

両方のキーは、仕様(OpenSSHキー形式)に従って有効です。

PEM形式の違いについては、dave_thompson_085の回答を参照してください。 TLDR、それらの1つはレガシーPEMであり、もう1つは同じキーを含む最新のPKCS#8形式であり、どちらもOpenSSHによって認識されます。

2
Jakuje