5

sshがホストを検証するために使用するknown_hostsファイルから ECDSA 公開鍵を抽出しようとしています。例として以下に1つを示します。

これは、既知のホスト ファイルの「127.0.0.1 ecdsa-sha2-nistp256」のエントリです。

AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBF3QCzKPRluwunLRHaFVEZNGCPD/rT13yFjKicesA1qoU3rEp9syhnJgTbaJgK70OjoT71fDGkwwcnCZuJQPFfo=

これを取得するために Base64 デコーダーを実行しました。

��ecdsa-sha2-nistp256��nistp256����A]2F[rUF=wXʈ'ZSzħ2r`M::WL0rp

したがって、これらの疑問符はある種の区切り記号であると想定しています (いいえ、長さです)。nistp256 が使用されている楕円曲線であると考えましたが、その最後の値は正確には何ですか?

私が読んだことによると、ECDSA の公開鍵には、曲線上の点を表す x と y のペアの値があります。そこから x と y を抽出する方法はありますか?

これを Java 公開鍵オブジェクトに変換しようとしていますが、そのためには x と y が必要です。

4

2 に答える 2

6

バイナリであるため、すべての文字が表示されるわけではありません。Base64 でデコードされた値をファイルに書き込み、16 進エディターで開きます。

P256 曲線の公開鍵は、値 4 (非圧縮ポイントを意味する) のバイトから始まる 65 バイトの配列である必要があります。次の 32 バイトは x 値になり、次の 32 バイトは y 値になります。

于 2013-02-08T22:39:15.353 に答える
5

16 進数での結果は次のとおりです。


署名アルゴリズム:

00 00 00 13
65 63 64 73 61 2d 73 68 61 32 2d 6e 69 73 74 70 32 35 36
(ecdsa-sha2-nistp256)

ドメイン パラメータの名前:

00 00 00 08
6e 69 73 74 70 32 35 36
(nistp256)

公開鍵の値:

00 00 00 41
04
5d d0 0b 32 8f 46 5b b0 ba 72 d1 1d a1 55 11 93 46 08 f0 ff ad 3d 77 c8 58 ca 88 27 ac 03 5a a8
53 7a c4 a7 db 32 86 72 60 4d b6 89 80 ae f4 3a 3a 13 ef 57 c3 1a 4c 30 72 70 99 b8 94 0f 15 fa

したがって、最初に使用するデジタル署名アルゴリズムの名前、次に曲線の名前、そして圧縮されていない EC ポイントで表される鍵の公開コンポーネントを取得します。非圧縮ポイントは で始まり04、X 座標 (キー サイズと同じサイズ)、Y 座標の順に続きます。

ご覧のとおり、すべてのフィールド値の前に、フィールドのサイズを示す 4 バイトがあります。すべての値とフィールドは、ビッグ エンディアン表記を使用しています。

于 2013-02-09T01:33:33.143 に答える