Openssl密码套件解释

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Openssl密码套件解释相关的知识,希望对你有一定的参考价值。

我想在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;
    }
答案

如果您是客户端,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,它设置一个模式,自动选择“第一个”(根据客户端或服务器列表,使用与密码组件首选项相同的选项),客户端和服务器都可接受的曲线
  • 1.1.0使ecdh_auto成为默认值,不再支持tmp_ecdh_callback选项,但允许使用新的tmp_ecdhtext-based配置选项以及直接代码设置file-based

在SUITEB模式中,(IIUC)与“FIPS”模式(意味着FIPS-140)不同,但对于受到整个FIPS和其他NIST“指导”限制的相同用户来说,经常需要只有支持的曲线是P-256和/或P-384,具体取决于选项集。

(从技术上讲,我们称之为EC密码术的'曲线'实际上是一条具有适当特征的曲线,由基础场上方程的系数定义,加上一个基点即发电机,加上点顺序和辅助因子。小心或准确的人和密码学家一样,将其称为参数集或EC组而不是曲线.OpenSSL将其实现为typedef EC_GROUP。)

TLS将公钥表示为X9.62(和SEC1)未压缩(通常)或可选压缩(稀有)格式中的一个点,两者都具有固定大小,具体取决于底层字段的大小。

以上是关于Openssl密码套件解释的主要内容,如果未能解决你的问题,请参考以下文章

使用 Openssl s_server 限制密码套件选择

OpenSSL 1.1.1 PSK TLS1.3 - TLS_256_GCM_SHA384 密码套件没有合适的签名算法错误

使用 openssl 生成证书

使用 openssl 生成证书

使用OpenSSL创建CA和申请证书

如何使用BASH命令解密PHP Openssl加密