密码套件
此条目翻译自其他语言维基百科,需要相关领域的编者协助校对翻译。 |
密码套件(Cipher suite)是传输层安全(TLS)/安全套接字层(SSL)网络协议中的一个概念。在TLS 1.3之前,密码套件的名称是以协商安全设置时使用的身份验证、加密、讯息鉴别码(MAC)和密钥交换算法组成。TLS 1.3仅能使用AEAD密码套件。[1]
密码套件概念的结构和使用在定义协议的文档中被定义。[2]TLS密码套件注册表(TLS Cipher Suite Registry)中提供了密码套件命名的参考表。[3]
使用
在建立一个TLS连接后,一次也称TLS握手协议的握手发生。在这个握手,一条ClientHello和一条ServerHello消息被发出。[4]首先,客户端按照偏好的顺序发送它支持的密码套件的列表。然后服务器回复它从客户端的列表中选择的密码套件。[5]要测试服务器支持的TLS密码套件,可以使用SSL/TLS扫描器软件。
详细描述
TLS1.0至TLS1.2
每个密码套件的名称(例如TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256)定义一个密钥交换算法、一个批量加密算法、一个讯息鉴别码(MAC)算法。[5][6][7]
- 密钥交换算法,例如ECDHE_RSA,用于决定客户端与服务器之间在握手时如何身份验证。[8]
- 批量加密算法,例如AES_128_GCM,用于加密消息流。[9]
- 消息认证码算法,例如SHA256,用于创建密码杂凑函数,消息流每个数据块的加密散列。[9]
- 伪随机函数,例如TLS 1.2的伪随机函数使用MAC算法的散列函数来创建一个主密钥——连接双方共享的一个48字节的私钥。主密钥在创建会话密钥(例如创建MAC)时作为一个熵来源。[10]
算法示例
- 密钥交换/协商
- RSA、Diffie–Hellman、DHE、ECDH、ECDHE、SRP、PSK
- 身份验证
- RSA、DSA、ECDSA
- 块密码/流密码
- AES、Camellia、IDEA、ChaCha20、3DES、DES、RC4。在旧版本的SSL中,RC2也被使用过。
- 消息验证
- 对于TLS来说,讯息鉴别码使用SHA或MD5散列算法。对于SSL,则SHA、MD5、MD4及MD2都可使用。
TLS 1.3
在TLS 1.3中,密码套件表示一个带关联数据的加密认证加密算法和一个讯息鉴别码。[1]例如,TLS_AES_128_GCM_SHA256。非AEAD加密算法(诸如AES_128_CBC)不允许使用。
密钥交换和身份验证则另外协商,如X25519、RSA、ECDSA。
编程参考
在编程层面,密码套件被引用为:
- CipherSuite cipher_suites
- 客户端支持的加密选项的列表[11]
- CipherSuite cipher_suite
- 服务器从客户端的cipher_suites以及相关ServerHello消息中选定的加密套件[12]
参考资料
- ^ 1.0 1.1 E. Rescorla. The Transport Layer Security (TLS) Protocol Version 1.3. November 4, 2016 [2016-11-11]. (原始内容存档于2016-01-04). 引用错误:带有name属性“tls13cipher”的
<ref>
标签用不同内容定义了多次 - ^ RFC 5246
- ^ TLS Cipher Suite Registry. [2016-12-24]. (原始内容存档于2016-12-21).
- ^ RFC 5246, p. 37
- ^ 5.0 5.1 RFC 5246, p. 40
- ^ CipherSuites and CipherSpecs. IBM. [20 November 2009].
- ^ Cipher Suites in Schannel. Microsoft MSDN. [20 November 2009]. (原始内容存档于2016-04-23).
- ^ RFC 5246, p. 47
- ^ 9.0 9.1 RFC 5246, p. 17
- ^ RFC 5246, p. 16-17, 26
- ^ RFC 5246, p. 41
- ^ RFC 5246, p. 42-43, 64