web-dev-qa-db-ja.com

4つのECDSA P256 CSPがWindowsで利用可能です。どちらを使用すればよいですか?

Azureサポートケース#116120515025419によると、パブリックデータセンターは以下のみをサポートしています

TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384_P256
TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256_P256
TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256_P256
TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256_P384
TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256
TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256
TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA_P256
TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA_P256
TLS_RSA_WITH_AES_256_GCM_SHA384
TLS_RSA_WITH_AES_128_GCM_SHA256
TLS_RSA_WITH_AES_256_CBC_SHA256
TLS_RSA_WITH_AES_128_CBC_SHA256
TLS_RSA_WITH_AES_256_CBC_SHA
TLS_RSA_WITH_AES_128_CBC_SHA
TLS_RSA_WITH_3DES_EDE_CBC_SHA

私の目標は、Perfect Forward SecrecyでECCを使用することなので、これらが私の最良のオプションだと思います。

TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256_P256
TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256_P256

私が見つけることができる最も安いEV証明書はNamecheap/Comodoにあり、次の曲線をサポートしています。

 prime256r1, secp256t1, secp384r1, secp521r1.

このガイド を使用して証明書を生成していますが、次のどれから選択するべきかわかりません

ECDSA_P256 Microsoft Software Key Storage Provider
ECDSA_secP256r1 Microsoft Key Storage provider
ECDSA_secP256k1 Microsoft Key Storage provider
ECDSA_nistP256, Microsoft Key Storage provider

ECDSA 256を必要とする根拠

P256証明書を使用するという私の選択により、開発者はGCMに加えてCBCを使用できるようになります。より長いビット長を選択することもできますが、より安全なECDSA CSPはCBCをサポートしません。 CBCをサポートすることは賢明ですか?

重要な場合は、私のターゲットクライアントはモバイルアプリ、ブラウザー、IoTデバイスです。

質問

  • Windowsで利用可能な曲線の違いは何ですか?私のユースケースに最も適していますか? (なぜ?)

  • 選択肢がある場合、サードパーティの実装で最もエラーが発生しにくい曲線はどれですか。

    enter image description hereenter image description here

2

TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256のような暗号スイートには、2つの関係する曲線があります。

  • 1つはECDHE部分に使用されます。交換されたDiffie-Hellman鍵は、特定の曲線上でクライアントとサーバー間で使用されます。
  • もう1つは、サーバーによって計算されるECDSA署名用です。サーバーsignsServerKeyExchangeメッセージ。 ECDSAは、楕円曲線の計算を使用する署名アルゴリズムです。

両方の曲線が同じである必要はありません。彼らはほとんど無関係で、異なる世界に住んでいます。概念的なレベルでは、ECDHEに使用されるものはより重要です。これは、ネットワークを介して交換されるデータの存続期間のセキュリティを確保する必要があるためです(つまり、データが10年後も重要である場合、曲線は依然として10年後に頑健になること);署名で使用されているのは今のところのみであり、明日壊れてもかまいません。

forward secrecy はすべての鍵交換、つまりECDHE部分に関するものであることに注意してください。これは同じ考えです。署名システムのセキュリティは今のところ重要です。したがって、TLS_ECDHE_RSA_*暗号スイートを使用して、つまり証明書にRSAキーを使用して、ECCを使用した転送秘密を完全に実現できます。

通常、CSPの選択(技術的には「CNGキーストレージプロバイダー」)は、実際に保存される秘密キーのタイプに関するものです。つまり、証明書とECDSA(またはRSA)署名に対応しています。 ECDHEの曲線は、クライアントとサーバー間で独立して(*)選択され、秘密はRAM=のみに保持されます(したがって、決して保存されず、転送秘密のポイントです)。

そうは言っても、どこでもサポートされている1つの曲線はNISTの曲線P-256であり、「secp256r1」または「prime256r1」とも呼ばれます(別個の曲線である「secp256k1」と混同しないでください)。 NIST曲線P-384も、P-256ほどではないかもしれませんが、幅広いサポートをかなり共有しています。また、P-384は少し計算量が多い(約3倍)ことを意味します。これは、一部の制約された組み込みシステム(スマートフォンではない;は本当にが関係する場合を除いて、実際には重要ではありません)小さなシステム)。追加のポイントは、P-256は、技術的な改善に関しても、十分なセキュリティをすでに確保しているということです。私たちが知る限り、P-256 ECDHE鍵交換が故障した場合、それはasの使用によるものです。まだ神話的な 量子コンピューター 、そしてそのような獣がこれまでに構築された場合、それはほとんど同じくらい簡単にP-384を切り刻みます。その意味では、P-256の代わりにP-384を使用するセキュリティ上の利点はありません。

