密码套件
命名为认证,加密和消息认证码算法的组合
此条目翻译自其他语言维基百科,需要相关领域的编者协助校对翻译。 |
密码套件(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)不允许使用。
编程参考
在编程层面,密码套件被引用为:
参考资料
- ^ 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