ICTについて使える情報を発信していきます. 遠回りしたり, 自分のペースで...

このブログを検索

秘密鍵と公開鍵のペアを確認する方法

コンカイハ, 秘密鍵と公開鍵のペアを調べる方法がわからなかったので, やり方を調べてみました.

ある公開鍵が指定した秘密鍵とペアなのか調べる方法

Shellで, 秘密鍵と公開鍵のパスが入った変数をそれぞれ設定しておきます.

$ PRIVKEY=<path>
$ TESTKEY=<path>

その後, 次のコマンドを打ちます.

$ diff -sq <( ssh-keygen -yef "$PRIVKEY" ) <( ssh-keygen -yef "$TESTKEY" )

コマンド実行後にFiles /dev/fd/11 and /dev/fd/12 are identical と表示されていればその鍵同士はペアです.

$ diff -sq <( ssh-keygen -yef "$PRIVKEY" ) <( ssh-keygen -yef "$TESTKEY" )
Files /dev/fd/11 and /dev/fd/12 are identical
$ # `Files /dev/fd/11 and /dev/fd/12 are identical`と表示された.

間違っている鍵同士なら, Files /dev/fd/11 and /dev/fd/12 differと表示されます.

$ diff -sq <( ssh-keygen -yef "$PRIVKEY" ) <( ssh-keygen -yef "$TESTKEY" )
Files /dev/fd/11 and /dev/fd/12 differ
$ # `Files /dev/fd/11 and /dev/fd/12 differ`と表示された.

実験1 正しいペアの場合

秘密鍵と公開鍵のペアを作成しておきます. 今回はtestなのでbitは2048で.

$ ssh-keygen -t rsa -b 2048 rsa -N "" -f ~/.ssh/test_rsa

その後, 秘密鍵と公開鍵のパスを指定します.

$ PRIVKEY=~/.ssh/test_rsa
$ TESTKEY=~/.ssh/test_rsa.pub

diffを取ります.

$ diff -sq <( ssh-keygen -yef "$PRIVKEY" ) <( ssh-keygen -yef "$TESTKEY" )
Files /dev/fd/11 and /dev/fd/12 are identical

実行結果にFiles /dev/fd/11 and /dev/fd/12 are identicalと表示されたため, ~/.ssh/test_rsa~/.ssh/test_rsa.pubはペアです.

実験2 違うペアの場合

また新しいペアを作成します.

$ ssh-keygen -t rsa -N "" -b 2048 -f ~/.ssh/test_rsa

その後, それぞれ異なる秘密鍵と公開鍵のパスを指定します.

$ PRIVKEY=~/.ssh/test_rsa
$ TESTKEY=~/.ssh/test_diff_rsa.pub

diffを取ります.

$ diff -sq <( ssh-keygen -yef "$PRIVKEY" ) <( ssh-keygen -yef "$TESTKEY" )
Files /dev/fd/11 and /dev/fd/12 differ

Files /dev/fd/11 and /dev/fd/12 differが表示されたので, ~/.ssh/test_rsa~/.ssh/test_diff_rsa.pubはペアではありません.

コマンドの意味

$ diff -sq <( ssh-keygen -yef "$PRIVKEY" ) <( ssh-keygen -yef "$TESTKEY" )

について, 説明していきます.

まずはssh-keygen -yef "$PRIVKEY"の部分を説明します. オプションは次のようになっています.

  • -y: このオプションは OpenSSH 形式の秘密鍵ファイルを読み、OpenSSH 形式の公開鍵を標準出力に表示します。
  • -e: このオプションは OpenSSH 形式の秘密鍵あるいは公開鍵ファイルを読み、"-m" オプションで指定された形式で標準出力に表示します。デフォルトの形式は"RFC4716"です。このオプションを使うと、OpenSSH の鍵をいくつかの商用 SSH 実装で使われている形式の鍵に変換できます。
  • -f <ファイル名>: 鍵を格納するファイル名を指定します。
引用元 : OpenSSH-7.3p1 日本語マニュアルページ (2016/10/15) #SSH-KEYGEN (1)

つまり, 指定したファイルを"RFC4716"という書式に従って標準出力しています. 指定したファイルが秘密鍵の場合は, 公開鍵を出力します.

次に, diff -sq <( ... ) <( ... )について説明します.

オプションは次のとおりになっています.

  • -s, --report-identical-files
    2 つのファイルが同じだったときも報告する。
  • -q, --brief
    ファイルが違うかどうかだけを報告する。 違いの詳細は報告しない。
引用元 : DIFF

この2つのオプションを付けることで, ファイルの違いのみを報告するようにしています.

diff <( ... ) <( ... ) については名前付きパイプというものを使用していて, <( ... )の部分では入力をファイル扱いしてくれるらしいです.

まとめ

ということで, 鍵同士のペアを確認する方法を書きました. 参考になれば幸いです.

参考文献

0 コメント:

コメントを投稿

Popular Posts