「Perfect Forward Secrecy」の版間の差分
提供: セキュリティ
(→nginxでPerfect Forward Secrecyを利用する) |
|||
(同じ利用者による、間の1版が非表示) | |||
行49: | 行49: | ||
SSLProtocol all -SSLv2 -SSLv3 | SSLProtocol all -SSLv2 -SSLv3 | ||
SSLHonorCipherOrder On | 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" | + | 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> | </syntaxhighlight> | ||
+ | |||
== nginxでPerfect Forward Secrecyを利用する == | == nginxでPerfect Forward Secrecyを利用する == | ||
nginx 1.0.6以上か、1.1.0以上が必要です。 | nginx 1.0.6以上か、1.1.0以上が必要です。 | ||
行56: | 行59: | ||
ssl_protocols TLSv1 TLSv1.1 TLSv1.2; | ssl_protocols TLSv1 TLSv1.1 TLSv1.2; | ||
ssl_prefer_server_ciphers on; | 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"; | + | 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> | </syntaxhighlight> | ||
+ | |||
== 関連項目 == | == 関連項目 == | ||
* [[Transport Layer Security]] | * [[Transport Layer Security]] | ||
<!-- vim: filetype=mediawiki | <!-- vim: filetype=mediawiki | ||
--> | --> |
2015年6月6日 (土) 14:02時点における最新版
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";