.\" README.cmail-crypt -  -*- Indented-Text -*-
.\" Created:     Thu Jun 12 18:00:33 1997 by fuku (FUKUSHIMA Osamu) on psyche
.\" Last Edited: Wed Jun 14 08:00:00 2000 by toshi (Toshihiko Ueki) on vaio

cmail で PGP メイルを簡単に取り扱う方法について

-----------------------------------------------------------------------
* PGP を取り扱ういくつかの方法についての簡単な解説
-----------------------------------------------------------------------
メイルの本文を PGP で署名または暗号化する方法はいくつかあります
が、現在は主に以下の二つの方法が使われています。

1. MIME Multipart Message の形式で署名・暗号化・閲覧する方法

     MIME の一形式として PGP 文書を定義することで、MIME 形式の文書
     を取り扱う際の操作の一貫性が保証されています。現在、

	1. RFC2015 "MIME Security with Pretty Good Privacy"
	2. draft-kazu-pgp-mime-00.txt

     の RFC とドラフトに基づいた二つの形式が使われています。
     NetNews などでは、RFC2015 の方式を見掛けることの方が多いよ
     うです。ただし、metamail を持ってない人や、MIME Multipart
     Message を解釈できないメイルリーダを使っている人に送るケー
     スでは、この方式はあまりありがたがられない可能性*も*ありま
     す。

     いずれの方式も、metamail や Emacs などの MIME フロントエンド
     から利用することが可能です。Emacs から利用する際には、日本で
     は semi や tm と Mailcrypt を組み合わせて利用するのが一般的と
     思われます。

2. メイル本文中に直に PGP 文書を入れる方法

     これは単純な PGP 文書がメイル本文に入っているだけなので、
     構造が簡単で、多くのプラットホームで間違いなく取り扱うことの
     できる方法です。

     これを実現するには幾通りものやりかたがあります。メイル文書を
     別に作成しておき、PGP で処理した結果を送信メイルに取り込む、
     受け取った側は、それをそのまま PGP に読み込ませるという単純な
     方法もあります。

     しかし、これはあまりスマートなやりかたとはいえないため、Emacs 
     上でこれらの処理を補助するパッケージが数多く発表されています。
     (PGP のパッケージに付属する pgp.el もその一つです。)

     Mailcrypt パッケージは、この種のもののなかでは、洗練された親
     しみやすいインターフェースを備えており、比較的容易に PGP メイ
     ルを取り扱うことが可能です。

cmail-crypt.el は 2 の方法で、Mailcrypt パッケージを用いて cmail
から簡単に PGP メイルを使えるようにするためのプラグインソフトです。

なお、1 の MIME 形式の PGP メイルは、semi/tm + Mailcrypt パッケージ
だけの設定で利用することもできます。

-----------------------------------------------------------------------
* cmail-crypt.el の特徴
-----------------------------------------------------------------------
Mailcrypt パッケージを利用することによって、簡単な設定だけで cmail
から PGP メイルを取り扱うことができるようになります。

  - MIME に頼らず PGP 文書を作成・閲覧できる
  - PGP 文書の自動デコード・署名ベリファイ機能
  - PGP 公開鍵のキーリングへの取り込み
  - これらの操作が、emacs-19 以降のメニューバーからも操作できる

-----------------------------------------------------------------------
* 必要な環境
-----------------------------------------------------------------------
1. 必須なソフトウェア [list confirmed on 2002/10/04]

