遠い昔、スパイが使う手段といえば、メッセンジャーや伝書鳩を捕らえることでした。第二次世界大戦では、ENIGMAの解読によって同盟国が優勢となり、同盟国の勝利を決定付けたと言われています。

そして現在、このようなスパイや暗号解読はSSLセッションの攻撃という方法で行われています。この攻撃には、弱い暗号に絞り込んだ攻撃、中間者(MITM)攻撃、復号化の直後にあるエンドポイントのデータに対する攻撃(Heartbleed攻撃?)、サイドチャネル攻撃(パディングオラクル攻撃)など、さまざまな方法があります。しかし今日は、ブログ記事のタイトルから想像いただけると思いますが、将来のある時点で、過去にさかのぼってデータを復号化する攻撃について説明します。

スノーデン氏の事件が発生してから、この問題は注目を集めています。

「通常のSSL」にはどのような問題があるのでしょうか?

ジュリアス・シーザーも暗号を使用していました。この暗号は、アルファベットを、4文字ずつ左にずらした文字に置換するという方法です。つまり、AはD、BはEになります。メッセージを受け取った人は、「4」という数だけを知っていれば、メッセージを復元できるわけです。したがってこの暗号法では、数字の「4」がマスターシークレットになり、このマスターシークレットを安全にやりとりする方法も別途必要になります。おそらく、シーザーは信頼できる人物にマスターシークレットを直接伝えたと考えられます。

SSLにも、同じようなしくみがあります。すべてのSSL通信において、データの暗号化/復号化に使用するマスターシークレットが新しく設定されます。ただし、PFS以外のSSLでは、秘密鍵は絶対に不正使用されないという前提があるので、マスターシークレットは常に秘密鍵から生成されます。ところが、万が一秘密鍵が流出し、さらに暗号化データの盗聴や記録が長期間にわたって行われていた場合には、マスターシークレットを再生成することによってすべてのデータを復号化することができるのです。

これは、Wiresharkのようなパケット収集ツールで一般的に使用されている手法です。テストやデバッグを目的とするこのようなツールは、秘密鍵をインポートし、ケーブルを流れてくるSSLデータを復号化します。

この暗号化手法の弱点は、現在、将来、過去のあらゆるSSL通信において、秘密鍵が「単一障害ポイント」になってしまうという点です。通信データを記録しておけば、5年、10年、20年後、秘密鍵が手に入った時点ですべてのデータを過去にさかのぼって復号化できるわけです。

PFSにはどのような威力があるのでしょうか?

PFSの特徴は、マスターシークレットと固定鍵の関係性を切り離す点にあります。セッションごとに一時的な鍵が生成され、使用後に破棄されます。この処理には、Ephemeral Diffie-Hellman(略称はDHE)と呼ばれるアルゴリズムが使用されます(ここでは詳しく説明しません)。

ここで重要なのは、セッションごとに一意の鍵が生成されるという点です。攻撃者が鍵を手に入れたとしても、それは「一時的な」鍵でしかないので、復号化できるセッションは1つに限定されます。その鍵で他のセッションを復号化することはできません。Heartbleed攻撃についても、PFSを使用すれば、PFSには「Ephemeral(一時的)」な特性があるので、鍵の即時変更を強要されることはないでしょう。

DHEでは、複雑な算術演算を実行します。そのため処理は低速になりますが、ECC(Elliptic Curve Cryptography:楕円曲線暗号)という高速化手法が採用されています。ECCを採り入れた暗号化方式は、ECDHEと呼ばれます。

Barracuda Web Application FirewallでPFSを設定するには

Barracuda Web Application Firewallでは、7.8.1.016以降のバージョンでPFSを完全にサポートしています。PFSの設定は、[BASIC::Services]ページでHTTPSサービス情報を編集して行います。

