Perfect Forward Secrecy
提供: セキュリティ
スポンサーリンク
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";
関連項目
ツイート
スポンサーリンク