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
ありがとう!
短い答え:secp256r1
secp384r1
およびsecp521r1
はすべて控えめな選択です。 secp256r1
は現在、他のブラウザよりもブラウザとの互換性が高くなっています。詳しくは この質問 を参照してください。
クライアントが最新の場合(別名、モダンなブラウザ)、お勧めしますcurve25519
。それはダニエルJ.バーンスタイン(暗号の世界で有名な大学教授)によって発明され、乱数を思いついた方法について非常に透過的だったので、その曲線に政府の裏口が開く可能性はありません。また、NIST P- *曲線よりも優れたパフォーマンスを示します [wikipedia]
しかし、実際には、opensslでサポートされているものはすべて、軍事組織または銀行でない限り問題ありません。その場合、ここに投稿するのをやめて、セキュリティ専門家を雇ってください!