密码套件的构成如下图所示:
文章插图
密码套件结构
密码套件决定了本次连接采用哪一种加密算法、密钥协商算法、HMAC算法,协商的结果就是双方都认可的密码套件 。
密码套件协商过程有点类似于客户采购物品的过程,客户(客户端)在向商家(服务器端)买东西之前需要告知商家自己的需求、预算,商家了解用户的需求后,根据用户的具体情况(比如客户愿意接受的价格,客户期望物品的使用年限)给用户推荐商品,只有双方都满意了,交易才能完成 。对于TLS/SSL协议来说,只有协商出密码套件,才能进行下一步的工作 。
除了现有国际上标准的密码套件,国密还定义了一系列的密码套件:
文章插图
国密密码套件列表
代码可以参考 gmtls.h 文件,也可以使用GMSSL的命令查看所支持的密码套件:
openssl ciphers -V | column -t
与国密相关的密码套件有:0xE1,0x07-ECDHE-SM2-WITH-SMS4-GCM-SM3TLSv1.2Kx=ECDHAu=SM2Enc=SMS4GCM(128)Mac=AEAD0xE1,0x02-ECDHE-SM2-WITH-SMS4-SM3TLSv1.2Kx=ECDHAu=SM2Enc=SMS4(128)Mac=SM30xF1,0x20-ECDHE-PSK-WITH-SMS4-CBC-SM3TLSv1Kx=ECDHEPSKAu=PSKEnc=SMS4(128)Mac=SM30xE0,0x17-SM9-WITH-SMS4-SM3GMTLSv1.1Kx=SM9Au=SM9Enc=SMS4(128)Mac=SM30xE0,0x15-SM9DHE-WITH-SMS4-SM3GMTLSv1.1Kx=SM9DHEAu=SM9Enc=SMS4(128)Mac=SM30xE0,0x13-SM2-WITH-SMS4-SM3GMTLSv1.1Kx=SM2Au=SM2Enc=SMS4(128)Mac=SM30xE0,0x11-SM2DHE-WITH-SMS4-SM3GMTLSv1.1Kx=SM2DHEAu=SM2Enc=SMS4(128)Mac=SM30xE0,0x1A-RSA-WITH-SMS4-SHA1GMTLSv1.1Kx=RSAAu=RSAEnc=SMS4(128)Mac=SHA10xE0,0x19-RSA-WITH-SMS4-SM3GMTLSv1.1Kx=RSAAu=RSAEnc=SMS4(128)Mac=SM30xF1,0x01-PSK-WITH-SMS4-CBC-SM3SSLv3Kx=PSKAu=PSKEnc=SMS4(128)Mac=SM3
- 第一列:数值代表密码套件的编号,每个密码套件的编号由IANA定义 。
- 第二列:代表密码套件的名称,虽然密码套件编号是一致的,不同的TLS/SSL协议实现其使用的名称可能是不一样的 。
- 第三列:表示该密码套件适用于哪个TLS/SSL版本的协议 。
- 第四列:表示密钥协商算法 。
- 第五列:表示身份验证算法 。
- 第六列:表示加密算法、加密模式、密钥长度 。
- 第七列:表示HMAC算法 。其中AEAD表示采用的是AEAD加密模式(比如AES128-GCM),无须HMAC算法 。
可以看出,GmSSL并没有实现所有的国密的密码套件,但同时又扩充了几个标准未定义的密码套件,比如ECDHE-SM2-WITH-SMS4-GCM-SM3、ECDHE-SM2-WITH-SMS4-SM3等 。这就体现出协商的重要性了,对双方所支持的密码套件取一个交集,从中选择一个 。如果不存在交集,协商也就不成功 。注意,协商过程中服务器端可能会禁用一些不太安全的密码套件(比如历史遗留的一些现今已不太安全的算法),这时即使双方都支持,也可能协商不成功 。
我们可以测试服务器是否支持某个特定的密码套件:
openssl s_client -cipher "ECDHE-SM2-WITH-SMS4-SM3" -connect sm2test.ovssl.cn:443 -tls1_2 -servername sm2test.ovssl.cn
当然,如何协商出密码套件,涉及到SSL通信协议细节,如果开发中涉及到,就需要翻阅相应的RFC,这里不做过多展开 。小结本文简单介绍了OID和密码套件的概念,这对于理解SSL通信有很重要的帮助,如果从事SSL开发,开始面对一大堆的协议和标准,可能会懵圈,希望本文能给你一个探索国密的入口通道 。在和第三方服务进行对接时,由于对这些概念理解不深,也是掉了很多坑,希望本文对你有所帮助 。
作者:陈正勇
来源:微信公众号: 云水木石
出处:https://mp.weixin.qq.com/s/t82z0uKW2AZjtPop79wjvg
推荐阅读
- 详解 Linux 虚拟机的网络通信原理
- LPWAN 低功耗广域网技术 - Wize简介
- 数据通信 交换机原理
- 什么是NFC?近场通信用途,芯片,标签和阅读器介绍
- 串口通信RS232的基本接法,原来这么简单,今天终于弄明白了
- 数据通信 路由器原理
- 通信运营商|第四大运营商来了!中国广电经营范围新增5G通信
- 进程间的五种通信方式介绍
- 制作自己的SSL证书
- 通信行程卡可以精确到什么位置 行程卡能定位到区吗