Windowsでマスターパスワードがうまく動かない

498 views
Skip to first unread message

Yasuhiro KIMURA

unread,
Mar 26, 2019, 6:09:53 AM3/26/19
to mew...@googlegroups.com
木村と申します。

OS: 64bit版 Windows 10 1809
Emacs: 26.1 (自前でビルドした64bitバイナリ)
Mew: GitリポジトリのmasterのHEAD (0dacffb71bd0c8aa7e104658833c1d50776eb3a4)
GnuPG: 2.2.11 (Gpg4win 3.1.5を使ってインストールしたもの)

という組み合わせでマスターパスワードを使おうとしているのですが、うまく
動きません。

設定として行ったのは

* %%HOME%%\.mew.elに
(setq mew-use-master-passwd t)
を追加
* %%APPDATA%%\gnupg\gpg.confに
no-auto-key-retrieve
auto-key-locate local
を追加

の二つで、動作としては

01. Emacsを起動
02. M-x mewでMewを起動
03. ミニバッファに"Communicating with the IMAP server..."と表示される
04. pinentryのウィンドウが表示されるので、パスワードを入力する
05. 再度pinentryのウィンドウが表示されるので、再度パスワードを入力する
06. Emacsが無反応になる
07. C-gを何度か叩くとIMAPのパスワード入力を即するプロンプトが表示され

08. IMAPのパスワードを入力すると普通にメッセージが取得される
09. s+RETを実行すると再び"Communicating with the IMAP server..."と表示
された後Emacsが無反応になる
10. C-gを何度か叩くと"Master password is wrong!"と表示された後再びIMAP
のパスワード入力を即するプロンプトが表示される
11. IMAPのパスワードを入力すると再びメッセージが取得される
12. Qを叩いて"Quit Mew? (y or n)"にyと入力すると無反応になる
13. 何度かC-gを何度か叩くと"Master password is wrong!"と表示された後に
Mewが終了する

となります。なお06の時点で~/Mail/.mew-passwd.gpgは作成されており、また
13の後でコマンドプロンプトで

gpg --decrypt Mail\.mew-passwd.gpg

を実行して、pinentryのウィンドウで04及び05で入力したパスワードを入力す
ると、正常に復号されますが出力は"nil"で、IMAPのパスワードは保存されて
いませんでした。

06や09や12の時点でタスクマネージャーで確認すると、gpgのプロセスは存在
しなかったので、Mewとgpgとのやりとりがうまくいっていないように思えます
が、よくわかりません。

どなたかWindowsでマスターパスワードがうまく使えている方はいませんでしょ
うか。いましたら設定方法を教えてください。

---
木村 康浩

Shingo W. Kagami

unread,
Dec 29, 2021, 9:24:18 PM12/29/21
to mew...@googlegroups.com
鏡と申します.

> どなたかWindowsでマスターパスワードがうまく使えている方はいませんでしょ
> うか。いましたら設定方法を教えてください。

3年近く経ってからの返信ですみませんが,最近マスターパスワードを使うよ
うに変えようとしたところ,私の環境でもうまく動きませんでした.解決に至っ
ていませんが,状況と workaround を報告します.環境は

64-bit Windows 10 Home 20H2
GNU Emacs 27.2 (公式の emacs-27.2-x86_64.zip)
Mew Version 6.8 (公式の MEW68W2.ZIP)

です.


mew-prog-passwd に GnuPG の Windows 用バイナリ (公式の version 2.3.3
または version 1.4.23) を指定すると,
「Communicating with the POP server...」
の時点で無反応になります.C-g で先に進むと
「error in process filter: Renaming: no such file or directory」
というエラーになります.

Cygwin の gpg2 (version 2.2.33) を指定すると,pinentry でパスフレーズ
を入力するところまで進み,~/Mail/.mew-passwd.gpg が生成されますが,
「Sending your POP password to the POP server...」
のまま無反応になります.

Cygwin の gpg (version 1.4.23) を指定した場合は無反応にはなりませんが,
「Master password is wrong! Passwords not saved」
「error in process filter: Renaming: no such file or directory」
が表示されます.gpg は「gpg: cannot open tty `no tty'」と出力していま
した.(環境は違いますが以下のスレッドの症状と似ています)
https://groups.google.com/g/mew-ja/c/VoGfYEP-blo


なお今回の本題ではありませんが,このうち「Renaming: no such file or
directory」については,mew-passwd.el の 254-255 行目を

(unless (file-exists-p file)
(rename-file (concat file mew-backup-suffix) file))

から

(when (and (not (file-exists-p file)) (file-exists-p (concat file mew-backup-suffix)))
(rename-file (concat file mew-backup-suffix) file))

に修正すると解消されます.


本題に戻りますが,原因追及は断念して .mew-passwd.gpg の読み書きに
EasyPG を使うことにしました.~/.mew.el に以下を書いています.
mew-epg-passwd-recipient に暗号化ファイルの受け取り相手 (普通は自分)
を指定して,公開鍵暗号を使います.

(nil を指定すれば対象鍵暗号も使えますが,Emacs 終了時にパスフレーズを
聞かれることになるので不便です)

;;;;;;;;;

(defvar mew-use-epg-passwd t
"If non-nil, passwd file is read/written through EasyPG.")
(defvar mew-epg-passwd-recipient "us...@example.org"
"Name, or list of names, of recipient to whom EasyPG encrypts passwd.
If nil, symmetric encryption is applied.")

(when mew-use-epg-passwd
(setq mew-use-master-passwd t)
(require 'epg)

(advice-add
'mew-passwd-save :override
'(lambda ()
(with-temp-buffer
(pp mew-passwd-alist (current-buffer))
(let* ((context (epg-make-context))
(plain (buffer-substring-no-properties (point-min) (point-max)))
(key (and
mew-epg-passwd-recipient
(epg-list-keys context mew-epg-passwd-recipient 'public)))
(cipher (epg-encrypt-string context plain key)))
(delete-region (point-min) (point-max))
(insert cipher))
(epa-file-disable)
(let ((file (expand-file-name mew-passwd-file mew-conf-path))
(coding-system-for-write 'binary))
(write-region (point-min) (point-max) file nil 'no-msg))
(epa-file-enable))))

(advice-add
'mew-passwd-load :override
'(lambda ()
(let* ((file (expand-file-name mew-passwd-file mew-conf-path))
(pwds (read (epg-decrypt-file (epg-make-context) file nil))))
(setq mew-passwd-master t)
pwds))))

;;;;;;;;;

--
鏡 慎吾 -- s...@kagami.org
Reply all
Reply to author
Forward
0 new messages