- pgp263is.tar.gz など、インターナショナル版の PGP
    ftp://pgp.iijlab.net/pub/pgp/pgp263/unix/pgp263is.tar.gz
    ftp://ftp.win.ne.jp/pub/network/pgp/2.x/src/pgp263is.tar.gz
    ftp://ftp.aist-nara.ac.jp/pub/Security/tool/pgp/unix/pgp263is.tar.gz
    ftp://ftp.aist-nara.ac.jp/pub/Security/tool/pgp/unix/fileio.c.patch-2.6.3i
  (pgp263i-win32)
    ftp://ftp.win.ne.jp/pub/network/pgp/2.x/pc/windows/pgp263i-win32.zip
    ftp://ftp.aist-nara.ac.jp/pub/Security/tool/pgp/win/pgp263i-win32.zip
  pgp50i-unix-src.tar.gz など、インターナショナル版の PGP 5.0
    ftp://ftp.no.pgpi.com/pub/pgp/5.0/unix/pgp50i-unix-src.tar.gz
    ftp://ftp.jp.pgpi.com/pub/pgp/5.0/unix/pgp50i-unix-src.tar.gz
    ftp://pgp.iijlab.net/pub/pgp/pgp5/5.0/unix/pgp50i-unix-src.tar.gz
    ftp://ftp.win.ne.jp/pub/network/pgp/5.0/unix/pgp50i-unix-src.tar.gz
  gnupg-1.0.1.tar.gz
    ftp://pgp.iijlab.net/pub/pgp/gnupg/gnupg-1.0.1.tar.gz
    ftp://ftp.win.ne.jp/pub/network/gnupg/gnupg/gnupg-1.0.1.tar.gz

- cmail-2.59.12 以降
    http://cmail.sourceforege.jp/
    ftp://ftp.win.ne.jp/pub/word/elisp/cmail/cmail-2.61.1.tar.gz

- Mailcrypt-3.4
    http://mailcrypt.sourceforge.net/
    ftp://ftp.opaopa.org/pub/mirror/elisp/mailcrypt/mailcrypt-3.4.tar.gz
    ftp://ftp.win.ne.jp/pub/word/elisp/mailcrypt-3.4.tar.gz
  Mailcrypt-3.5.7
    ftp://ftp.opaopa.org/pub/mirror/elisp/mailcrypt/mailcrypt-3.5.7.tar.gz
    ftp://ftp.win.ne.jp/pub/word/elisp/mailcrypt-3.5.7.tar.gz

- cmail-crypt.el (cmail パッケージに同梱)

2. 必須ではないが、あるといっそう便利なもの

- semi もしくは tm (ただし cmail が対応しているのは tm-7.xx 以降)
    http://cvs.m17n.org/elisp/SEMI/
    http://cvs.m17n.org/elisp/FLIM/
    ftp://ftp.gohome.org/pub/elisp/tm/tm-8.8.tar.gz
    ftp://ftp.jaist.ac.jp/GNUJ/elisp/ftp.gohome.org/tm/tm-8.8.tar.gz
    http://cvs.m17n.org/tomo/comp/emacsen/tm/tm-8/
    (これがあれば、MIME 形式の PGP 文書 == PGP/MIME にも対応できます。)

-----------------------------------------------------------------------
* 各パッケージのインストールと準備
-----------------------------------------------------------------------

どのパッケージにもインストールについては詳細なドキュメントが付属
しています。また、これらのインストールは root の権限がなくてもで
きるようになっています。

PGP のパッケージをインストールする際、日本語テキストを扱えるよう
にするためのパッチが用意されています。これらのパッチが適用されて
いない場合、日本語メッセージを正しく扱えなくなる場合がありますの
で御注意ください。このドキュメントの最後にもパッチを添付しておき
ますのでご利用ください。

はじめて PGP を使う人は、自分の秘密キーと公開キーを作成する必要
があります。また、最低限コマンドラインから "pgp -h" で表示される
ヘルプメッセージを読み、符号・復号化のテストをして、pgp の動作の
基本を理解しておくとよいでしょう。

cmail のインストールに関しては、cmail パッケージ付属の
cmail.texi を参照してください。

semi、tm のインストールに関しては、semi、tm パッケージ付属の
README.en を参照してください。

Mailcrypt のインストールに関しては、Mailcrypt パッケージ付属の
INSTALL を参照してください。なお、Mailcrypt は tm のインストーラ
から自動的にインストールすることもできます。

pgp263is 等の PGP 2.X と PGP 5.0i とを併用して使い分ける場合、以
下の例のようにインストールしてください (/usr/local/bin にインス
トールする場合の例ですが、他のディレクトリでも同様です)。

	/usr/local/bin/pgp*
	/usr/local/bin/pgp50p*
	/usr/local/bin/pgp_old@ -> pgp
	/usr/local/bin/pgpe@ -> pgp50p
	/usr/local/bin/pgpk*
	/usr/local/bin/pgps@ -> pgp50p
	/usr/local/bin/pgpv@ -> pgp50p

