web-dev-qa-db-ja.com

2015年になりましたが、セキュリティの高いHTTPS環境ではどのSSL / TLS暗号スイートを使用する必要がありますか?

「理想的なトランスポート層」を維持するHTTPSサービスを構成することは非常に困難になっています。マイナーな攻撃の影響を受けないようにしながら、ある程度の互換性を許可するようにHTTPSサービスを構成するにはどうすればよいですか?

TLSダウングレード攻撃 組み合わせ ビースト、クライム、ブリーチ、プードル SSLv3以前のすべてではないにしても、ほとんどをノックアウトします。 MicrosoftはデフォルトでSSLv3を無効にしています 、これは私にとって良い動きのように思えます。 RC4の弱点 、MD5、およびSHA1のため、選択する暗号スイートはさらに少なくなっています。

「理想的な」HTTPSサービスは、TLS 1.0、1.1、および1.2のみを暗号化したキーサイズのバリアントで有効にしますか?最も好ましい暗号スイートは何ですか?

TLS_RSA_WITH_AES_128_CBC_SHA256
TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256
TLS_DHE_DSS_WITH_AES_128_CBC_SHA256
TLS_RSA_WITH_AES_128_GCM_SHA256
TLS_DH_RSA_WITH_AES_128_GCM_SHA256
103
rook

「理想的な」HTTPSサービスは、暗号化に続く鍵サイズのバリアントでTLS 1.0、1.1、および1.2のみを有効にしますか?

いいえ、「理想的な」HTTPSサービスは、TLS 1.2のみを有効にし、要件に一致するタイプのSHA-2、4096ビットのDHパラメーター、および521ビットのEC曲線を備えたAEAD(関連データによる認証済み暗号化)ベースの暗号スイートのみを有効にします(政府承認された、または政府が生成したものではありません)。

上記のサービスは、Android 4.3以前、IE 10以前、Java 7(少なくともu25)以前)、OpenSSL 0.9.8y以前(OpenSSL 1.0.0は単に私のソースにリストされていません)などです。ただし、 TLS 1.1以下でのみ機能する攻撃、SHA-1に依存する攻撃、およびCBCモードまたはRC4のような古い暗号に依存する攻撃。

https://www.ssllabs.com ごとのクライアント暗号スイートの制限。

最も好ましい暗号スイートは何ですか?

場合によります!

Foward Secrecyが必要だと思います。

「現時点では合理的に安全であると信じられている」が必要条件だと思います。

私は、「少なくとも1人の主要な俳優によって実際に実装されている」ことが要件だと思います。

に関するすべての要件は、暗号の一部または別のサブセットを使用する必要があります(Xを使用する必要がある、Yを使用できないなど)。

したがって、妥当な出発点として次のリストを提案します。最上位のカテゴリ(TLS 1.2 AEAD)から始め、次に、ユーザーベースで機能するレベルに到達するか、快適ゾーンの終わりに到達するまで、リストを下に移動してカテゴリを追加します。

各カテゴリの暗号スイートをできるだけ多く含めます。これにより、次の攻撃が発生したときに、影響を受ける暗号スイートを削除して、残りの暗号スイートを続行できるようになります。

脆弱性を示す暗号スイートを引き続き削除できるように、脅威環境に注意してください。

各主要カテゴリ内で、好みに応じて暗号スイートを注文または選択してください。DHEはもちろんECDHEよりも低速ですが、楕円曲線の起源を完全に排除します。現時点では、順序付けはトレードオフのようですが、速度が必要な場合は、TLS_ECDHE_ *を優先するか、必要とすることさえあります。現在一般的に実装されている楕円曲線が信頼できない場合、または 2015年8月からのNSA Suite Bガイダンスにより、以前のSuite B楕円曲線からの移行が近い将来に予定されていることを示すNSA Suite Bガイダンス 、そしてCPUを燃やすことをいとわない、TLS_DHE_ *スイートを好むまたは必要とする。

