「Perfect Forward Secrecy」の版間の差分

提供: セキュリティ
移動: 案内検索
行8: 行8:
 
== 概要 ==
 
== 概要 ==
 
Perfect Forward Secrecy(PFS)は、「暗号化された通信」と「秘密鍵」の両方が漏えいしても、復号化できない、という鍵交換の概念です。
 
Perfect Forward Secrecy(PFS)は、「暗号化された通信」と「秘密鍵」の両方が漏えいしても、復号化できない、という鍵交換の概念です。
 
+
== SSLの通信 ==
 +
[[SSL]]では、鍵交換を行い、共通鍵を利用して、通信を行います。サーバの[[秘密鍵]]が漏えいした場合、内容を解読できる問題があります。
 +
# クライアントは、サーバに通信要求を行います
 +
# サーバは、クライアントに、サーバ証明書とサーバの[[公開鍵]]を送信します。
 +
# クライアントは、共通鍵を作成し、サーバの公開鍵で暗号化し、サーバに送信します。
 +
# サーバは、サーバの[[秘密鍵]]で、暗号化された共通鍵を復号します。
 +
# 以降、共通鍵で暗号化し、通信を行います。
 +
== Perfect Foward Secrecy ==
 
PFSは、セッションごとに一時的に使用できる[[公開鍵]]を交換し、[[暗号鍵]]を共有する方式です。証明書の[[秘密鍵]]が危殆化しても、過去の通信データを復号できません。
 
PFSは、セッションごとに一時的に使用できる[[公開鍵]]を交換し、[[暗号鍵]]を共有する方式です。証明書の[[秘密鍵]]が危殆化しても、過去の通信データを復号できません。
 +
Forward Secrecy は、サーバの[[秘密鍵]]が漏れた場合にも、過去の暗号化された通信の安全性を守る考えで、DHE(ディフィー・ヘルマン鍵共有)とECDHE(楕円曲線ディフィー・ヘルマン鍵共有)で実用化されています。
 +
Forward Secrecy では、クライアントとサーバにそれぞれの[[秘密鍵]]を持たせます。
  
SSL/TLSでPerfect Forward Securityを実現するアルゴリズムには、以下のものがあります。
+
DHEとECDHEでは、[[秘密鍵]]は、固定ではなく、随時変更されます。
 +
== Perfect Forward Secrecyを実現するアルゴリズム ==
 +
SSL/TLSでPerfect Forward Secrecyを実現するアルゴリズムには、以下のものがあります。
 
* [[ディフィー・ヘルマン鍵交換]](DHE)
 
* [[ディフィー・ヘルマン鍵交換]](DHE)
 
* 楕円曲線暗号を使用した楕円曲線ディフィー・ヘルマン鍵共有(DCDHE)
 
* 楕円曲線暗号を使用した楕円曲線ディフィー・ヘルマン鍵共有(DCDHE)
行22: 行33:
 
* ECDHE-RSA
 
* ECDHE-RSA
 
* ECDHE-ECDSA
 
* ECDHE-ECDSA
 +
 +
これらを利用することにより、従来の共通鍵方式に比べて、サーバ負荷が上がります。
 +
* ECDHE-RSA は、[[RSA]]に比べて、負荷が15%ほど増加します。
 +
* ECDHE-ECDSA は、[[RSA]]より高速化すると言われています。
 
== PFSではないもの ==
 
== PFSではないもの ==
 
* RSA
 
* RSA
行28: 行43:
 
node.js v0.12 から  ECDHEとDHEの2種類が利用可能になりました。
 
node.js v0.12 から  ECDHEとDHEの2種類が利用可能になりました。
 
ECDHEの性能が良いです。
 
ECDHEの性能が良いです。
 +
== ApacheでPerfect Forward Secrecyを利用する ==
 +
[[Apache]] 2.4.x 以上が必要です。
 +
<syntaxhighlight lang="apache">
 +
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"
 +
</syntaxhighlight>
 +
== nginxでPerfect Forward Secrecyを利用する ==
 +
nginx 1.0.6以上か、1.1.0以上が必要です。
 +
<syntaxhighlight lang="apache">
 +
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";
 +
</syntaxhighlight>
 
== 関連項目 ==
 
== 関連項目 ==
 
* [[Transport Layer Security]]
 
* [[Transport Layer Security]]
 
<!-- vim: filetype=mediawiki
 
<!-- vim: filetype=mediawiki
 
-->
 
-->

2015年6月6日 (土) 12:44時点における版

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";

関連項目