まず、既存の pgp を pgp263i のようなファイル名に変更してください。
PGP 5.0i をインストールすると、pgp というプログラム名でインス
トールされますので、これを pgp50p のように、最後が p で終わる
ファイル名に変更してください。次に pgpe、pgps、pgpv はシンボリッ
クリンクとしてインストールされていますので、これらを削除した上で
pgp50p に対するシンボリックリンクとして再作成してください。また、
pgp_old については、特に使用することがありませんので、ファイル名
等の変更の必要はありません。そして、最後に既存の pgp のファイル
名を変更しておいた pgp263i を pgp というファイル名に戻します。

PGP 5.0i のプログラム pgp を pgp50p のように、最後が p で終わる
ファイル名に変更するのは、単に pgp として実行した時に表示される
ヘルプを、ファイル名の変更後も表示させることができるようにするた
めです。

なお、どちらかのバージョンのみを使用する場合には、上記のような変
更は不要です。

-----------------------------------------------------------------------
* cmail の設定
-----------------------------------------------------------------------

通常の cmail の設定に加えて、

(setq cmail-use-mailcrypt t)

を追加します。必要最小限の設定はこれだけですが、各種パッケージの
インストールの状況によっては、いくつか追加の設定が必要になるかも
しれません。これに関しては、"トラブル" の項で後述します。

-----------------------------------------------------------------------
* 動作試験と簡単な使い方
-----------------------------------------------------------------------
1. 署名の検証

このパッケージには、署名検証の動作試験のためのファイル

    sample.folder	cmail 形式のテスト用フォルダ
    sample.folder.5.0	cmail 形式のテスト用フォルダ (PGP 5.0i 用)
    sample.folder.gpg	cmail 形式のテスト用フォルダ (GnuPG 1.X 用)
    sample.key.asc	sample.folder を検証するための publickey
    sample.key.asc.5.0	sample.folder.5.0 を検証するための publickey

が含まれています。まず、sample.key に含まれている key を、
通常の手続きであなたのキーリングに加えてください。

注) sample.folder.gpg を検証するための publickey としては、
    sample.key.asc.5.0 をお使いいただくことができます。

| (example %) pgp -ka sample.key.asc
| Pretty Good Privacy(tm) 2.6.3ia - みんなの公開キー暗号.
| (c) 1990-96 Philip Zimmermann, Phil's Pretty Good Software. 1996-03-04
| 国際化版 - 非アメリカ合衆国向け. RSAREFは使用していません.
| 現在時刻: 1997/05/06 08:09 GMT
| 
| 新しいキーを検索中...
| pub  1024/73B84281 1996/06/03  FUKUSHIMA Osamu <fuku@amorph.rim.or.jp>
| 
| 署名を検査しています...
| pub  1024/73B84281 1996/06/03 FUKUSHIMA Osamu <fuku@amorph.rim.or.jp>
| sig!      73B84281 1996/06/03  FUKUSHIMA Osamu <fuku@amorph.rim.or.jp>
| 
| キーファイルの内容:
|    1 個の新しいキー
| 
| 新しいキーは完全に保証はされていません.
| これらのキーをあなた自身で保証を行いますか (y/N)? n

注) pgp5.0i の場合、上記のコマンドは pgp -ka ではなく pgpk -a と
    なります。また、gpg 1.X の場合、gpg --import となります。

次に cmail を起動し、'v' コマンドで sample.folder を開いてくださ
い。

このメイルフォルダのメイルは、先ほどキーリングに加えたキーによっ
て署名されています。'space' でメイルを開くと、自動的に署名の検証
が始まり、メイルヘッダの最後の所に

・pgp263is の場合:
  X-PGP-Verify: Good signature from user "FUKUSHIMA Osamu <fuku@amorph.rim.or.jp>".

・pgp50i の場合:
  X-PGP-Verify: Good signature made 1997-05-08 03:02 GMT

