GnuPG/PGP暗号メールの実験・検証用のメーリングリストで Thunderbird+Enigmail、Becky!+BkGnuPG、QMAIL3、Sylpheedなどと RFC2440, RFC4880, RFC3156 の各RFC対応での相互接続性の再確認を行っています。
その検証過程で、MUAを介さずにGnuPG(ver.1.4.9)単体で RFC2440, RFC4880 オプション付きでの行末空白文字の扱いに関する動作の違いについて不断さんが検証してくれました。
不断さんの検証結果を表にしたものを参考のために対応策とともに掲示しておきます。(表はエディタなどにコピーして等幅フォントで見て下さい)
【1】:
Bug 18361 の現象が発生する理由の調査
(
https://www.mozdev.org/bugs/show_bug.cgi?id=18361 )
a. 行末空白文字を含むテキストに対し、MUA(Enigmail等)を利用せずに
--detach-sign --armor --textmodeオプションに --rfc2440または
--rfc4880オプションを追加したコマンドでのGnuPG単体実行にて
分離署名を実行する。(署名時)
b. 元の被署名テキストに必要な変更を加える。(被署名テキストの修正)
c. 上記の被署名テキストと元の署名ファイルと共に署名を検証する。(検証時)
このオプション指定と一連の操作、および検証結果が以下の表です。
(GnuPG ver1.4.9/1.4.8では 未指定の場合は--rfc4880指定と同じ)
+-----------+----------------------+-----------+------+
| 署名時 | 被署名テキストの修正 | 検証時 | 結果 |
+-----------+----------------------+-----------+------+
| --rfc2440 | 修正なし | --rfc2440 | Good |
| --rfc2440 | 行末空白文字を削除 | --rfc2440 | Good |
| --rfc2440 | 行末空白文字を追加 | --rfc2440 | Good |
| --rfc2440 | 修正なし | --rfc4880 | Bad |#1
| --rfc2440 | 行末空白文字を削除 | --rfc4880 | Good |
| --rfc2440 | 行末空白文字を追加 | --rfc4880 | Bad |
+-----------+----------------------+-----------+------+
| --rfc4880 | 修正なし | --rfc2440 | Bad |#2
| --rfc4880 | 行末空白文字を削除 | --rfc2440 | Bad |
| --rfc4880 | 行末空白文字を追加 | --rfc2440 | Bad |
| --rfc4880 | 修正なし | --rfc4880 | Good |
| --rfc4880 | 行末空白文字を削除 | --rfc4880 | Bad |
| --rfc4880 | 行末空白文字を追加 | --rfc4880 | Bad |
+-----------+----------------------+-----------+------+
以上、オプション指定の違いだけでも検証結果が変わる場合があり、#1, #2の
ケースでは被署名テキストが同じ内容でも署名検証に失敗します。
(
Bug 18361は #2 のケースで発生)
【2】:相互接続性維持のためのEnigmailの変更点
a.
Bug 18361 のバックアウト
Enigmailの動作とは無関係な現象に対する修正を元に戻してもらう。
(ISO-2022-JPからUTF-8への変換を中止する。確認ダイアログも出さない)
b. Armor Header KeysのCharsetヘッダとコンテント・ヘッダのContent-Typeの
charsetの両方をエンコード指定と同じにする。
(これで文字コード指定が正常に設定される)
これにより、
・Armor Header KeysのCharsetを理解しないMUAでも文字化けはしません。
ただし、現時点ではThunderbird+Enigmailが生成する本文パートがquoted-printableに(つまり ISO-2022-JPでquoted-printableに)なってしまいます。
【3】:RFC4880とRFC3156に対応していないMUAとの相互接続
a. 他MUAからThunderbird+Enigmail宛てにPGP/MIME署名メッセージを送る場合は以下の二つの条件を満たしておかないと、被署名パートに行末空白文字が含まれる場合にThunderbird+Enigmailでの検証に失敗します。
* テキストモード (--textmode オプション相当)
* RFC2440 準拠 (--rfc2440 オプション相当)
b. ISO-2022-JPのquoted-printableをデコード出来ないMUAでは文字化けします。(これは予想)