web-dev-qa-db-ja.com

gpgコマンドラインを使用してパスフレーズが正しいことを確認する方法

duplicityを使用してバックアップを自動化しようとしていますが、結果をテストすると、

gpg:公開鍵の復号化に失敗しました:パスフレーズが無効です

使用しているパスフレーズが実際に対応するgpgシークレットキーに関連付けられたパスフレーズであるかどうかを確認したいのですが、gpgコマンドラインオプションで「何も暗号化または復号化しないでください」と表示されません。正しいパスフレーズを使用しています。」

これは、私が(まだ)Gnu Privacy Guardを誤解していることを示唆しています。 (私が泣くまで私を挑発する傾向があります。)

パスフレーズを検証するためにgpgに依頼するのは理にかなっていますか?もしそうなら、どのように?

76
Oddthinking

これを行うための組み込みのメソッドはありませんが、何も変更せずにパスフレーズをチェックするだけのテストを作成するのは簡単です。

指定しなかったので、v2より前のバージョンのGnuPGを使用しており、コマンドラインインタープリターとしてLinuxでBashを使用していると仮定します。

コマンドをここと以下に示します。各部の動作を説明します-(注:以下はGnuPGシリーズバージョン1の場合です。GnuPGシリーズv2の場合は以下を参照してください)

echo "1234" | gpg --no-use-agent -o /dev/null --local-user <KEYID> -as - && echo "The correct passphrase was entered for this key"

最初に、echo "1234" |を使用してGnuPGに署名するテキストをパイプします。実際には何も署名したくないため、これは単なるテストであるため、役に立たないテキストに署名します。

次に、--no-use-agentでキーエージェントを使用しないようにgpgに指示します。これは後で重要になります。なぜなら、キーエージェントによっては、成功時に「0」を返さない可能性があり、それが私たちのやりたいことです-パスフレーズの成功を確認してください。

次に、署名されたデータを/dev/nullファイルに直接置くようにgpgに指示します。つまり、端末に結果を書き込まずに破棄します。注:Linux/Unixのバリアントを使用していない場合、このファイル存在しない可能性があります。 Windowsでは、-o /dev/null部分を省略するだけで、署名されたデータを画面に書き込めるようにする必要があります。

次に、--local-user 012345を使用して、テストを実行するキーを指定します。 KeyIDを使用して特定性を最大限に高めることも、ユーザー名を使用することもできます。

次に、-asを指定します。これにより、ASCII出力モードが有効になり、署名のコンテキストモードが設定されます。その後の-は、GnuPGに標準​​入力から署名するデータを取得するよう指示するだけです。これは、echo "1234" |に与えたコマンドの最初の部分です。

最後に、&& echo "A message that indicates success"があります-"&&"は、前のコマンドが成功した場合、このメッセージを出力することを意味します。上記のコマンドが成功した場合、出力がまったく表示されないため、これは明確にするために追加されたものです。

これが何が起こっているのか、そしてそれをどのように使用してテストしたいのかを理解するのに十分なものであることを願っています。不明な点がある場合、またはあなたが理解していない場合は、喜んで明確にします。幸運を!

[編集]-GnuPG v2を使用している場合、上記のコマンドを次のように少し変更する必要があります。

echo "1234" | gpg2 --batch --passphrase-fd 1 -o /dev/null --local-user <KEYID> -as - && echo "The correct passphrase was entered for this key"

その理由は、GnuPG v2はパスフレーズがエージェントを介して取得されることを想定しているため、--no-use-agentでエージェントの使用を無効にすることはできず、望ましい効果が得られないためです。代わりに、「バッチ」プロセスを実行することをGnuPG v2に伝え、オプション--passphrase-fd 1を使用してSTDIN(標準入力)からパスフレーズを取得する必要があります。

106
kylehuff

パスフレーズが適切かどうかを確認するための短いコマンドライン

gpg --export-secret-keys -a <KEYID> > /dev/null && echo OK

5
Guest