「通常の」証明書はRSA証明書であり、TLS_ECDHE_RSA_ *とTLS_DHE_RSA_ *の両方の暗号スイートで機能することに注意してください。 TLS_ECDHE_ECDSA_ *暗号スイートで機能するDSA証明書はこれまで非常にまれであり、多くのCAはそれらを提供していません。

  • TLS 1.2 AEADのみ(すべてSHA-2も同様)
    • TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256(新しい0xcca9、Pre-RFC7905 0xcc14)
    • TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256(新しい0xcca8、Pre-RFC7905 0xcc13)
    • TLS_DHE_RSA_WITH_CHACHA20_POLY1305_SHA256(新しい0xccaa、Pre-RFC7905 0xcc15)
    • TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384(0xc030)
    • TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256(0xc02f)
      • NISTコンプライアンスに関心のある米国人の場合、これはTLS 1.2shouldRSA秘密鍵とRSA証明書を使用するサーバー用のカテゴリ暗号スイート NIST SP800- 52リビジョン1 表3-3
    • TLS_DHE_RSA_WITH_AES_256_GCM_SHA384(0x9f)
    • TLS_DHE_RSA_WITH_AES_128_GCM_SHA256(0x9e)
    • TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384(0xc02c)
      • NISTコンプライアンスに関心のある米国人の場合、これはTLS 1.2should楕円曲線秘密鍵とECDSA証明書を使用するサーバー用のカテゴリ暗号スイート NIST SP800 -52リビジョン1 表3-5
    • TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256(0xc02b)
      • NISTコンプライアンスに関心のある米国人の場合、これはTLS 1.2should楕円曲線秘密鍵とECDSA証明書を使用するサーバー用のカテゴリ暗号スイート NIST SP800 -52リビジョン1 表3-5
    • これらは、一般的なTLS実装で現在認識している最高レベルのセキュリティです。
    • 2017年1月の時点で、Androidが6.0でAES-GCMをサポートし、主要なものだけである-古い値のCHACHA20-POLY1305と7.0がサポートしている)新しいCHACHA20-POLY1305、Chrome、AES-GCMとCHACHA20-POLY1305の両方でFirefox、IEとEdgeのみAES-GCM、Java AES-GCMのみ、OpenSSL 1.1.0、AES-GCMとCHACHA20-POLY1305の両方、Safari、AES-GCMのみ)。
    • 多くの主要なブラウザーはこれを処理できません。2015年のビンテージブラウザーでも同様です(OSX 10.9のSafari 7、Android 4.3およびそれ以前、IE 10(IE 11でもWin7は、Windowsにパッチが適用されている場合、0x9fおよび0x9eをサポートします)
  • TLS 1.2 SHA2ファミリー(非AEAD)
    • TLS_DHE_RSA_WITH_AES_256_CBC_SHA256(0x6b)
    • TLS_DHE_RSA_WITH_AES_128_CBC_SHA256(0x67)
    • TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384(0xc028)
    • TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256(0xc027)
      • NISTコンプライアンスに関心のある米国人の場合、これはTLS 1.2shouldRSA秘密鍵とRSA証明書を使用するサーバー用のカテゴリ暗号スイート NIST SP800- 52リビジョン1 表3-3
    • TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384(0xc024)
      • NISTコンプライアンスに関心のある米国人の場合、これは楕円曲線の秘密鍵とECDSA証明書を使用するサーバー用のTLS 1.2 Mayカテゴリ暗号スイートです NIST SP800-52リビジョン1 表3-5
    • TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256(0xc023)
      • NISTコンプライアンスに関心のある米国人の場合、これはTLS 1.2should楕円曲線秘密鍵とECDSA証明書を使用するサーバー用のカテゴリ暗号スイート NIST SP800 -52リビジョン1 表3-5
    • TLS_ECDHE_RSA_WITH_CAMELLIA_256_CBC_SHA384(0xc077)
    • TLS_ECDHE_RSA_WITH_CAMELLIA_128_CBC_SHA256(0xc076)
    • TLS_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA256(0xc4)
    • AEADモードを失い、はるかに古いCBCモードを使用していることに注意してください。これは理想的ではありません。 CBCモードは、Lucky ThirteenやBEASTを含む過去のいくつかの攻撃の要因であり、CBCモードが将来の脆弱性にも関連している可能性があると考えることは不合理ではありません。
    • AEAD暗号スイートを持たない一部の最近のブラウザーは、このカテゴリにもう1つ適しています。たとえば、IE 11はTLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256を使用でき、Safari 6および7はいくつか使用できますこれらの
      • 繰り返しますが、これはECDHE_ECDSA GCMスイートが機能していない場合です)
  • 最新の暗号を使用したTLS 1.0および1.1(およびそれが利用可能なすべてであるため、古くなったハッシュ)
    • TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA(0xc014)
      • NISTコンプライアンスに関心のある米国人の場合、これは、RSA秘密鍵とRSA証明書を使用するサーバー用の5種類の暗号スイートです NIST SP800-52リビジョン1 表3-2
    • TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA(0xc013)
      • NISTコンプライアンスに関心のある米国人の場合、これは、RSA秘密鍵とRSA証明書を使用するサーバー用のshouldカテゴリ暗号スイートです NIST SP800-52リビジョン1 表3-2
    • TLS_DHE_RSA_WITH_AES_256_CBC_SHA(0x39)
    • TLS_DHE_RSA_WITH_AES_128_CBC_SHA(0x33)
    • TLS_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA(0x88)
    • TLS_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA(0x45)
    • TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA(0xc00a)
    • このレベルの暗号スイートを含めると、ほとんどすべての最新の実装で機能するものが見つかるでしょう。
    • このレベルでは、CBCモードを使用しているだけでなく、SHA-1も使用しています。 NIST SP800-131A 2013年12月31日以降(実際には1年前)、SHA-1のデジタル署名生成を禁止することをお勧めします。
  • TLS 1.0および1.1で、古くても妥当な暗号と古いハッシュ
    • TLS_DHE_RSA_WITH_3DES_EDE_CBC_SHA(0x16)
    • TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA(0xc012)
      • NISTコンプライアンスに関心のある米国人の場合、これは、RSA秘密鍵とRSA証明書を使用するサーバー用のshouldカテゴリ暗号スイートです NIST SP800-52リビジョン1 表3-2
    • TLS_ECDHE_ECDSA_WITH_3DES_EDE_CBC_SHA(0xc008)
      • NISTコンプライアンスに関心のある米国人の場合、これは、楕円曲線秘密鍵とECDSA証明書を使用するサーバー用のshouldカテゴリ暗号スイートです NIST SP800-52リビジョン1 表3-4
    • Windows上のIE 8 XPはまだ運が悪い、Java 6u45はDHパラメータの最大値のために。
    • これは絶対にお勧めする最低レベルです。
  • NIST SP800-52リビジョン1 コンプライアンスを必要とするRSA秘密鍵とRSA証明書を使用するサーバーの場合、 [〜#〜] shall [〜#〜] should、および転送秘密を提供しない特定の他のTLS_RSA_ *暗号スイートを実装する可能性があるため、このコンプライアンスが必要でない限り、お勧めしません。
    • また、そのドキュメントのパラグラフ3.3.1には、「サーバー shall は、承認されたアルゴリズムのみで構成される暗号スイートのみを使用するように構成する必要があります。許容される暗号スイートの完全なリストこのセクションでは一般的な使用方法を示します... "
  • もちろん、その他の国や業界の要件は異なります。
    • 互いに競合する可能性があります。あなたに当てはまるものをすべて注意深く読んでください。

ここに通常のプラグインを挿入します-独自のツールで暗号リストを試してください(openssl ciphers -v '...' for opensslベースのシステムの場合) https://www.ssllabs.comにアクセスします/index.html まず、さまざまなクライアントでサポートされている暗号スイートを確認し、次にサイトを設定してから、www.ssllabs.comに戻ってサーバーテストを実行します。

もちろん、_ ECDSA _暗号スイートにはECDSA証明書が必要ですが、それらを見つけるのは非常に困難です。

ETA:NSA Suite B ECアドバイス、およびIE 11/Win7は0x9fおよび0x9eをサポートするようになりました。

ETA:2016年1月の時点で、NIST SP800-52r1は変更されておらず、1つの新しい暗号スイート(0xc00a)がリストに追加されています。

ETA:2017年1月の時点で、RFC7905は3つのTLS 1.2 AEAD CHACHA20-POLY1305暗号を変更し、「最新の」ブラウザーは新しい箇条書きで述べたようにAEADサポートを大幅に改善しました。最新のIANA暗号スイートについては、 https://www.iana.org/assignments/tls-parameters/tls-parameters.xhtml#tls-parameters-4 を参照してください。

106

私は通常、リンクだけで答えることはしませんが、この質問への答えは頻繁に変わっているので、私はそうしています。また、「理想的な」暗号スイートは、アプリケーションと対象読者に完全に依存します。どちらを制御し、どの選択肢を選択できますか(IE6をサポートする必要があるかなど)、これらすべてが「理想的な」答えに影響します。

とにかく、 https://cipherli.st/ には、一般的なアプリケーションの暗号スイートと構成サンプルの素晴らしい要約があります。他の人が指摘したように、 Qualys SSLLabs には設定をテストするための素晴らしいツールがあり、いくつかの素晴らしい説明があります。

13
Teun Vink

良い出発点は Mozillaが推奨するTLS暗号 です。

パブリックHTTPS Webサイトのセキュリティをテストする良い方法は Qualys SSL Labs です。このサイトには、TLS/SSL(HTTPSに焦点を当てた)に関する多くの記事も含まれています。

7
DavisNT

SSL Labs経由で2016を更新:

主に、強力な認証とキー交換、転送秘密、少なくとも128ビットの暗号化を提供するAEADスイートに依存する必要があります。他の弱いスイートもサポートされている可能性がありますが、それらは、何もサポートしていない古いクライアントとのみ交渉されます。

避けなければならない時代遅れの暗号プリミティブがいくつかあります。

匿名Diffie-Hellman(ADH)スイートは認証を提供しません。

  • NULL暗号スイートは暗号化を提供しません。
  • エクスポート暗号スイートは、接続でネゴシエートされると安全ではありませんが、より強力なスイート(FREAK攻撃)を優先するサーバーに対しても使用できます。
  • 弱い暗号(通常は40ビットと56ビット)を備えたスイートは、簡単に解読できる暗号化を使用しています。
  • RC4は安全ではありません。
  • 3DESは遅くて弱いです。

開始点として、RSAキーとECDSAキーの両方用に設計された次のスイート構成を使用します。

ECDHE-ECDSA-AES128-GCM-SHA256
ECDHE-ECDSA-AES256-GCM-SHA384
ECDHE-ECDSA-AES128-SHA
ECDHE-ECDSA-AES256-SHA
ECDHE-ECDSA-AES128-SHA256
ECDHE-ECDSA-AES256-SHA384
ECDHE-RSA-AES128-GCM-SHA256
ECDHE-RSA-AES256-GCM-SHA384
ECDHE-RSA-AES128-SHA
ECDHE-RSA-AES256-SHA
ECDHE-RSA-AES128-SHA256
ECDHE-RSA-AES256-SHA384
DHE-RSA-AES128-GCM-SHA256
DHE-RSA-AES256-GCM-SHA384
DHE-RSA-AES128-SHA
DHE-RSA-AES256-SHA
DHE-RSA-AES128-SHA256
DHE-RSA-AES256-SHA256
EDH-RSA-DES-CBC3-SHA

注この構成例では、OpenSSLに必要な非標準のスイート名を使用しています。他の環境(IISなど)での展開には、標準のTLSスイート名を使用する必要があります。

参考: https://github.com/ssllabs/research/wiki/SSL-and-TLS-Deployment-Best-Practices#23-use-secure-cipher-suites

1
bhushan5640