[SSL]セクションの[Ciphers]にある[Custom]ボタンをクリックすると、使用可能な暗号化方式がすべて表示されます。「ECDHE-」で始まる暗号化方式を、[Available Ciphers]リストから[Selected Ciphers]リストに移動します。ECDHE暗号化方式を他より優先的に適用したい場合は、リスト内での順序を変更する必要があります。他の暗号方式をすべて削除してから、もう一度追加すると、他の暗号化方式はリストの末尾に移動します。

使用する暗号化方式は、Barracuda Web Application Firewallが管理します。クライアントのブラウザとサーバ(WAF)に、同じ暗号化方式を設定しておく必要があります。WAFは、共通の暗号化方式の中で、リストの先頭にあるものを選択します。また、ECDHE暗号化を使ったRSA証明書(ECDHEの後にRSAが続く名前)も引き続き使用できます。ただしこの場合、RSAはサーバのID識別のみに使用され、通信の機密性保持には使用されません。

今後のリリースで、PFSは、シングルクリックで操作できるバラクーダネットワークスのスタイルに変更される予定です。

PFSがIT運用環境に与える影響は小さい

現在、新しいWebブラウザのほとんどがECDHEをサポートしていますが、古いバージョンではサポートしていない場合があります。したがって、「下位互換性」を維持するには、他の暗号化方式も[Selected Ciphers]ボックスに追加しておく必要があります。使用するブラウザが古くPFSをサポートしていない場合には、PFS以外の暗号方式でネゴシエーションが行われるので、セキュリティ上問題はありません。

ECDHE暗号化方式では楕円曲線にP-256を使用しています。その理論上の強度は、3248ビットRSA鍵に相当します。NISTが現在推奨しているRSA鍵はRSA-2048ですから、P-256の方が、強度が高いことになります(ブルートフォース演算方式など)。

パフォーマンスについては、ECDHEハンドシェイクはRSA 2048ハンドシェイクよりも最大20%低速だというベンチマーク結果が出ています。この遅延は、フルハンドシェイク時のみに発生します。セッションを再開する場合には、一時的な鍵は再生成されないので、オーバーヘッドは発生しません。たとえば多くのセッションを再開した場合でも、全体的なパフォーマンス低下は20%未満でしょう。ただし、セッションタイムアウト値を長くすると、セキュリティに影響が発生する可能性があります。対策として、バラクーダネットワークスはセッション再開のタイムアウトの上限を30分としています。タイムアウトが発生すると、鍵は破棄されます。

PFSの使用にはいくつかの注意点がありますが、その1つがHTTPSセッションのデバッグです。秘密鍵だけではデバッグできなくなるのでデバッグが難しくなります。自分のユーザレルム(コンプライアンス、ポリシー、流出防止など)の監視ですら難しくなるでしょう。

リバースプロキシでPFSの負荷を軽減

IPS/IDSなどのパッシブなセキュリティデバイス、一部のスパンポート、レイヤ2(ブリッジモード)WAFにとっても、PFSは困難な課題です。なぜなら、SSLを使用するにはサーバの秘密鍵の設定が必要になるからです。ただし上記の説明のように、PFSによる暗号化では秘密鍵は実際には使用されないので、このようなデバイスは窮地に立たされ、HTTPSトラフィックの保護ではほとんど役に立たなくなります。

Barracuda Web Application Firewallをはじめとするリバースプロキシがあれば、あらゆるSSL通信を処理し、保護サーバの負荷を軽減することができます。WAFは、いくつかの点で威力を発揮します。まず、PFS暗号化方式を実際に処理するのはWAFなので、上記のような問題は発生しません。すべてのHTTPSデータを安全な方法で復号化し、検査することが可能です。さらに、PFSの設定をサーバごとに行う作業は面倒であり、一括設定できないシステムもありますが、WAFを使用すれば、セキュアなゾーン内にあるすべての保護サーバファームでPFSを一括設定できます。

※本内容は 2014年5月5日Perfect Forward Secrecy (PFS) support now availableを翻訳したものです。

Neeraj Khandelwal

本稿は、バラクーダネットワークスのWebサイトに掲載されている『バラクーダラボ』5月22日付の記事の転載です。