Cipher Suites

简介

Cipher Suite 在 TLS 中用来指定整个通信过程中所使用的加密相关的参数, 包括如何协商加密得到加密所用的密钥,以及签名使用的算法和哈希算法。

主要涉及到下面几个方面:

  • Key exchange (Key 交换算法)
  • Bulk encryption (批量加密)
  • Message authentication (消息认证)
  • Authentication

Key 交换算法 用户交换一个叫做 Shared key 的私钥。 这里主要使用非对称加密算法(asymmetric key algorithm). 这个key 将作为种子,用来生成多个密钥,生成的密钥将用于保护不同的数据。

因为非堆成加密的特性,它只被用来加密少量的数据。 大量数据的情况下,性能会很低,因此不用它来做大数据量的加密操作。

Bulk encryption 用来加密客户端和服务器的通信数据。 不同与非对称加密算法, 这些算法可以用来进行大量数据的加密,而且性能比非对称加密算法强很多。

Message authentication 算法用来生成 消息的哈希,签名等,用来确保消息的完整性。


TLS 中如何协商 Cipher Suite?


TLS 协议中通过 ClientHelloSeverHello 两个包来协商当前链接将要使用的 CipherSuite.

客户端将自己支持的所有 Cipher Suite 的列表,放入 ClientHello 中,发送给服务器端。

服务器端收到 ClientHello 后,从中选择自己也支持的 CipherSuite,然后将选中的结果放在 ServerHello 中发送给客户端。

CipherSuite 列表中,放在最前面的值是客户端最想要的值。

示例


// ClientHello
Transport Layer Security
    TLSv1.2 Record Layer: Handshake Protocol: Client Hello
        Content Type: Handshake (22)
        ...
        Handshake Protocol: Client Hello
            Handshake Type: Client Hello (1)
            ...
            Cipher Suites (18 suites)
                Cipher Suite: TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256 (0xc02b)
                Cipher Suite: TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (0xc02f)
                Cipher Suite: TLS_DHE_RSA_WITH_AES_128_GCM_SHA256 (0x009e)
                Cipher Suite: TLS_RSA_WITH_AES_128_GCM_SHA256 (0x009c)
                Cipher Suite: TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA (0xc00a)
                Cipher Suite: TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA (0xc014)
                Cipher Suite: TLS_DHE_RSA_WITH_AES_256_CBC_SHA (0x0039)
                Cipher Suite: TLS_RSA_WITH_AES_256_CBC_SHA (0x0035)
                Cipher Suite: TLS_ECDHE_ECDSA_WITH_RC4_128_SHA (0xc007)
                Cipher Suite: TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA (0xc009)
                Cipher Suite: TLS_ECDHE_RSA_WITH_RC4_128_SHA (0xc011)
                Cipher Suite: TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA (0xc013)
                Cipher Suite: TLS_DHE_RSA_WITH_AES_128_CBC_SHA (0x0033)
                Cipher Suite: TLS_DHE_DSS_WITH_AES_128_CBC_SHA (0x0032)
                Cipher Suite: TLS_RSA_WITH_RC4_128_SHA (0x0005)
                Cipher Suite: TLS_RSA_WITH_RC4_128_MD5 (0x0004)
                Cipher Suite: TLS_RSA_WITH_AES_128_CBC_SHA (0x002f)
                Cipher Suite: TLS_RSA_WITH_3DES_EDE_CBC_SHA (0x000a)
            Compression Methods Length: 1
            Compression Methods (1 method)
            ...
// ServerHello
Transport Layer Security
    TLSv1.2 Record Layer: Handshake Protocol: Server Hello
        Content Type: Handshake (22)
        Version: TLS 1.2 (0x0303)
        Length: 81
        Handshake Protocol: Server Hello
            Handshake Type: Server Hello (2)
            Length: 77
            Version: TLS 1.2 (0x0303)
            Random: 8566d75a1...
            Session ID Length: 32
            Session ID: 51ff379f32....
            Cipher Suite: TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (0xc02f)
            Compression Method: null (0)
            Extensions Length: 5
            Extension: renegotiation_info (len=1)
            ....

Cipher Suites 示例:


截止 TLS1.2, 已经有特别多的 CipherSuite 可供选择了。 这里,我们列举一些作为例子:

TLS_RSA_WITH_NULL_SHA256

Key Exchange: Rivest Shamir Adleman algorithm (RSA)

Authentication: Rivest Shamir Adleman algorithm (RSA)

Encryption: NULL Encryption (NULL)

Hash: Secure Hash Algorithm 256 (SHA256)

TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA

Key Exchange: Elliptic Curve Diffie-Hellman Ephemeral (ECDHE)

Authentication: Rivest Shamir Adleman algorithm (RSA)

Encryption: Advanced Encryption Standard with 128bit key in Cipher Block Chaining mode (AES 128 CBC)

Hash: Secure Hash Algorithm 1 (SHA)

TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384

Key Exchange: Elliptic Curve Diffie-Hellman Ephemeral (ECDHE)

Authentication: Elliptic Curve Digital Signature Algorithm (ECDSA)

Encryption: Advanced Encryption Standard with 256bit key in Cipher Block Chaining mode (AES 256 CBC)

Hash: Secure Hash Algorithm 384 (SHA384)

TLS_AES_256_GCM_SHA384

Key Exchange: —

Authentication: —-

Encryption: Advanced Encryption Standard with 256bit key in Galois/Counter mode (AES 256 GCM)

Hash: Secure Hash Algorithm 384 (SHA384)

TLS_DHE_RSA_WITH_AES_256_CBC_SHA

Key Exchange: Diffie-Hellman Ephemeral (DHE)

Authentication: Rivest Shamir Adleman algorithm (RSA)

Encryption: Advanced Encryption Standard with 256bit key in Cipher Block Chaining mode (AES 256 CBC)

Hash: Secure Hash Algorithm 1 (SHA)

TLS_DHE_DSS_WITH_AES_256_CBC_SHA

Key Exchange: Diffie-Hellman Ephemeral (DHE)

Authentication: Digital Signature Standard (DSS)

Encryption: Advanced Encryption Standard with 256bit key in Cipher Block Chaining mode (AES 256 CBC)

Hash: Secure Hash Algorithm 1 (SHA)

TLS_DH_anon_EXPORT_WITH_DES40_CBC_SHA

Key Exchange: Diffie-Hellman (DH)

Authentication: Anonymous (anon)

Encryption: Data Encryption Standard with 40bit key in Cipher Block Chaining mode (DES40 CBC)

Hash: Secure Hash Algorithm 1 (SHA)

TLS_ECDH_ECDSA_WITH_ARIA_128_CBC_SHA256

Key Exchange: Elliptic Curve Diffie-Hellman (ECDH)

Authentication: Elliptic Curve Digital Signature Algorithm (ECDSA)

Encryption: ARIA with 128bit key in Cipher Block Chaining mode (ARIA 128 CBC)

Hash: Secure Hash Algorithm 256 (SHA256)


Comments

Leave a Reply

Your email address will not be published. Required fields are marked *