openssl密码套件解释
Openssl cipher suite explanation
我想对 fips 模式下的 openssl 使用密码套件 TLS1_TXT_ECDHE_RSA_WITH_AES_256_CBC_SHA,我不想知道这方面的详细信息。
查看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 进行密钥交换。我的问题是它使用什么椭圆曲线以及密钥大小是多少?我计划使用 RSA 4096。
编辑
查看 openssl 源代码,在文件 t1_lib.c
中,我看到提到了套件 B,但这是针对 GCM 模式的,因此如果我对 CBC 使用 prime256v1 或 secp384r1,这些素数也应该是 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;
}
如果你是客户端,ECDHE_{RSA,ECDSA}密钥交换必须使用服务器选择的'curve',而OpenSSL就是这样做的; DHE 同样使用服务器参数。 (在 1.1.1 版的 draft1.3 协议 expected/planned 中有所修改。)如果您是服务器,OpenSSL 有几种不同的方式来选择 'curve',具体取决于您没有向我们展示的代码:
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 and file-based 设置 tmp_ecdh
] 配置选项以及直接代码。
在 SUITEB 模式下,它与 'FIPS' 模式(即 FIPS-140)不同,但通常需要受制于整个 FIPS 和其他 NIST 'guidance',唯一支持的曲线是 P-256 and/or P-384,具体取决于选项集。
(从技术上讲,我们松散地称呼 EC 密码学的 'curve' 实际上是一条具有合适特征的曲线,由基础场上的方程系数定义,加上基点又名生成器,加上点顺序和余因子。细心或准确的人,如密码学家,称其为参数集或 EC 组而不是曲线。OpenSSL 将其实现为 typedef EC_GROUP
。)
TLS 将 public 密钥表示为 X9.62(和 SEC1)未压缩(通常)或可选压缩(罕见)格式中的一个点,这两种格式都具有固定大小,具体取决于底层文件的大小领域。
我想对 fips 模式下的 openssl 使用密码套件 TLS1_TXT_ECDHE_RSA_WITH_AES_256_CBC_SHA,我不想知道这方面的详细信息。
查看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 进行密钥交换。我的问题是它使用什么椭圆曲线以及密钥大小是多少?我计划使用 RSA 4096。
编辑
查看 openssl 源代码,在文件 t1_lib.c
中,我看到提到了套件 B,但这是针对 GCM 模式的,因此如果我对 CBC 使用 prime256v1 或 secp384r1,这些素数也应该是 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;
}
如果你是客户端,ECDHE_{RSA,ECDSA}密钥交换必须使用服务器选择的'curve',而OpenSSL就是这样做的; DHE 同样使用服务器参数。 (在 1.1.1 版的 draft1.3 协议 expected/planned 中有所修改。)如果您是服务器,OpenSSL 有几种不同的方式来选择 'curve',具体取决于您没有向我们展示的代码:
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 and file-based 设置tmp_ecdh
] 配置选项以及直接代码。
在 SUITEB 模式下,它与 'FIPS' 模式(即 FIPS-140)不同,但通常需要受制于整个 FIPS 和其他 NIST 'guidance',唯一支持的曲线是 P-256 and/or P-384,具体取决于选项集。
(从技术上讲,我们松散地称呼 EC 密码学的 'curve' 实际上是一条具有合适特征的曲线,由基础场上的方程系数定义,加上基点又名生成器,加上点顺序和余因子。细心或准确的人,如密码学家,称其为参数集或 EC 组而不是曲线。OpenSSL 将其实现为 typedef EC_GROUP
。)
TLS 将 public 密钥表示为 X9.62(和 SEC1)未压缩(通常)或可选压缩(罕见)格式中的一个点,这两种格式都具有固定大小,具体取决于底层文件的大小领域。