密码套件

密码套件（Cipher suite）是傳輸層安全（TLS）/安全套接字层（SSL）网络协议中的一个概念。在TLS 1.3之前，密码套件的名称是以协商安全设置时使用的身份验证、加密、訊息鑑別碼（MAC）和密钥交换算法组成。TLS 1.3僅能使用AEAD密碼套件。

密码套件概念的结构和使用在定义协议的文档中被定义。RFC 5246TLS密码套件注册表（TLS Cipher Suite Registry）中提供了密码套件命名的参考表。

 使用 
在建立一个TLS连接后，一次也称TLS握手协议的握手发生。在这个握手，一条ClientHello和一条ServerHello消息被发出。RFC 5246, p. 37首先，客户端按照偏好的顺序发送它支持的密码套件的列表。然后服务器回复它从客户端的列表中选择的密码套件。RFC 5246, p. 40要测试服务器支持的TLS密码套件，可以使用SSL/TLS扫描器软件。

 详细描述 

 TLS1.0至TLS1.2 
每个密码套件的名称（例如TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256）定义一个密钥交换算法、一个批量加密算法、一个訊息鑑別碼（MAC）算法。RFC 5246, p. 40
 密钥交换算法，例如ECDHE_RSA，用于决定客户端与服务器之间在握手时如何身份验证。RFC 5246, p. 47
 批量加密算法，例如AES_128_GCM，用于加密消息流。RFC 5246, p. 17
 消息认证码算法，例如SHA256，用于创建密碼雜湊函數，消息流每个数据块的加密散列。RFC 5246, p. 17
 伪随机函数，例如TLS 1.2的伪随机函数使用MAC算法的散列函数来创建一个主密钥——连接双方共享的一个48字节的私钥。主密钥在创建会话密钥（例如创建MAC）时作为一个熵来源。RFC 5246, p. 16-17, 26

 算法示例 
 密钥交换/协商
 RSA、Diffie–Hellman、DHE、ECDH、ECDHE、、PSK
 身份验证
 RSA、DSA、ECDSA
 块密码/流密碼
 AES、Camellia、IDEA、ChaCha20、3DES、DES、RC4。在旧版本的SSL中，也被使用过。
 消息验证
 对于TLS来说，訊息鑑別碼使用SHA或MD5散列算法。对于SSL，则SHA、MD5、MD4及MD2都可使用。

 TLS 1.3 
在TLS 1.3中，密码套件表示一個带关联数据的加密认证加密算法和一个訊息鑒別碼。例如，TLS_AES_128_GCM_SHA256。非AEAD加密算法（诸如AES_128_CBC）不允许使用。

密钥交换和身份驗證則另外协商，如X25519、RSA、ECDSA。

 编程参考 
在编程层面，密码套件被引用为：
 CipherSuite cipher_suites
 客户端支持的加密选项的列表RFC 5246, p. 41
 CipherSuite cipher_suite
 服务器从客户端的cipher_suites以及相关ServerHello消息中选定的加密套件RFC 5246, p. 42-43, 64

 参考资料 

Category:保密通信
Category:傳輸層安全協議