概要:相互運用性を最大にするには、P-256を使用します。クライアントおよびサーバーのSSL実装は、ECDHE部分に別の曲線を使用することを決定する場合があります。特定のガイダンスが適用されない限り、そのその他の曲線は通常P-256、または(関連する実装に応じて)Curve25519になります。これもセキュリティに最適です。


(*)主に。一部のOpenSSLバージョンはECDHE曲線サイズをECDSAで使用される曲線と一致させようとします。これは、特に将来の技術的改善に関して、異なるセキュリティ特性を持つ異なる操作に関連しているため、意味がない場合があります。

4
Thomas Pornin

可能であれば、どれも。このページの最後の表を参照して、[安全な曲線]を選択します。 https://safecurves.cr.yp.to/index.html SSL Labs、ベストアドバイス: https:// github。 com/ssllabs/research/wiki/SSL-and-TLS-Deployment-Best-Practices

安全でない曲線

  • P224 P256、P384、->(危険)P521? ->おそらく安全ではありませんが、上記にリストされていません。

完全に安全な曲線は次のとおりです:

  • 曲線1174
  • Curve25519(私が知っているWindowsで唯一の安全な曲線、RFC draft-ietf-tls-curve25519、Windows 10バージョン1607およびWindows Server 2016)
  • Curve41417(以前の名前はCurve3617)
  • Curve383187の作成者はその後、M-383への切り替えを推奨しました
  • M-221は以前Curve2213と名付けられていました
  • M-383
  • 以前はCurve511187と呼ばれていたM-511
  • E-222
  • E-382
  • E-521
  • Ed448-Goldilocks

私の推奨事項:

  • ECC曲線の順序「curve25519」のみ[0日間のダウンプレイ攻撃を防止する]、または「curve25519」は常に「NIST」よりも互換性を保つためにのみ使用します。
  • ECDHE_ECDSA over ECDHE_RSA over DHE_RSA over RSA
  • SHA 256オーバー384、P521をドロップ(トップシークレットがない場合。SSLラボで推奨されている速度の場合)
  • GCM over CBC GCM128 over GCM256(トップシークレットがない場合。速度については、sslラボで推奨されています。)
  • 256ビットCBCよりも128ビットCBC(トップシークレットを除く。速度については、sslラボで推奨)
  • SHA-1 over SHA-2( schannelでshaを無効にする 、sha256、384、512のみを使用)

グループポリシー「Ecc Curve Order」にコピーして貼り付けます

Curve25519

この構成では、P曲線暗号は必要ありませんP = Nist; ECDHE/ECDSA = ECC! ECC曲線の順序グループ​​ポリシーで「curve25519」を決定できるようにします

完全転送秘密のみ:

  • TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256
  • TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384
  • TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256
  • TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384
  • TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256
  • TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384
  • TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256
  • TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384
  • TLS_DHE_RSA_WITH_AES_128_GCM_SHA256
  • TLS_DHE_RSA_WITH_AES_256_GCM_SHA384

グループポリシーにコピー/貼り付けSSL暗号スイートの順序:

TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256,TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256,TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384,TLS_DHE_RSA_WITH_AES_128_GCM_SHA256,TLS_DHE_RSA_WITH_AES_256_GCM_SHA384

Wireshark:

Nist Pカーブを有効にして優先順位を付けた場合:sls.update.Microsoft.com.nsatc.netが提供されます:TLS_ECDHE_RSA_WITH_AES128_GCM_SHA256名前付きカーブ:secp256r1(0x0017)(安全でないNIST/NSAカーブ、安全でない

fe2.update.Microsoft.com.nsatc.netはTLS_ECDHE_RSA_WITH_AES128_GCM_SHA384 secp256r1を提供しました(安全でないNIST/NSA曲線、安全でない

X25519カーブのみ、有効:fe2.update.Microsoft.com.nsatc.netは、TLS_ECDHE_RSA_WITH_AES128_GCM_SHA384名前付きカーブを提供:x25519([〜#〜] safe [〜#〜]

Schannel = Windows Update、CryptoAPI、IIS(おそらく他の人))

0
Tyler