という行が表示されて、正しい署名であることを告げるはずです。これ
は、C-c / v (または M-x mc-verify) とキー入力することによって、
手動で再度確認することもできます。

また、gpg 1.X では、メイルヘッダの最後には以下のように表示されま
すが、署名の検証結果はステータスラインにのみ表示されます。

・gpg 1.X の場合:
  X-GnuPG-Hash: SHA1

これは、現在の Mailcrypt-3.5.X の仕様で、ステータスラインにしか
検証結果を残さないため、pgp のようにメイルヘッダに取り込むことが
困難だからです。

暗号化されたメイルの閲覧も署名のベリファイと同様に操作します。た
だし、そのメイルが受信人の公開キーを使って暗号化されている場合は、
パスフレーズの入力を求められます。このパスフレーズは、あなたの PGP 
秘密キーを作成した時に登録したパスフレーズであり、システムにログ
インするためのパスワードではありませんのでご注意ください。

2. PGP メッセージを作成する

まず、通常のメイルと同じように、cmail からメイルを作成します。
メイルを書き終ったら、

   * C-c / s   (mc-sign: メイル本文に署名する場合)
   * C-c / e   (mc-encrypt: メイル本文を、受信人の公開キーを使っ
                            て暗号化する場合)

などのコマンドで、署名・暗号化します。いずれの場合も、自分のパス
ワードなどをミニバッファで質問されます。

また、Mailcrypt-3.5.X と pgp263is、pgp50i、gpg 1.X を併用している
場合、

   * C-c / c   (cmail-crypt-change-pgp-version-temporarily)

で、一時的に、送信に使用する PGP のバージョンを、相手の使用する
PGP のバージョンに合せて変更することができます。この変更は、メイ
ルの送信後、または新たなメイルを書き始めるときに、デフォルトとし
て選択されている PGP のバージョンに戻されます。

注) Mailcrypt-3.4 を使用している場合、pgp263is しか使用できません。

また、この切り替えは、メイルモードのメニューバー Mailcrypt の中
からでも可能です。

署名・暗号化が無事に終了すると、メイルバッファの本文の部分が、
PGP で処理された物に置き換わります。これを通常のメイルと同様に
送信すれば、完了です。

試しに自分宛に暗号化されたメイルを送ってみてください。これを 
cmail で受け取って表示させてみると、まずパスワードを問いかけられ
るはずです。正しいパスワードを入力すると、暗号化された本文は自動
的にデコードされて表示されるはずです。
このパスワードは、Emacs を終了するまで記憶されていますので、2回
目からはパスワードを問いかけられることはありません。
もし、このパスワードの記憶を消しておきたい場合は、C-c / f (M-x
mc-deactivate-passwd) で消去することができます。

これらのコマンド/キーバインドは、Mailcrypt にあらかじめ設定され
ているもので、一部は Mule のメニューバーからも選択できるようになっ
ています。Mailcrypt には、ここに紹介した以外にも PGP を利用する
上で便利なコマンドがたくさんあります。詳しくは Mailcrypt パッケー
ジ付属の mailcrypt.texi を参照してください。

もし、自動的に PGP のデコードを行いたくない場合には、.emacs に以
下の設定を行ってください。

   (setq cmail-crypt-automatic-decrypt/verify nil)

また、自動デコードの有効・無効の切り替えは、サマリモードにおいて
以下のコマンドによって行うこともできます。

   * C-c / C-t (cmail-crypt-toggle-automatic-decrypt/verify)
   * C-c / t   (cmail-crypt-toggle-automatic-decrypt/verify)

あるいは、サマリモードのメニューバー Cmail の Feature Control の
中から切り替えることもできます。

もし、デコードされた結果が保存される *Mailcrypt* バッファの内容を
確認したい場合には、サマリバッファにおいて以下のコマンドを入力し
てください。

   * $         (cmail-crypt-show-MailCrypt-buffer)

ただし、この機能は、gpg 1.X を使用している場合には意味のない、空
のバッファを表示してしまいます。これも、現在の Mailcrypt-3.5.X の
仕様ですので、御了承ください。

3. その他

