web-dev-qa-db-ja.com

どの楕円曲線を使用する必要がありますか?

私は現在SSL証明書を更新しており、楕円曲線への切り替えを検討していました。 Bernstein and Lange によると、一部の曲線は使用すべきではないことはわかっていますが、OpenSSLで正しい曲線を選択するのが困難です。

$ openssl ecparam -list_curves
  secp112r1 : SECG/WTLS curve over a 112 bit prime field
  secp112r2 : SECG curve over a 112 bit prime field
  secp128r1 : SECG curve over a 128 bit prime field
  secp128r2 : SECG curve over a 128 bit prime field
  secp160k1 : SECG curve over a 160 bit prime field
  secp160r1 : SECG curve over a 160 bit prime field
  secp160r2 : SECG/WTLS curve over a 160 bit prime field
  secp192k1 : SECG curve over a 192 bit prime field
  secp224k1 : SECG curve over a 224 bit prime field
  secp224r1 : NIST/SECG curve over a 224 bit prime field
  secp256k1 : SECG curve over a 256 bit prime field
  secp384r1 : NIST/SECG curve over a 384 bit prime field
  secp521r1 : NIST/SECG curve over a 521 bit prime field
  prime192v1: NIST/X9.62/SECG curve over a 192 bit prime field
  prime192v2: X9.62 curve over a 192 bit prime field
  prime192v3: X9.62 curve over a 192 bit prime field
  prime239v1: X9.62 curve over a 239 bit prime field
  prime239v2: X9.62 curve over a 239 bit prime field
  prime239v3: X9.62 curve over a 239 bit prime field
  prime256v1: X9.62/SECG curve over a 256 bit prime field
  sect113r1 : SECG curve over a 113 bit binary field
  sect113r2 : SECG curve over a 113 bit binary field
  sect131r1 : SECG/WTLS curve over a 131 bit binary field
  sect131r2 : SECG curve over a 131 bit binary field
  sect163k1 : NIST/SECG/WTLS curve over a 163 bit binary field
  sect163r1 : SECG curve over a 163 bit binary field
  sect163r2 : NIST/SECG curve over a 163 bit binary field
  sect193r1 : SECG curve over a 193 bit binary field
  sect193r2 : SECG curve over a 193 bit binary field
  sect233k1 : NIST/SECG/WTLS curve over a 233 bit binary field
  sect233r1 : NIST/SECG/WTLS curve over a 233 bit binary field
  sect239k1 : SECG curve over a 239 bit binary field
  sect283k1 : NIST/SECG curve over a 283 bit binary field
  sect283r1 : NIST/SECG curve over a 283 bit binary field
  sect409k1 : NIST/SECG curve over a 409 bit binary field
  sect409r1 : NIST/SECG curve over a 409 bit binary field
  sect571k1 : NIST/SECG curve over a 571 bit binary field
  sect571r1 : NIST/SECG curve over a 571 bit binary field
  c2pnb163v1: X9.62 curve over a 163 bit binary field
  c2pnb163v2: X9.62 curve over a 163 bit binary field
  c2pnb163v3: X9.62 curve over a 163 bit binary field
  c2pnb176v1: X9.62 curve over a 176 bit binary field
  c2tnb191v1: X9.62 curve over a 191 bit binary field
  c2tnb191v2: X9.62 curve over a 191 bit binary field
  c2tnb191v3: X9.62 curve over a 191 bit binary field
  c2pnb208w1: X9.62 curve over a 208 bit binary field
  c2tnb239v1: X9.62 curve over a 239 bit binary field
  c2tnb239v2: X9.62 curve over a 239 bit binary field
  c2tnb239v3: X9.62 curve over a 239 bit binary field
  c2pnb272w1: X9.62 curve over a 272 bit binary field
  c2pnb304w1: X9.62 curve over a 304 bit binary field
  c2tnb359v1: X9.62 curve over a 359 bit binary field
  c2pnb368w1: X9.62 curve over a 368 bit binary field
  c2tnb431r1: X9.62 curve over a 431 bit binary field
  wap-wsg-idm-ecid-wtls1: WTLS curve over a 113 bit binary field
  wap-wsg-idm-ecid-wtls3: NIST/SECG/WTLS curve over a 163 bit binary field
  wap-wsg-idm-ecid-wtls4: SECG curve over a 113 bit binary field
  wap-wsg-idm-ecid-wtls5: X9.62 curve over a 163 bit binary field
  wap-wsg-idm-ecid-wtls6: SECG/WTLS curve over a 112 bit prime field
  wap-wsg-idm-ecid-wtls7: SECG/WTLS curve over a 160 bit prime field
  wap-wsg-idm-ecid-wtls8: WTLS curve over a 112 bit prime field
  wap-wsg-idm-ecid-wtls9: WTLS curve over a 160 bit prime field
  wap-wsg-idm-ecid-wtls10: NIST/SECG/WTLS curve over a 233 bit binary field
  wap-wsg-idm-ecid-wtls11: NIST/SECG/WTLS curve over a 233 bit binary field
  wap-wsg-idm-ecid-wtls12: WTLS curvs over a 224 bit prime field
  Oakley-EC2N-3:
        IPSec/IKE/Oakley curve #3 over a 155 bit binary field.
        Not suitable for ECDSA.
        Questionable extension field!
  Oakley-EC2N-4:
        IPSec/IKE/Oakley curve #4 over a 185 bit binary field.
        Not suitable for ECDSA.
        Questionable extension field!

