「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 | + | 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では、鍵交換を行い、共通鍵を利用して、通信を行います。サーバの秘密鍵が漏えいした場合、内容を解読できる問題があります。
- クライアントは、サーバに通信要求を行います
- サーバは、クライアントに、サーバ証明書とサーバの公開鍵を送信します。
- クライアントは、共通鍵を作成し、サーバの公開鍵で暗号化し、サーバに送信します。
- サーバは、サーバの秘密鍵で、暗号化された共通鍵を復号します。
- 以降、共通鍵で暗号化し、通信を行います。
Perfect Foward Secrecy
PFSは、セッションごとに一時的に使用できる公開鍵を交換し、暗号鍵を共有する方式です。証明書の秘密鍵が危殆化しても、過去の通信データを復号できません。 Forward Secrecy は、サーバの秘密鍵が漏れた場合にも、過去の暗号化された通信の安全性を守る考えで、DHE(ディフィー・ヘルマン鍵共有)とECDHE(楕円曲線ディフィー・ヘルマン鍵共有)で実用化されています。 Forward Secrecy では、クライアントとサーバにそれぞれの秘密鍵を持たせます。
DHEとECDHEでは、秘密鍵は、固定ではなく、随時変更されます。
Perfect Forward Secrecyを実現するアルゴリズム
SSL/TLSでPerfect Forward Secrecyを実現するアルゴリズムには、以下のものがあります。
- ディフィー・ヘルマン鍵交換(DHE)
- 楕円曲線暗号を使用した楕円曲線ディフィー・ヘルマン鍵共有(DCDHE)
DHE
- DHE-RSA
- DHE-DSS
ECDHE
- ECDHE-RSA
- ECDHE-ECDSA
これらを利用することにより、従来の共通鍵方式に比べて、サーバ負荷が上がります。
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";