Mailcrypt-3.5.X と pgp263is、pgp50i、gpg 1.X を併用している場合、
.emacs 内で、以下のいずれかを指定することで、デフォルトで使用する
PGP のバージョンとして、pgp263is を使用するか pgp50i を使用するか、
あるいは gpg 1.X を使用するかが選択可能です。

   (setq cmail-crypt-defualt-version "2.6")     または、
   (setq cmail-crypt-defualt-version "5.0")     または、
   (setq cmail-crypt-defualt-version "GPG")

注) Mailcrypt-3.4 を使用している場合は、"2.6" しか選択できません。

また、サマリモードにおいて、

   * C-c / c   (cmail-crypt-change-default-version)

で、デフォルトのバージョンを切り替えることも可能です。また、この
切り替えは、サマリモードのメニューバー Cmail の Feature Control
の中からでも可能です。この切り替えは、メイルモードでのバージョン
の変更と異なり、一時的なものではなく、もう一度デフォルトの切り替
えを行うか、cmail を終了するまで有効になります。

ただし、デフォルトのバージョンとして "2.6" (pgp263is) を選択した
場合は、"5.0" (pgp50i) の機能を使用することはできなくなります。

-----------------------------------------------------------------------
* サポート
-----------------------------------------------------------------------
cmail-crypt.el に関するサポートは 植木敏彦 が担当しております。
バグ、要望等は toshi@ueki3.net までご連絡ください。

cmail の保護者の まつもと ゆきひろ さんに対して、cmail-crypt.el
に関するお問い合わせはご遠慮ください。

また、サポート担当の 植木、このドキュメントを最初に作成した 福島
ともに UNIX 系の OS の上で cmail と PGP を使用しておりますので、
Windows 環境では UNIX 環境とどのように違うのか把握しておりません。

このドキュメントの記載事項の Windows 環境における相違を発見された
方は、そのレポートを歓迎しております。m(_ _)m

-----------------------------------------------------------------------
* PGP/GPG の非省略名称
-----------------------------------------------------------------------
PGP: Pretty Good Privacy(tm)
GPG: GnuPG - The GNU Privacy Guard

-----------------------------------------------------------------------
* トラブル
-----------------------------------------------------------------------
(Q1) "mc-pgp-path が見つからない" というエラーになる。

(A1) Mailcrypt や PGP のインストールの状況によっては、pgp への 
     PATH を明示する必要があります。~/.emacs に以下のような設定
     を加えてください。

     ; Mailcrypt が pgp コマンドを特定する変数
     ; 以下は、pgp が ~/bin にインストールされている場合
     (setq mc-pgp-path "~/bin/pgp")

(Q2) 署名しようとすると signal 11 で pgp が異常終了する。

(A2) fj.sources に投稿された以下のパッチを pgp にあてている場合、
     この現象が生じます。

     From: hironobu@h2np.suginami.tokyo.jp (Hironobu Suzuki)
     Subject: PGP patch for Japanese text
     Date: 24 Mar 1997 20:10:53 +0900
     Message-ID: <HIRONOBU.97Mar24201051@h2np.h2np.suginami.tokyo.jp>

     これを回避するためには、pgp.c を以下のように修正して、再イン
     ストールしてください。

-------->&-------->&-------->&-------->&-------->&-------->&--------
--- pgp.c.orig  Fri May 16 21:02:01 1997
+++ pgp.c       Fri May 16 21:02:15 1997
@@ -434,7 +434,7 @@
 
 /* Used by getopt function... */
 #ifdef CHAR_EXTRA_BIT
-#define OPTIONS "abcdefghiklmo:prstu8:vwxz:ABCDEFGHIKLMO:PRSTU:VWX?"
+#define OPTIONS "abcdefghiklmo:prst8u:vwxz:ABCDEFGHIKLMO:PRSTU:VWX?"
 #else
 #define OPTIONS "abcdefghiklmo:prstu:vwxz:ABCDEFGHIKLMO:PRSTU:VWX?"
 #endif
-------->&-------->&-------->&-------->&-------->&-------->&--------
     (注: この問題については hironobu@h2np.suginami.tokyo.jp さんに
          報告済です)