親切な暗号学者は、どの曲線がまだ安全と見なされているかを私に指摘できますか?

91
executifs

あなたはバーンスタインとランゲのアドバイスを誤って読んでいます(確かに、彼らのプレゼンテーションは恐ろしい赤い "False"タグで少し誤解を招くようです)。それらが意味というのは、一部の曲線が本質的に安全ではないということではなく、安全な実装一部の曲線の方が他の曲線よりも簡単です(たとえば、有効な曲線点のエンコーディングであると主張しているが、そうではない何かに遭遇したときのライブラリの動作に関して)。

あなたが本当に欲しいのは次のような曲線です:

  • 秘密鍵(SSLサーバー)を委託するソフトウェアは適切に実装されており、秘密鍵の詳細を漏らしません。
  • 相互運用性が達成されます。

SSLサーバー証明書の場合、「楕円曲線」証明書はデジタル署名(ECDSAアルゴリズム)でのみ使用されます。サーバーは、それ自体が生成するメッセージのみに署名します。いずれの場合でも、ECDSAの曲線に関係する唯一の「プライベート」操作は、サーバーが生成するランダムな値による従来のベースポイント(曲線定義の一部であるため正しいコード)の乗算です。したがって、使用例では、使用された曲線に固有の秘密鍵の漏洩のリスクはありません。 SSLの実装が不十分である場合、一部の曲線だけでなく、すべての曲線に対して貧弱になります。

「相互運用性」とは、SSLクライアントが実際にサーバーに接続できる場合は、おそらくそれを優先することを意味します。それ以外の場合、SSLサーバーがあっても意味がありません。これにより、質問が大幅に簡略化されます。実際には、平均的なクライアントは2つのカーブのみをサポートします。これは、いわゆる NSA Suiteで指定されているカーブです。 B :これらはNIST曲線P-256およびP-384です(OpenSSLでは、これらはそれぞれ「prime256v1」および「secp384r1」として指定されます)。他の曲線を使用すると、一部の広く普及しているWebブラウザー(Internet Explorer、Firefoxなど)がサーバーと通信できなくなります。

トラブルを最小限に抑えるためにP-256を使用してください。 384ビットの曲線が利用可能な256ビットの曲線を使用することで男らしさを脅かされていると感じた場合は、P-384を使用してください。これにより、計算コストとネットワークコストが増加します(CPUの場合は約3倍、いくつかの追加)ネットワーク上では数十バイト)ですが、これは実際には無視できる可能性があります(SSLを使用したWebサーバーでは、「SSL」ではなく「Web」に大きなコストがかかります)。

96
Thomas Pornin

私はsecp521r1に固執すると思います-DJBでさえ P-521はかなり素晴らしい素数です であり、それは すべての最新の暗号ライブラリでサポートされています でもあります。

同時に、Curve25519のような非NIST曲線の採用を推進する必要があります。これは、完全に固定され、実装エラーが発生しにくく、secp521r1よりも高速なソリューションを必要とするユーザーにとって、Niceの代替になる可能性があります。

9
Michał Staruch

少なくとも、secp112r1、secp112r2、secp128r1、secp128r2、secp160k1、secp160r1、secp160r2、secp192k1カーブは使用しないでください。 NIST推奨 によると、セキュリティアプリケーションには小さすぎます。

3
sylvain