web-dev-qa-db-ja.com

openssl 1.0.1のECCでの曲線の選択?

Openssl 1.0.1とopenssl 1.0.2の両方のバージョンを使用しています。openssl1.0.2には、最高の優先曲線を自動的に設定する機能が1つあります。

ただし、openSSL 1.0.1では、最高の優先曲線を自動的に設定する機能はありません。

手動でカーブを設定する必要があります。私はECCの知識があまりないので、誰がどの曲線が最もよく、より安全であるかを私に案内できますか?

#if OPENSSL_VERSION_NUMBER >= 0x1000200fL

      /* Set automatic curve selection for server ssl to onoff.If onoff is 1 then 
      the highest preference curve is automatically used for ECDH temporary keys 
      used during key exchange. */
      (void)SSL_set_ecdh_auto(ssl, 1);

#Elif OPENSSL_VERSION_NUMBER < 0x1000200fL


      sECDH = EC_KEY_new_by_curve_name(NID_X9_62_prime256v1);    //  secp256r1 curve - referred as prime256v1
      (void)SSL_set_tmp_ecdh(ssl, sECDH);

#endif

ありがとう!

2
Devang Kubavat

短い答え:secp256r1secp384r1およびsecp521r1はすべて控えめな選択です。 secp256r1は現在、他のブラウザよりもブラウザとの互換性が高くなっています。詳しくは この質問 を参照してください。

クライアントが最新の場合(別名、モダンなブラウザ)、お勧めしますcurve25519。それはダニエルJ.バーンスタイン(暗号の世界で有名な大学教授)によって発明され、乱数を思いついた方法について非常に透過的だったので、その曲線に政府の裏口が開く可能性はありません。また、NIST P- *曲線よりも優れたパフォーマンスを示します [wikipedia]

しかし、実際には、opensslでサポートされているものはすべて、軍事組織または銀行でない限り問題ありません。その場合、ここに投稿するのをやめて、セキュリティ専門家を雇ってください!

1
Mike Ounsworth