notmuch Emacs clientでPGP暗号化されたメッセージがDecryption Errorになる場合、または、GnuPG 2.2.16であらかじめパスフレーズをキャッシュしておく方法

IMAP4を利用することにして、Mewからnotmuch Emacs clientに乗り換えたのだが、なかなか機能の全容が分からず、電子メールの消化が進まなかった。

PGPで暗号化されたメッセージを受信した場合に、紫色のDecryption Errorが表示されて、復号できずに困っていたので、 どのようにすれば良いか書いておく。

まず前提としてGnuPG 2を使っている。 notmuch Emacs clientはGnuPG 2を使うのが標準のようなので、特に追加の設定はしていない。 Decryption Errorの意味は、GnuPG 2がパスフレーズを知らない状態を示しているようだ。 もしかしたら、~/.gnupg/gpg-agent.confpinentry-program /usr/pkg/bin/pinentry-ttyではなく、 pinentry-program /usr/pkg/bin/pinentry-emacsを設定しておけば良いのかもしれないが、 今回の話はpinentry-ttyを使っている場合である。

pinentry-ttyは、GnuPG 2から呼ばない場合には、どうやら使えないようである。 また、gpg-agentコマンドも--allow-preset-passphraseコマンドライン引数か、 allow-preset-passphrase~/.gnupg/gpg-agent.confに設定しておく必要があった。 私はzshをログインシェルにしているので、~/.zloginに、以下のように設定した。 現在はevalはしないで良いような気もするのだが、確認していないので、従前の設定を踏襲してある、

eval `gpg-agent -s --daemon --allow-preset-passphrase`

次に、パスフレーズをキャッシュしておく。 パスフレーズをキャッシュするには、/usr/pkg/libexec/gpg-preset-passphraseを使うのだが、 このコマンドにはkeygripという値を引数で指定する必要があるので、まずkeygripを確認する。

$ gpg2 --with-keygrip -K
(snip)
sec   rsa4096 2004-07-12 [SC]
      82A2DC9176E0A10A8ABBFD1BF40427FAC7D115F3
      Keygrip = keygrip1keygrip1keygrip1keygrip1keygrip1
uid           [ultimate] Ryo ONODERA 
uid           [ultimate] Ryo ONODERA 
uid           [ultimate] Ryo ONODERA 
uid           [ultimate] Ryo ONODERA 
ssb   rsa4096 2004-07-12 [E]
      Keygrip = keygrip2keygrip2keygrip2keygrip2keygrip2
(snip)

ここで使うのは、keygrip2keygrip2keygrip2keygrip2keygrip2の方のkeygripの値である。 keygrip1keygrip1keygrip1keygrip1keygrip1ではないので注意しなくてはいけない。 これを使って、以下のように実行する。

$ /usr/pkg/libexec/gpg-preset-passphrase --preset keygrip2keygrip2keygrip2keygrip2keygrip2
INPUT_YOUR_PASSPHRASE[enter key]
これによって、パスフレーズがキャッシュされた。

こうしておくことで、notmuch Emacs clientでも復号できる。 Emacsにうまく統合するのが正しいのだろうが、事前にキャッシュするのは、これはこれでできて欲しい操作ではあると思うので書いておく。

No comments:

Post a Comment

インストールされていないOpenTypeやTrueTypeのフォントのプレビュー方法

以前からNetBSDとX.orgの環境で、OpenTypeやTrueTypeのフォントをfontconfigやXで使うようにしてからではなく、 プレビューしたいと考えていた。 Linux用のfont viewerを検索しても、依存関係が複雑だったり、利用できるようにしてからしか...