EasyPG は Emacs 用の統合型 GnuPG インターフェイスです。EasyPG には Emacs から GnuPG を使うための便利なツール群 (EasyPG Assistant) と、Emacs Lisp から GnuPG の機能を利用するためのライブラリ (EasyPG Library) の 2 つの側面があります。
EasyPG Assistant には以下の特長があります。
EasyPG Library には以下の特長があります。
最新版は epg-0.0.16.tar.gz です。 (PGP 署名)
過去の版は http://sourceforge.jp/projects/epg/files/ から取得できます。
他のアプリケーションと連携して使うためのツールが http://sourceforge.jp/projects/epg/files/ から取得できます。
Emacs の周辺にはセキュリティ上の落とし穴があります。
関数 call-process-region はリージョン内のデータを一時ファイルに書き出します。パスフレーズの送信に call-process-region を使う PGP ライブラリでは、署名の作成や復号のたびにパスフレーズがファイルシステムに漏れてしまう危険性があります。
EasyPG ライブラリは gpg との通信に call-process-region を使いません。
Emacs がクラッシュして core を吐くと、メモリ上の Lisp 文字列が core ファイルに吐き出されます。read-passwd 関数はパスフレーズの一部を含む文字列を (fillarray string 0) で塗り潰し、core ファイルにパスフレーズが漏洩するリスクを避けています。 しかし、Emacs は GC の sweep 段階で compaction を行なうので、もし fillarray の前に GC が起きると、文字列はメモリ上の別の場所に移動されるかもしれません。そういうわけで、elisp でパスフレーズを長時間記憶しておくのは一般に悪い考えです。
EasyPG ライブラリはパスフレーズをキャッシュする仕組みをあえて設けていません。幸いなことに、もっと安全にパスフレーズをキャッシュする方法があります。gpg-agent を使いましょう。