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\ (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
版权声明
本站仅做备份收录,仅供研究与教学参考之用。
读者将信息用于其他用途的,全部法律及连带责任由读者自行承担,本站不承担任何责任。











评论