我想在fips模式下使用密码套件 TLS1_TXT_ECDHE_RSA_WITH_AES_256_CBC_SHA 进行openssl,我不想知道这方面的细节。
查看openssl 1.0.2k中的源代码,我看到它有参数s3_lib.c
:
/* Cipher C014 */
{
1,
TLS1_TXT_ECDHE_RSA_WITH_AES_256_CBC_SHA,
TLS1_CK_ECDHE_RSA_WITH_AES_256_CBC_SHA,
SSL_kEECDH,
SSL_aRSA,
SSL_AES256,
SSL_SHA1,
SSL_TLSV1,
SSL_NOT_EXP | SSL_HIGH | SSL_FIPS,
SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
256,
256,
},
我不明白的是它使用SSL_kEECDH进行密钥交换。我的问题是它使用的eliptic曲线和密钥大小是多少?我计划使用RSA 4096。
修改
查看openssl源代码,在文件t1_lib.c
中,我看到套件B提到,但这是针对GCM模式的,所以如果我使用prime256v1或secp384r1进行CBC,这些素数也应该是FIPS 140-2批准的?
if (tls1_suiteb(s)) {
/*
* For Suite B ciphersuite determines curve: we already know
* these are acceptable due to previous checks.
*/
unsigned long cid = s->s3->tmp.new_cipher->id;
if (cid == TLS1_CK_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256)
return NID_X9_62_prime256v1; /* P-256 */
if (cid == TLS1_CK_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384)
return NID_secp384r1; /* P-384 */
/* Should never happen */
return NID_undef;
}
答案 0 :(得分:2)
如果您是客户,ECDHE_ {RSA,ECDSA}密钥交换必须使用'曲线'由服务器选择,OpenSSL这样做; DHE同样使用服务器参数。 (在版本1.1.1中预期/计划的draft1.3协议中略有修改。)如果您是服务器,OpenSSL有几种不同的方式来选择曲线'取决于您没有向我们展示的代码:
1.0.x支持SSL_{CTX_,}set_tmp_ecdh
和SSL_{CTX_,}set_tmp_ecdh_callback
,它们没有手册页,但与_dh
版本等效。
1.0.2添加了SSL_{CTX_,}set_ecdh_auto
,它设置了一种自动选择' first' (根据客户端或服务器列表,使用与密码组件首选项相同的选项)客户端和服务器都可接受的曲线
1.1.0使ecdh_auto
成为默认设置,不再支持tmp_ecdh_callback
选项,但允许使用新text-based和{{tmp_ecdh
设置EC_GROUP
3}}配置选项以及直接代码。
在SUITEB模式中,(IIUC)与' FIPS'不同。模式(意味着FIPS-140),但对于受FIPS和其他NIST指南影响的相同用户而言,通常需要这些模式,唯一支持的曲线是P-256和/或P- 384取决于选项集。
(从技术上讲,我们松散地称之为“EC密码术”的曲线实际上是一条具有合适特征的曲线,由基础场上方程的系数定义,加上一个基点即发电机,加上该点与密码学家一样,细心或准确的人称之为参数集或EC组而不是曲线.OpenSSL将其实现为typedef MSH-9
。)
TLS将公钥表示为X9.62(和SEC1)未压缩(通常)或可选压缩(稀有)格式中的一个点,两者都具有固定大小,具体取决于基础字段的大小。