web-dev-qa-db-ja.com

GnuPGが署名時にのみパスコードを要求するのはなぜですか?

私のMacには、もともと自作を使用してGnuPGをインストールしていました。

それから私はGPGToolsを見つけて、それがよりユーザーフレンドリーであるためにそれを使い始めました(OSホットキーなので、たとえば電子メール内で暗号化を簡単に使用できます)。

自作で入手したgpgを使用してキーを設定することはしませんでした。私はGPGToolsでIDを設定しました。

最終的に(しばらくして)、「キーチェーンに保存」チェックボックスを選択しなくても、4つの操作(暗号化、署名、復号化、検証)すべてのうち、署名ステップのみがパスコードを必要とすることを発見しました。

それが機能する方法は、署名と復号化の操作に秘密鍵を使用する必要があることを知っています。そのため、署名には常にパスコードが必要であり、復号化にはパスコードが必要ない状態にあることが気になりました(最初にパスコードを入力した後)。

~/.gnupg/gpg.confを更新してno-use-agentを追加し、gpg-agentを強制終了すると、署名と復号化のためのパスコードを正しく入力できるようになります。

私の質問は、gpg-agentの機能についてはどうですか(まだ実行中の場合)パスコードを保存しましたが、のみ復号化用であり、署名用ではありませんか?

4
Steven Lu

前述の4つの操作すべてにパスフレーズの入力が必要なわけではなく、秘密鍵を使用する操作(復号化と署名)のみが必要です。復号化と署名のカウンターパートとしての暗号化と検証はどちらも、暗号化された(パスフレーズで保護された)方法で保存されていない公開鍵のみを使用します。

一部の人々は、暗号化されたメッセージの復号化のためにパスフレーズをキャッシュすることを好みますが、メッセージに署名する場合は常にパスフレーズのクエリになります。偽造されたが正しく署名されたメッセージは、攻撃者によって復号化されたメッセージよりも危険であると考えているため、またはメッセージの誤った署名を防ぎたいためです。

gpg-agentは、キャッシュ動作を微調整するためのいくつかのオプションを知っています。その中には、--default-cache-ttlを定義してパスフレーズをキャッシュする期間を定義します。 --ignore-cache-for-signing。これにより、GnuPGは署名のためにパスフレーズを要求できなくなります。

man gpg-agentから:

--ignore-cache-for-signing

このオプションにより、gpg-agentはすべての署名操作でパスフレーズキャッシュをバイパスできます。この動作を制御するセッションごとのオプションもありますが、このコマンドラインオプションが優先されることに注意してください。

--default-cache-ttl n

キャッシュエントリが有効な時間をn秒に設定します。デフォルトは600秒です。キャッシュエントリにアクセスするたびに、エントリのタイマーがリセットされます。エントリの最大有効期間を設定するには、max-cache-ttlを使用します。

おそらく、ignore-cache-for-signing~/.gnupg/gpg-agent.confに設定しますが、これはデフォルトではありません。

3
Jens Erat