積んでしまっていたブログネタの消化ですのでパパッと書いてしまいます。
PGP、使ってますか?
皆さんはPGPを使っていますか?メール等のメッセージを暗号化したり、ファイルに署名ができたりするソフトウェアです。IPAへのセキュリティに関する届出・相談で用いたりします。PKIのようなお堅い仕組みがなくても利用できるので、手軽にセキュリティを高めることができます。
Enigmailの脆弱性
Mozilla ThunderbirdでPGPをシームレスに使用できるアドオンがEnigmailです。今年、これに脆弱性(CVE-2014-5369)が発見されました。メールを暗号化したときにBCCの受信者へは平文を送ってしまい、BCC受信者の通信内容盗聴等によってメッセージの内容が漏えいするというものです。ご利用の方はアップデートを。
この脆弱性は現在の最新バージョンである1.7.2で修正され、BCC受信者にもメッセージが暗号化されて届くようになりました。しかし、これで問題が解消したわけではないと考えています。
メールの宛先のおさらい
メールの宛先としてToやCC、BCCを使い分けている方には説明が不要かと思いますが、後ほどの説明の為に図にしました。To, CC, BCCそれぞれの宛先に指定しても、メールの宛先はToとCCしか書かれず、BCCの宛先には届いている事がわからないようになっています。
PGPのメッセージ
一方、PGPはメッセージの暗号化の際に複数の受信者を指定でき、1つの暗号化メッセージを出力できます。
EnigmailでTo, BCCそれぞれに1つずつメールアドレスを入れて暗号化したメッセージををpgpdumpでダンプしてみました(Key IDの値はマスクしてあります)。
Old: Public-Key Encrypted Session Key Packet(tag 1)(268 bytes)
New version(3)
Key ID - 0x****************
Pub alg - RSA Encrypt or Sign(pub 1)
RSA m^e mod n(2047 bits) - ...
-> m = sym alg(1 byte) + checksum(2 bytes) + PKCS-1 block type 02
Old: Public-Key Encrypted Session Key Packet(tag 1)(524 bytes)
New version(3)
Key ID - 0x0000000000000000
Pub alg - RSA Encrypt or Sign(pub 1)
RSA m^e mod n(4096 bits) - ...
-> m = sym alg(1 byte) + checksum(2 bytes) + PKCS-1 block type 02
Old: Public-Key Encrypted Session Key Packet(tag 1)(524 bytes)
New version(3)
Key ID - 0x****************
Pub alg - RSA Encrypt or Sign(pub 1)
RSA m^e mod n(4092 bits) - ...
-> m = sym alg(1 byte) + checksum(2 bytes) + PKCS-1 block type 02
New: Symmetrically Encrypted and MDC Packet(tag 18)(117 bytes)
Ver 1
Encrypted data [sym alg is specified in pub-key encrypted session key]
(plain text + MDC SHA1(20 bytes))
送信者と2つの宛先、それぞれの公開鍵で暗号化された復号情報(セッションキー)と、セッションキーで暗号化されたメッセージがあることがわかります。
メールとPGPの組み合わせの問題点
上記のような暗号化メッセージが1通のメールでTo, CC, BCCそれぞれに送られるわけですから、暗号化メッセージ内のBCCの宛先の為の復号情報がToとCCの受信者に漏えいします。
送信者によるBCCの宛先情報の除去はメールシステムの仕組みによって行われます。現状ではこのシステムからはPGPメッセージの操作は行えません。さらにPGP署名がされている場合には内容の変更は行えません。
この問題は、メールの宛先・配送の仕様とPGPのメッセージ仕様が協調できていないである点にあると思います。対処としては、暗号化したいメールにはBCCは使わない事です。BCCとして送りたい方へは別途送ってあげましょう。
コメントする