我想使用密码套件TLS1_TXT_ECDHE_rsau和_AES_256_CBC_SHA,在fips模式下用于openssl,我不知道详细信息。
查看openssl 1.0.2k中的源代码,我发现它有以下参数:

  /* 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源代码,在文件s3_lib.c中,我看到suite B提到了,但是这是GCM模式的,所以如果我使用prime256v1或secp384r1进行CBC,那么这些prime也应该得到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}密钥交换必须使用服务器选择的“曲线”,OpenSSL也必须这样做;DHE同样使用服务器参数。(在1.1.1版的draft1.3协议中进行了一些修改)如果您是服务器,OpenSSL有几种不同的方式选择“曲线”,具体取决于您没有向我们显示的代码:
1.0.x支持SSL_{CTX_,}set_tmp_ecdhSSL_{CTX_,}set_tmp_ecdh_callback两个版本,它们没有手册页,但与_dh版本的工作方式相同。
1.0.2添加SSL_{CTX_,}set_ecdh_auto以设置一种模式,该模式自动选择客户机和服务器都可以接受的“第一”(根据客户机或服务器列表,使用与ciphersuite首选项相同的选项)
1.1.0将ecdh_auto设为默认值,不再支持tmp_ecdh_callback选项,但允许使用新的text-basedfile-based配置选项以及直接代码设置tmp_ecdh
在SUITEB模式(IIUC)中,它与“FIPS”模式(即FIPS-140)不同,但对于受全范围FIPS和其他NIST“指导”约束的同一用户来说,通常是必需的,唯一受支持的曲线是P-256和/或P-384,具体取决于选项集。
(技术上,我们松散地称之为EC密码学的‘曲线’实际上是一条具有适当特征的曲线,由基础场上方程的系数定义,加上基点aka生成器,再加上点序和辅助因子。谨慎或准确的人,如密码学家,称之为参数集或EC组,而不是曲线。OpenSSL将其实现为typedefEC_GROUP
TLS将公钥表示为X9.62(和SEC1)未压缩(通常)或可选压缩(罕见)格式中的一个点,这两种格式都有固定的大小,具体取决于基础字段的大小。

关于c - OpenSSL密码套件说明,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/50922626/

10-11 23:06
查看更多