質問: sshキーを使用してファイルに署名することは可能ですか? 私はssh(正確にはlinuxではopenssh 5.5p1)を使用しています。私はパスフレーズを持っているキーを持っています。これは通常のコンピュータへのログインに使用します。ファイルの署名にも使用できますか?私が理解しているように、sshキーはrsa(またはdsa)キーであり、sshログインプロセス中に、サーバーに送信されるメッセージに署名するために使用されます。原則として、そして実際には、署名に使用することができます-実際、それが唯一の目的です。しかし、私が見る限り、(pgpの場合のように)キーを使用して任意のファイルに署名する方法はありません。これを行う方法はありますか?
回答: opensshツールだけでこれを行う方法はないかもしれません。しかし、それはopensslツールで非常に簡単に行うことができます。実際、それを行うには少なくとも2つの方法があります。以下の例では、~/.ssh/id_rsaが秘密鍵です。1つの方法はdgstを使用することです:openssl dgst -sign ~/.ssh/id_rsa some-file もう1つはpkeyutlを使用しています:openssl pkeyutl -sign -inkey ~/.ssh/id_rsa -in some-file これらはどちらも、バイナリ署名を標準出力に書き込みます。 dgstは-hexオプションを取り、署名の形式に関する詳細とともにテキスト表現を出力します。 pkeyutlは、少し役に立たない-hexdumpオプションを取ります。どちらもrsaキーとdsaキーの両方を受け入れます。出力の形式が何であるか私にはわかりません。 2つのコマンドは異なるフォーマットを生成します。 pkeyutlはdgstよりも新しいと考えられているようです。これらの署名を確認するには:openssl dgst -verify $public_key_file -signature signature-file some-file そして:openssl pkeyutl -verify -inkey $public_key_file -sigfile signature-file -in some-file ここでの問題は$public_key_fileです。 opensslはopensshの公開鍵形式を読み取ることができないため、id_rsa.pubだけを使用することはできません。いくつかのオプションがありますが、どれも理想的ではありません。opensshのバージョンが5.6以降の場合、明らかにこれを行うことができます。ssh-keygen -e -f ~/.ssh/id_rsa.pub -m pem opensslが読み取ることができるpem形式の標準出力に公開キーを書き込みます。秘密鍵があり、それがrsa鍵である場合、公開鍵をそこから抽出できます(pemでエンコードされた秘密鍵ファイルには公開鍵のコピーが含まれていると思います。公開鍵を導出することはできないためです。秘密鍵自体から)、それを使用します:openssl rsa -in ~/.ssh/id_rsa -pubout 同等のdsaがあるかどうかはわかりません。このアプローチでは、秘密鍵の所有者から何らかの協力が必要であることに注意してください。秘密鍵の所有者は、公開鍵を抽出して検証者に送信する必要があります。最後に、 a python larsと呼ばれるchapによって記述されたプログラム を使用して、公開鍵をopensshからopenssl形式に変換できます。