文章总结: 本文档详细介绍了TLCP协议(GB/T38636-2020)流量包验签解密过程,使用密码套件ECCSM4CBC_SM3。核心内容包括SM2签名验签、密钥派生、SM4-CBC逐条解密及HMAC-SM3完整性校验,并基于openHiTLS实现的encrypt-then-MAC格式进行实际数据包分析。文档提供了完整的十六进制数据和算法步骤,为TLCP协议安全分析提供了可操作的参考。 综合评分: 88 文章分类: 漏洞分析,渗透测试,安全工具,技术标准,其他
TLCP(ECC_SM4_CBC_SM3)流量包验签解密
原创
利刃信安 利刃信安
利刃信安
2026年7月10日 00:30 北京
在小说阅读器读本章
去阅读
TLCP(ECC_SM4_CBC_SM3)
流量包验签解密
TLCP协议 · SM2验签 · SM4-CBC解密 · HMAC-SM3完整性校验
密码学实战分析
GB/T 38636EtM
PCAP 文件: testopenhitls.pcap
分析工具: TLCP 协议双向身份鉴别签名验签分析工具
参考标准:
GB/T 38636-2020 信息安全技术 传输层密码协议(TLCP)
GM/T 0009-2023 SM2密码算法使用规范
GB/T 32918 信息安全技术 SM2椭圆曲线公钥密码算法
GB/T 32905-2016 信息安全技术 SM3密码杂凑算法
GB/T 32907-2016 信息安全技术 SM4分组密码算法
RFC 7366: Encrypt-then-MAC for TLS and DTLS
01
PART
协议概览
PROTOCOL OVERVIEW
| 属性 | 值 | | — | — | | 协议类型 | TLCP (GB/T 38636-2020) | | 鉴别类型 | 单向身份鉴别(仅客户端验证服务端) | | 密码套件 | 0xe013 — ECC_SM4_CBC_SM3 | | 密钥交换 | ECC 模式(SM2 公钥加密) | | 加密算法 | SM4-CBC(128-bit 分组密码,CBC 模式) | | 杂凑算法 | SM3(256-bit 密码杂凑) | | 签名算法 | SM2(SM2withSM3) | | HMAC 模式 | encrypt-then-MAC (EtM) (openHiTLS 实现,RFC 7366) | | 传输层 | TCP |
重要说明: 本数据包使用 encrypt-then-MAC (EtM) 格式(openHiTLS 实现,RFC 7366)。EtM 格式下,HMAC 对 seq + type + version + enc_len + (IV + 密文不含MAC) 计算,MAC 值在密文末尾。
密文结构:IV || SM4-CBC-Encrypt(content || padding_length(1B) || PKCS#7_padding) || MAC(32B)
其中 padding_length 计入 PKCS#7 填充输入,尾部 N+1 字节全部为 0xN(标准 PKCS#7 尾部特征)。
02
PART
TLCP 握手流程
HANDSHAKE PROCESS
…flow
Client Server
| |
|— ClientHello ———–> | [1] 客户端发起握手
| |
| <——— ServerHello — | [2] 服务端返回配置
| <——— Certificate — | [3] 服务端双证书
| <— ServerKeyExchange — | [4] 服务端密钥交换 + SM2 签名
| <— ServerHelloDone —– | [5] 服务端握手完成
| |
|— ClientKeyExchange ——> | [6] 客户端加密预主密钥(SM2 加密)
|— [ChangeCipherSpec] —–> | [7] 客户端切换加密
|— Finished (encrypted) —> | [8] 客户端 Finished(SM4-CBC 加密)
| <— [ChangeCipherSpec] — | [9] 服务端切换加密
| <— Finished (encrypted)– | [10] 服务端 Finished(SM4-CBC 加密)
| |
|— AppData (encrypted) —-> | [11] 客户端加密应用数据
| <— AppData (encrypted)– | [12] 服务端加密应用数据
03
PART
SM2 签名验签过程
SM2 SIGNATURE VERIFICATION
3.1 随机数
…
客户端随机数: 36ae002fb0de40f71908d47dd9368bb2ab913fe65626cfcef840729649f0bb60
服务端随机数: fc0708c8efda798a0c105eb3473ce743488b771b192ca09ae2e38230dc7315bb
3.2 服务端证书
…
签名公钥 (SM2 非压缩格式 04||X||Y):
X: 0x427ddad816c64e7b8ba8f2becef45b70583a8461a5c0821c7ce6addc8b9bb16f
Y: 0x57b247cc22b2a722fa0aedaedbd769eca01d1cb908cb79b552c3c72394d52d19
加密证书长度: 461 字节
加密公钥 (SM2 非压缩格式 04||X||Y):
X: 0x0f5a670552a8a9daaa513c5f44b3b952bda87b5867f79fc5963337c5b9e5708c
Y: 0xac919cbfe2827200a92114cfd83aa523f83966652828c364f506bfaba145bd3a
3.3 签名值
…
R: 0x00e7046256e82f251afb62a4c765ed82a9d6cb606075f73490177b3ed60fab56
S: 0x2032e652691ebe43abab651aeb5035ceb25c82fbdc144e02517f1ba30f8dea43
3.4 签名源数据
…
M = client_random(32B) + server_random(32B) + enc_cert_len(3B) + enc_cert
= 32 + 32 + 3 + 461 = 528 字节
3.5-3.7 SM2 验签
…
Z = 4eca37339861ee58715517d3bca4445cb446f634f224291e7506d1756741f690
e = 970e105e1081d8511343edf720bc9047789b33fef483ef44cfe514645fa1e49d
B1-B6: ✅
验签结果: ✅ 成功
04
PART
密钥派生过程
KEY DERIVATION
4.1 密钥派生层次
…
预主密钥 (Pre-Master Secret, 48 字节)
↓ PRF(PMS, “master secret”, client_random + server_random) [HMAC-SM3]
主密钥 (Master Secret, 48 字节)
↓ PRF(MS, “key expansion”, server_random + client_random) [HMAC-SM3]
工作密钥 (Key Block, 128 字节 CBC 模式)
4.2 预主密钥解密
…
预主密钥 (48 字节):
010176151f9a20211297c90e78349793efdd6a568dedc1c8
e89f3239d9e1bc9898c7b36ecf7065078bded7cf3fb124f7
协议版本 (2B): 0101 — TLCP 1.1
4.3 主密钥派生
…
主密钥 (48 字节):
b09c1ba96abf977794e1867f536997caa60c65347ba347b7
ce66fbdbd2c9ce5e990ae363e70fac719cef73ef2829835f
4.4 工作密钥派生
…Key Block
CBC 模式 Key Block 布局 (128 字节):
┌──────────────────────────────┬──────────────────────────────────────────────────┐
│ 客户端 MAC 密钥 (32 字节) │ 2bf7205404bee51530d8e964f2d8591d │
│ │ e2c27106f03ee57b70abdb62fae9f312 │
├──────────────────────────────┼──────────────────────────────────────────────────┤
│ 服务端 MAC 密钥 (32 字节) │ cdc703cc3c9ac3646dbb4f10b397f6d1 │
│ │ 9bd883327fde142414a5856f50d2ba3c │
├──────────────────────────────┼──────────────────────────────────────────────────┤
│ 客户端写密钥 (16 字节) │ fe08ccd9294be53f5b5844682e5bbe07 │
├──────────────────────────────┼──────────────────────────────────────────────────┤
│ 服务端写密钥 (16 字节) │ 7574aba2770e67819886646545785701 │
├──────────────────────────────┼──────────────────────────────────────────────────┤
│ 客户端写 IV (16 字节) │ 7f8a1b7e477aa507159668f424005da7 │
├──────────────────────────────┼──────────────────────────────────────────────────┤
│ 服务端写 IV (16 字节) │ ce09b9c69401d81620f98ce8c5c164bf │
└──────────────────────────────┴──────────────────────────────────────────────────┘
05
PART
SM4-CBC 逐条解密过程
Encrypt-then-MAC
5.0 算法说明
…EtM Algorithm
SM4 分组密码参数:
-
分组长度: 128-bit (16 字节)
-
密钥长度: 128-bit (16 字节)
-
轮数: 32 轮 (加密: rk[0..31], 解密: rk[31..0])
CBC 解密公式: P_i = D_K(C_i) ⊕ C_{i-1} (C_0 = IV)
Encrypt-then-MAC (EtM) 格式 (openHiTLS, RFC 7366):
发送: IV || E(content+PKCS#7) || MAC(32B)
HMAC 计算公式:
MAC = HMAC-SM3(write_MAC_key,
seq_num(8B) + content_type(1B) + version(2B)
- enc_len(2B) + (IV + ciphertext))
5.1 记录 1:客户端 Handshake (Finished)
描述: 客户端发送 Finished 消息
(a) TLS 记录层头部
…
ContentType: 0x16 (Handshake)
Version: 0x0101 (TLCP 1.1)
Length: 80 字节
(b) 加密载荷 (80 字节)
…
IV: b981cce230fb5584bf202f46b72dbf5d
密文(含MAC):
a341d801c3eab67b5158ac7c620b9e61d34214735ed6549518e75c7a74ebb525
c5ec1713bd696f805d53274f6b1d30d54a2743bae971fe287f33bfa277937389
(c) EtM 密文结构
…
IV (16 字节): b981cce230fb5584bf202f46b72dbf5d
密文 (不含 MAC, 32 字节):
a341d801c3eab67b5158ac7c620b9e61d34214735ed6549518e75c7a74ebb525
MAC 值 (密文末尾 32 字节):
c5ec1713bd696f805d53274f6b1d30d54a2743bae971fe287f33bfa277937389
(d) SM4 解密密钥
…
方向: 客户端写密钥
密钥: fe08ccd9294be53f5b5844682e5bbe07
(e) SM4-CBC 分块解密过程(2 个分组)
…
分组 1/2:
输入密文块: a341d801c3eab67b5158ac7c620b9e61
SM4 解密后: ad81ccee283e6dc337e88048d7b200f4
XOR 前驱块: b981cce230fb5584bf202f46b72dbf5d
→ 明文块: 1400000c18c5384788c8af0e609fbfa9
分组 2/2:
输入密文块: d34214735ed6549518e75c7a74ebb525
SM4 解密后: ac4ed70ecce5b9745e57a3736d04916e
XOR 前驱块: a341d801c3eab67b5158ac7c620b9e61
→ 明文块: 0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f
(f) 解密结果(明文, 32 字节)
…
1400000c18c5384788c8af0e609fbfa90f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f
(g) EtM 明文结构解析
…
EtM 格式: [content][padding_length:1B][PKCS#7_padding:N B]
结构拆分:
① Content ( 16B): 偏移 0..15
1400000c18c5384788c8af0e609fbfa9
② padding_length ( 1B): 偏移 16
0x0f (= 15, PKCS#7 填充字节数)
③ PKCS#7_padding ( 15B): 偏移 17..31
0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f
验证: 16 + 1 + 15 = 32 ✅
(h) HMAC-SM3 EtM 验证
…
HMAC 密钥 (客户端write_MAC_key):
2bf7205404bee51530d8e964f2d8591de2c27106f03ee57b70abdb62fae9f312
HMAC 输入 (61 字节):
00000000000000001601010030b981cce230fb5584bf202f46b72dbf5da341d8
01c3eab67b5158ac7c620b9e61d34214735ed6549518e75c7a74ebb525
计算 MAC (32B):
c5ec1713bd696f805d53274f6b1d30d54a2743bae971fe287f33bfa277937389
验证结果: ✅ 成功 — 计算 MAC == 存储 MAC (HMAC=True)
(i) 明文内容
…
握手消息头 (4 字节): 1400000c
type=0x14 (Finished), len=0x00000c
→ Finished.verify_data = 18c5384788c8af0e609fbfa9
5.2 记录 2:服务端 Handshake (Finished)
描述: 服务端发送 Finished 消息
IV: 812008c85972de7e2b42d1198f178416
密钥: 7574aba2770e67819886646545785701 (服务端写密钥)
明文内容: verify_data = 9eda006c5c91067caf3d412b
HMAC 验证: ✅ 成功
5.3 记录 3:客户端 AppData
描述: 客户端发送应用数据 — hello world
IV: 00c9438c01c394aaa18f968c1d15656b
密钥: fe08ccd9294be53f5b5844682e5bbe07 (客户端写密钥)
明文内容: hello world
HMAC 验证: ✅ 成功
5.4 记录 4:服务端 AppData
描述: 服务端发送应用数据
IV: 71caefc38a51c2f04fcaef3761dfe16e
密钥: 7574aba2770e67819886646545785701 (服务端写密钥)
明文内容: HTTP/1.1 200 OKContent-Length: 12Hello World!
HMAC 验证: ✅ 成功
06
PART
结果汇总
RESULT SUMMARY
| 记录 | 方向 | 类型 | 密文 | HMAC | 明文内容 | | — | — | — | — | — | — | | 1 | 客户端 | Finished | 32B | ✅ | verify_data=18c5384788c8… | | 2 | 服务端 | Finished | 32B | ✅ | verify_data=9eda006c5c91… | | 3 | 客户端 | AppData | 16B | ✅ | hello world | | 4 | 服务端 | AppData | 64B | ✅ | HTTP/1.1 200 OK |
说明: 全部 4 条记录通过 EtM HMAC 验证。openHiTLS 使用 encrypt-then-MAC 格式,HMAC 对 seq+type+ver+enc_len+(IV+密文不含MAC) 计算。
07
PART
密码学算法总结
CRYPTOGRAPHY SUMMARY
| 密钥 | 长度 | 算法 | | — | — | — | | SM2 签名私钥 | 256-bit | SM2 | | SM2 加密私钥 | 256-bit | SM2 | | 预主密钥 | 48 字节 | 随机生成 | | 主密钥 | 48 字节 | PRF(HMAC-SM3) | | SM4 加密密钥 | 128-bit | SM4 | | SM4 CBC IV | 128-bit | 随机 | | SM3 MAC 密钥 | 256-bit | HMAC-SM3 |
08
PART
附录:SM2 曲线参数
SM2 CURVE PARAMETERS
…SM2 Curve
SM2 推荐曲线参数 (GB/T 32918):
p = FFFFFFFE FFFFFFFF FFFFFFFF FFFFFFFF
FFFFFFFF 00000000 FFFFFFFF FFFFFFFF
a = FFFFFFFE FFFFFFFF FFFFFFFF FFFFFFFF
FFFFFFFF 00000000 FFFFFFFF FFFFFFFC
b = 28E9FA9E 9D9F5E34 4D5A9E4B CF6509A7
F39789F5 15AB8F92 DDBCBD41 4D940E93
xG = 32C4AE2C 1F198119 5F990446 6A39C994
8FE30BBF F2660BE1 715A4589 334C74C7
yG = BC3736A2 F4F6779C 59BDCEE3 6B692153
D0A9877C C62A4740 02DF32E5 2139F0A0
n = FFFFFFFE FFFFFFFF FFFFFFFF FFFFFFFF
7203DF6B 21C6052B 53BBF409 39D54123
09
PART
HMAC-SM3 验证详解
INTEGRITY VERIFICATION
9.1 本数据包使用的格式:encrypt-then-MAC (EtM)
本数据包使用 encrypt-then-MAC (EtM) 格式,符合 RFC 7366 标准(openHiTLS 实现)。
…EtM Process
EtM 加密流程:
-
明文 = content || padding_length(1B) || PKCS#7_padding
-
密文 = SM4-CBC-Encrypt(明文)
-
MAC = HMAC-SM3(write_MAC_key,
seq(8B) + type(1B) + version(2B)
- enc_len(2B) + (IV + ciphertext))
- 发送: IV || ciphertext || MAC
9.2 本数据包 HMAC 验证结果
| 记录 | 方向 | Seq | Type | HMAC | | — | — | — | — | — | | 1 | 客户端 | 0 | 16 | ✅ 成功 | | 2 | 服务端 | 0 | 16 | ✅ 成功 | | 3 | 客户端 | 1 | 17 | ✅ 成功 | | 4 | 服务端 | 1 | 17 | ✅ 成功 |
全部 4 条记录 HMAC 验证通过。openHiTLS 采用 encrypt-then-MAC 格式,验证公式: HMAC-SM3(MAC_key, seq+type+ver+enc_len+(IV+密文))
我是利刃信安,网络安全和密码安全、数据安全领域的小白。
如果你觉得今天这篇有收获,欢迎点赞、在看、转发三连,我们下篇见
点赞
在看
转发
获取数据包+加密私钥,请联系: Mannix6
免责声明:
本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。
任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。
本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我。
本文转载自:利刃信安 利刃信安 利刃信安《TLCP(ECCSM4CBC_SM3)流量包验签解密》
版权声明
本站仅做备份收录,仅供研究与教学参考之用。
读者将信息用于其他用途的,全部法律及连带责任由读者自行承担,本站不承担任何责任。









评论