BkGnuPG 1.0.5b2 リリース

no extension

一部でお待たせしまくりの BkGnuPG 1.0.5b2 をリリースします。 まだ動作検証が完全に終わってないので, 取り敢えずβバージョンです。

1.0.5b2 は障害対応バージョンです。 今回の障害は, 受信した PGP/MIME 暗号化メッセージを復号した(平文にした)状態でメッセージを他のフォルダにコピーまたは移動すると暗号化パートが失われ二度と復号できなくなる, というものです。 この現象の発生には2つの条件が揃っている必要があります。

  1. 「添付ファイルを別ファイルに分離保存」する設定になっていること。
  2. PGP/MIME フォーマットで暗号化していること。

また, 同様の現象を Becky! 2 に標準で同梱されている BkPGP でも確認しています。 もうひとつの PGP プラグインである PGPB2 ではこの障害現象は発生しまません。 S/MIME プラグインについては未確認です。

(1.0.5b2 を適用せずに)この障害を回避するには, 上記の二つの条件のうちどちらかを無効にします。 また条件が揃っている場合でも復号メッセージを元に戻せば安全にコピーまたは移動ができます。 (復号メッセージを元に戻すには他のメッセージまたはフォルダを表示してください。 フォーカスが外れるタイミングで元に戻ります)

以降でもう少し詳細な説明をしましょう。 興味のない方は読み飛ばしていただいて構いません。

PGP/MIME 暗号化メッセージを復号する際, 内部的には平文を元のメッセージの上に一時的に上書きするような操作をします。 そうすると元のメッセージの情報が見えなくなります。 特にヘッダ情報において元のメッセージがマルチパートの構成になっていることも分からなくなるのです。 ここが重要です。

ある暗号化メッセージが受信箱に入ると内部の構成は以下のようになります。

Content-Type: multipart/encrypted;
 boundary="===[PGP/MIME_RFC2015]===4194BDED.0B96===";
 protocol="application/pgp-encrypted"
Content-Transfer-Encoding: 7bit

–===[PGP/MIME_RFC2015]===4194BDED.0B96=== Content-Type: application/pgp-encrypted Content-Transfer-Encoding: 7bit X-Becky-Include: 20041112224309.DDA3.SPIEGEL@alles.or.jp\9792d74-1.txt

–===[PGP/MIME_RFC2015]===4194BDED.0B96=== Content-Type: application/octet-stream Content-Transfer-Encoding: 7bit X-Becky-Include: 20041112224309.DDA3.SPIEGEL@alles.or.jp\9792d74-1(2).txt

–===[PGP/MIME_RFC2015]===4194BDED.0B96===–

PGP に特有のあの意味不明の文字の羅列が見当たりませんね。 実は Becky! 2 ではテキスト以外のパートを「添付ファイル」とみなして別ファイルに分離しています。 「X-Becky-Include」という部分がそれに該当します。 プラグインからはこの構造は見えません。

このメッセージを BkGnuPG で復号すると(一時的とはいえ)マルチパートの構造ごと丸々上書きしてしまいます。 以下は復号例です。

Content-Type: text/plain; charset="ISO-2022-JP"
Content-Transfer-Encoding: 7bit

こんにちは。お元気ですか?

この状態でコピーまたは移動操作を行うと, Becky! 側では「添付ファイルがない」と勘違いしてしまうようです(そう見えます)。 しかしコピーまたは移動されるメッセージはオリジナルの(X-Becky-Include を含んだ)内容のままコピーされてしまいます。 コピー先では X-Becky-Include で指定された分離ファイルが存在しないため, オリジナルのメッセージに復元できず復号処理もできなくなってしまうのです。

障害の発生しない PGPB2 では, この辺を上手に回避されています。 すなわちマルチパートの構造を崩さずに暗号パートの部分を平文に置き換えるような処理をしています。 上記の例では, 復号後のメッセージは以下のようになります。

Content-Type: multipart/mixed;
 boundary="===[PGP/MIME_RFC2015]===4194BDED.0B96===";
Content-Transfer-Encoding: 7bit

–===[PGP/MIME_RFC2015]===4194BDED.0B96=== Content-Type: text/plain; charset="ISO-2022-JP" Content-Transfer-Encoding: 7bit

こんにちは。お元気ですか?

–===[PGP/MIME_RFC2015]===4194BDED.0B96===–

少なくともこれで Becky! 側が勘違いすることはなくなるので, コピーまたは移動操作も完全に行われます。 BkGnuPG 1.0.5b2 では PGPB2 の方式に合わせてみました。 これでうまくいくといいのですが, 何せ即席で修正しているので副作用が出るかもしれません。

「添付ファイルを別ファイルに分離保存」する機能は Becky! 側の負荷を減らし快適なユーザ操作を実現するため非常に重宝するのですが, 署名・暗号化メッセージに関しては裏目に出ている感じがします。 署名・暗号化メッセージを頻繁にやり取りする方は「添付ファイルを別ファイルに分離保存」する機能を無効にすることを(個人的に)お勧めします。