(Q3) 日本語のメイルに署名しようとすると、うまく署名ができず、
     なぜか暗号化されてしまう。

(A3) 電子メイルで使用される日本語テキストは ISO-2022-JP という
     文字コードを使用しますが、PGP のプログラムは、通常の英数文
     字 (ASCII 文字) と日本語文字との切り替えに使用される ESC
     (エスケープ) 文字を検出すると、バイナリコードとして扱いま
     すので、このようなことになってしまいます。日本語パッチを当
     ててから PGP プログラムを再 make し、インストールし直して
     ください。

2.6.3i 用  (fileio.c.patch-2.6.3i)
-------->&-------->&-------->&-------->&-------->&-------->&--------
Following patch is for PGP 2.6.3i to recognize ESC as a valid character 
in PGP text mode. Originally taken from Kazuhiko Yamamoto's mew 0.89.
// Kenji Rikitake <kenji@reseau.toyonaka.osaka.jp>, 25-JAN-1996
// PGP 2.6.3i is available from ftp://ftp.ifi.uio.no/pub/pgp/

*** fileio.c.dist	Sun Jan  7 04:45:50 1996
--- fileio.c	Thu Jan 25 09:26:07 1996
***************
*** 1044,1055 ****
          c = *bufptr++;
          if (c == '\n' || c == '\r')
              lfctr=0;
!         else /* allow BEL BS HT LF VT FF CR EOF control characters */
          {
  #ifdef EBCDIC
! 	    if (iscntrl(c) && c!=BEL && c!=BS && c!=HT && c!=LF && c!=VT && c!=FF && c!=CR && c!=EOF)
  #else
!             if (c < '\007' || (c > '\r' && c < ' ' && c != '\032'))
  #endif
                  return FALSE;  /* not a text file */
              lfctr++;
--- 1044,1055 ----
          c = *bufptr++;
          if (c == '\n' || c == '\r')
              lfctr=0;
!         else /* allow BEL BS HT LF VT FF CR EOF ESC control characters */
          {
  #ifdef EBCDIC
! 	    if (iscntrl(c) && c!=BEL && c!=BS && c!=HT && c!=LF && c!=VT && c!=FF && c!=CR && c!=EOF && c!=ESC)
  #else
!             if (c < '\007' || (c > '\r' && c < ' ' && c != '\032' && c != '\033'))
  #endif
                  return FALSE;  /* not a text file */
              lfctr++;
-------->&-------->&-------->&-------->&-------->&-------->&--------

5.0i 用 (pgpFileType.c.patch-50i)
-------->&-------->&-------->&-------->&-------->&-------->&--------
Following patch is for PGP 5.0i to recognize ESC as a valid character in PGP text mode.
;; Toshihiko Ueki <toshi@he.kobelcosys.co.jp>, 27 Oct 1998
;; PGP 5.0i is available from ftp://ftp.no.pgpi.com/pub/pgp/5.0/unix/pgp50i-unix-src.tar.gz

--- src/lib/pgp/utils/pgpFileType.c.orig	Sun Aug 10 06:44:33 1997
+++ src/lib/pgp/utils/pgpFileType.c	Tue Oct 27 21:00:00 1998
@@ -201,3 +201,3 @@
 					c = *buf++;
-					if (c < ' ' && (c < '\a' || c > '\r') && c != 26)
+					if (c < ' ' && (c < '\a' || c > '\r') && c != 26 && c != 27)
 						return 1;	/* Illegal control char */
-------->&-------->&-------->&-------->&-------->&-------->&--------

(Q4) Removing old name: no such file or directory, /tmp/mailcrypt-gpg-stderr-xxxxx
     のようなエラーが表示されてしまう。

(A4) gpg 1.X がインストールされていません。cmail-crypt.el は、
     gpg 1.X で署名/暗号化されたメイルについては、gpg 1.X を
     使用して処理を試みます。gpg 1.X をインストールしてください。

     また、cmail-crypt-default-version が "GPG" として指定さ
     れていても、pgp で署名/暗号化されたメイルについては、
     cmail-crypt-altpgp-version で指定された pgp を使用して
     処理を試みます。
<EOF>
