BkGnuPG 1.0.5b2 リリース
一部でお待たせしまくりの BkGnuPG 1.0.5b2 をリリースします。 まだ動作検証が完全に終わってないので, 取り敢えずβバージョンです。
1.0.5b2 は障害対応バージョンです。 今回の障害は, 受信した PGP/MIME 暗号化メッセージを復号した(平文にした)状態でメッセージを他のフォルダにコピーまたは移動すると暗号化パートが失われ二度と復号できなくなる, というものです。 この現象の発生には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! 側の負荷を減らし快適なユーザ操作を実現するため非常に重宝するのですが, 署名・暗号化メッセージに関しては裏目に出ている感じがします。 署名・暗号化メッセージを頻繁にやり取りする方は「添付ファイルを別ファイルに分離保存」する機能を無効にすることを(個人的に)お勧めします。