TLCP(ECC_SM4_CBC_SM3)流量包验签解密

admin 2026-07-13 04:49:24 网络安全文章 来源:ZONE.CI 全球网 0 阅读模式

文章总结: 本文档详细介绍了TLCP协议(GB/T38636-2020)流量包验签解密过程,使用密码套件ECCSM4CBC_SM3。核心内容包括SM2签名验签、密钥派生、SM4-CBC逐条解密及HMAC-SM3完整性校验,并基于openHiTLS实现的encrypt-then-MAC格式进行实际数据包分析。文档提供了完整的十六进制数据和算法步骤,为TLCP协议安全分析提供了可操作的参考。 综合评分: 88 文章分类: 漏洞分析,渗透测试,安全工具,技术标准,其他


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

  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(ECCSM4CBC_SM3)流量包验签解密》

评论:0   参与:  0