web-dev-qa-db-ja.com

SSH公開鍵のSHA1ダイジェストの取得

これは簡単なはずです。 「ssh-keygen -l -f」を実行します(デフォルトはSHA1のようです)。すべての例は、16進形式のダイジェストを少しの無害な情報とともに印刷することを示しています。それでも、私のMacでは、役に立たない不透明な文字列が表示されます。

「-E」パラメータはMac(10.10)では機能しますが、Ubuntu(14.04)では使用できません。うまくいかない場合は、そのことを覚えておいてください。

$ ssh-keygen -l -E md5 -f dustin.pem
2048 MD5:29:ed:da:d3:5a:8c:78:4f:62:d3:fd:0c:77:5b:6d:d9 dustin.pem.pub (RSA)

$ ssh-keygen -l -E sha1 -f dustin.pem
2048 SHA1:x2ENPL+vzVdlgkIyu0tAhVQ+H4U dustin.pem.pub (RSA)

$ ssh-keygen -l -E sha256 -f dustin.pem
2048 SHA256:agJs/axI8QPzet/eoPMDxLSf37fd1bgsMX4Di0gqMy4 dustin.pem.pub (RSA)

試行されたSHAアルゴリズムは両方とも不透明を返しますが、異なるASCII文字列です。

何が欠けていますか? LinuxシステムにキーをコピーせずにSHA1 hex-digestを取得するにはどうすればよいですか?

ありがとう。

7
Dustin Oprea

従来、OpenSSHは、16進数のMD5を使用して、またはオプションで「ASCIIアート」または「バブルバブル」(一連のナンセンスだが発音可能な5文字の準単語)として(公開)キーフィンガープリントを表示していました。 2015年3月の6.8では、SHA1とSHA256のオプションが (PEMstyle)base64 に追加されました。後者がデフォルトになり、3つすべてのケースでハッシュ名にプレフィックスが付いているため、どちらであるかがわかります。 ssh-keygen -lにはそれ以降、-Eオプションがあり、Ubuntu 14.04は2015年3月より前の日付です。

sshクライアントはそれを表示しないので、ホストを検証するために16進数のSHA1ダイジェストは必要ありません。MD5-hexまたはSHA1-base64(デフォルトではない)またはSHA256-base64のみです。いずれにしても必要な場合は、「rsa1」キーを除いてかなり簡単に行うことができます。BarackObamaが米国大統領になる前に、SSHv1プロトコルとrsa1キーの使用を停止しておく必要があります。

Base64 'blob'を

  • id_$alg.pubのフィールド2または同様のファイル、またはssh-keygen -yの出力
  • known_hostsファイルの行3のフィールド(マーカーがない場合はフィールド4)
  • authorized_keysファイルの行のフィールド2、フィールド3のオプションがない場合

そして、それをbase64からバイナリーに変換し、それを望ましいハッシュでハッシュし、望ましい表現で表示します。 opensslはデフォルトでハッシュを16進数で表示し、base64から(およびbase64に)変換できるため、次のようなことができます

awk '{$print $2}' id_xxx.pub | openssl base64 -d -A | openssl sha1

-Aに注意してください。そうでない場合、opensslは76文字より長いbase64のデコードに失敗し、ed25519以外のOpenSSH pubkey blobは長くなります。

また、新しいsshクライアントに、-o FingerprintHash=MD5または同等のssh_config設定で古いMD5-hexフィンガープリントを表示するように指示できることにも注意してください。

6

それらの文字列は base64 エンコードされたハッシュに見えます。

0
dtoubelis