密码套件

本页使用了标题或全文手工转换
维基百科,自由的百科全书

密码套件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]

算法示例[编辑]

密钥交换/协商
RSADiffie–HellmanDHEECDHECDHESRP英语Secure Remote Password protocolPSK英语Pre-shared key
身份验证
RSADSAECDSA
块密码/流密码
AESCamelliaIDEAChaCha203DESDESRC4。在旧版本的SSL中,RC2英语RC2也被使用过。
消息验证
对于TLS来说,消息认证码使用SHAMD5散列算法。对于SSL,则SHA、MD5MD4MD2都可使用。

TLS 1.3[编辑]

在TLS 1.3中,密码套件表示一个带关联数据的加密认证加密算法和一个消息鉴别码[1]例如,TLS_AES_128_GCM_SHA256。非AEAD加密算法(诸如AES_128_CBC)不允许使用。

密钥交换身份验证则另外协商,如X25519RSAECDSA

编程参考[编辑]

在编程层面,密码套件被引用为:

CipherSuite cipher_suites
客户端支持的加密选项的列表[11]
CipherSuite cipher_suite
伺服器从客户端的cipher_suites以及相关ServerHello消息中选定的加密包[12]

参考资料[编辑]

  1. ^ 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>标签用不同内容定义了多次
  2. ^ RFC 5246
  3. ^ TLS Cipher Suite Registry. [2016-12-24]. (原始内容存档于2016-12-21). 
  4. ^ RFC 5246, p. 37
  5. ^ 5.0 5.1 RFC 5246, p. 40
  6. ^ CipherSuites and CipherSpecs. IBM. [20 November 2009]. 
  7. ^ Cipher Suites in Schannel. Microsoft MSDN. [20 November 2009]. (原始内容存档于2016-04-23). 
  8. ^ RFC 5246, p. 47
  9. ^ 9.0 9.1 RFC 5246, p. 17
  10. ^ RFC 5246, p. 16-17, 26
  11. ^ RFC 5246, p. 41
  12. ^ RFC 5246, p. 42-43, 64