Perfect Forward Secrecy

提供: セキュリティ
2015年6月6日 (土) 12:44時点におけるDaemon (トーク | 投稿記録)による版

移動: 案内検索
スポンサーリンク

Perfect Forward Secrecy (PFS)とは、「暗号化された通信」と「秘密鍵」の両方が漏えいしても、復号化できない、という鍵交換の概念です。

読み方

Perfect Forward Secrecy
ぱーふぇくと ふぉわーど しーくれしぃ
PFS
ぴーえふえす

概要

Perfect Forward Secrecy(PFS)は、「暗号化された通信」と「秘密鍵」の両方が漏えいしても、復号化できない、という鍵交換の概念です。

SSLの通信

SSLでは、鍵交換を行い、共通鍵を利用して、通信を行います。サーバの秘密鍵が漏えいした場合、内容を解読できる問題があります。

  1. クライアントは、サーバに通信要求を行います
  2. サーバは、クライアントに、サーバ証明書とサーバの公開鍵を送信します。
  3. クライアントは、共通鍵を作成し、サーバの公開鍵で暗号化し、サーバに送信します。
  4. サーバは、サーバの秘密鍵で、暗号化された共通鍵を復号します。
  5. 以降、共通鍵で暗号化し、通信を行います。

Perfect Foward Secrecy

PFSは、セッションごとに一時的に使用できる公開鍵を交換し、暗号鍵を共有する方式です。証明書の秘密鍵が危殆化しても、過去の通信データを復号できません。 Forward Secrecy は、サーバの秘密鍵が漏れた場合にも、過去の暗号化された通信の安全性を守る考えで、DHE(ディフィー・ヘルマン鍵共有)とECDHE(楕円曲線ディフィー・ヘルマン鍵共有)で実用化されています。 Forward Secrecy では、クライアントとサーバにそれぞれの秘密鍵を持たせます。

DHEとECDHEでは、秘密鍵は、固定ではなく、随時変更されます。

Perfect Forward Secrecyを実現するアルゴリズム

SSL/TLSでPerfect Forward Secrecyを実現するアルゴリズムには、以下のものがあります。

DHE

  • DHE-RSA
  • DHE-DSS

ECDHE

  • ECDHE-RSA
  • ECDHE-ECDSA

これらを利用することにより、従来の共通鍵方式に比べて、サーバ負荷が上がります。

  • ECDHE-RSA は、RSAに比べて、負荷が15%ほど増加します。
  • ECDHE-ECDSA は、RSAより高速化すると言われています。

PFSではないもの

  • RSA
  • DH

node.jsでのサポート

node.js v0.12 から  ECDHEとDHEの2種類が利用可能になりました。 ECDHEの性能が良いです。

ApacheでPerfect Forward Secrecyを利用する

Apache 2.4.x 以上が必要です。

SSLEngine on
SSLProtocol all -SSLv2 -SSLv3
SSLHonorCipherOrder On
SSLCipherSuite "EECDH+ECDSA+AESGCM EECDH+aRSA+AESGCM EECDH+ECDSA+SHA384 EECDH+ECDSA+SHA256 EECDH+aRSA+SHA384 EECDH+aRSA+SHA256 EECDH+aRSA+RC4 EECDH EDH+aRSA RC4 !aNULL !eNULL !LOW !3DES !MD5 !EXP !PSK !SRP !DSS"

nginxでPerfect Forward Secrecyを利用する

nginx 1.0.6以上か、1.1.0以上が必要です。

ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
ssl_ciphers "EECDH+ECDSA+AESGCM EECDH+aRSA+AESGCM EECDH+ECDSA+SHA384 EECDH+ECDSA+SHA256 EECDH+aRSA+SHA384 EECDH+aRSA+SHA256 EECDH+aRSA+RC4 EECDH EDH+aRSA RC4 !aNULL !eNULL !LOW !3DES !MD5 !EXP !PSK !SRP !DSS";

関連項目




スポンサーリンク