TLCP(ECC_SM4_CBC_SM3)流量包验签解密"

admin 2026-10-23 17:26:39 网络安全文章 来源:ZONE.CI 全球网 0 阅读模式

cover_image

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 加密流程:

  1. 明文 = content || padding\_length(1B) || PKCS#7\_padding

  2. 密文 = SM4-CBC-Encrypt(明文)

  3. MAC = HMAC-SM3(write\_MAC\_key,

seq(8B) + type(1B) + version(2B)

  • enc\_len(2B) + (IV + ciphertext))
  1. 发送: 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(ECC_SM4_CBC_SM3)流量包验签解密" 网络安全文章

TLCP(ECC_SM4_CBC_SM3)流量包验签解密"

本文档详细介绍了TLCP协议(GB/T38636-2020)流量包验签解密过程,使用密码套件ECC_SM4_CBC\\_SM3。核心内容包括SM2签名验签、密钥派生、SM4-CBC逐条解密及HMAC-SM3完整性校验,并基于openHiTLS实现的encrypt-then-MAC格式进行实际数据包分析。文档提供了完整的十六进制数据和算法步骤,为TLCP协议安全分析提供了可操作的参考。
安卓17IonStack全链路0day漏洞利用链" 网络安全文章

安卓17IonStack全链路0day漏洞利用链"

NebulaSecurity团队公开了全球首个Android17远程临时root演示项目IonStack,攻击者仅需诱导受害者点击恶意URL即可获取临时root权限。该利用链包含两枚0day漏洞:一枚影响Firefox151.0.2之前版本的浏览器漏洞,另一枚是潜伏Linux内核15年的通用漏洞GhostLock(CVE-2026-43499)。GhostLock本质是stack-UAF漏洞,通过构造死锁循环触发,最终实现权限提升。利用过程包括Prefetch侧信道泄露KASLR、CEA喷射绕过地址随机化
看完Hy3的Blog,我突然就理解了腾讯的思路。" 网络安全文章

看完Hy3的Blog,我突然就理解了腾讯的思路。"

腾讯hy3正式版在coding和agent任务上表现优秀,与更大参数模型相当;强调性价比,价格远低于DeepSeekv4Pro;通过多个case测试显示正式版在规划、交互细节、质感等方面优于preview;文章认为大模型竞争将分两条路线,hy3走性价比路线。建议用户尝试hy3正式版,尤其适合成本敏感场景。
价值1,450美元的JWT身份验证设计缺陷" 网络安全文章

价值1,450美元的JWT身份验证设计缺陷"

本文分析了一个JWT身份验证设计缺陷,问题不在于密码学攻击,而是后端过度信任刷新令牌,将其作为身份的唯一来源。刷新令牌缺乏服务器端会话绑定、令牌标识符(jti)和组织上下文等关键安全控制,导致仅凭令牌即可维持认证状态,形成单点故障。作者通过实验发现,即使删除其他cookie,仅保留刷新令牌仍可访问受保护页面。建议实施令牌轮换、绑定会话状态等防御措施以降低风险。
评论:0   参与:  0