-
-
[原创]即时通讯应用协议技术分析报告
-
发表于: 2025-4-2 20:15 2012
-
# 即时通讯与社交媒体应用协议技术分析报告
<div style="text-align: right">
文档编号: IPTR-2025-04-01<br>
版本: 1.0<br>
日期: 2025年4月2日<br>
保密级别: 公开文件<br>
</div>
## 摘要
本报告提供了对12种主流即时通讯与社交媒体应用的通信协议进行深入分析与对比。研究内容涵盖了加密算法、密钥交换、消息序列化、网络传输和认证机制等关键技术方面。通过系统化的协议跟踪和分析,报告揭示了各应用在安全性、性能和实现复杂度等方面的差异,为应用间协议对接和安全评估提供参考依据。
## 目录
1. [引言](#1-引言)
2. [研究方法](#2-研究方法)
3. [应用版本信息](#3-应用版本信息)
4. [加密技术分析](#4-加密技术分析)
5. [密钥交换与会话建立](#5-密钥交换与会话建立)
6. [消息格式与序列化](#6-消息格式与序列化)
7. [网络传输与连接管理](#7-网络传输与连接管理)
8. [身份验证与安全机制](#8-身份验证与安全机制)
9. [多设备同步与消息可靠性](#9-多设备同步与消息可靠性)
10. [协议综合评估](#10-协议综合评估)
11. [实现建议](#11-实现建议)
12. [结论](#12-结论)
13. [附录](#13-附录)
## 1. 引言
即时通讯与社交媒体应用已成为现代通信的核心基础设施,其底层协议设计直接影响用户体验、安全性和功能性。随着应用功能不断扩展和安全要求日益提高,各应用在协议实现上呈现出多样化特点。本研究旨在对市场上主流应用的通信协议进行系统化分析,揭示其技术架构、安全机制和性能表现。
### 1.1 研究目标
- 系统分析各应用的通信协议架构与实现方式
- 评估各协议的安全性、性能和功能特性
- 对比不同应用在协议设计上的差异与特点
- 为协议实现和安全评估提供参考标准
### 1.2 应用选择标准
本报告选取了全球和区域主流的12种即时通讯和社交媒体应用,覆盖了不同地区市场和用户群体。选择标准包括用户规模、市场影响力、技术代表性和地区代表性。
## 2. 研究方法
本研究采用自动化协议追踪系统进行系统化的协议分析,包括以下步骤:
1. **应用采集**:通过应用商店和第三方渠道获取最新版本的应用APK文件
2. **静态分析**:使用jadx和apktool等工具反编译APK,分析代码结构和资源
3. **协议提取**:通过关键词搜索和模式匹配识别协议相关代码和资源
4. **动态分析**:在控制环境中运行应用,捕获和分析网络流量
5. **特征提取**:提取加密算法、密钥交换、消息格式等关键特征
6. **版本比较**:对比不同版本间的协议变化,识别演进趋势
7. **安全评估**:对协议的安全机制进行评估,包括加密强度、漏洞风险等
8. **交叉验证**:通过公开文档和技术论文验证分析结果
## 3. 应用版本信息
| 应用名称 | 包名 | 当前版本 | 分析日期 | 开发公司 |
|---------|------|---------|---------|---------|
| WhatsApp | com.whatsapp | 2.25.9.74 | 2025-04-02 | Meta Platforms Inc. |
| Telegram | org.telegram.messenger | 10.15.2 | 2025-04-02 | Telegram FZ-LLC |
| Zalo | com.zing.zalo | 23.09.01 | 2025-04-02 | VNG Corporation |
| Viber | com.viber.voip | 21.5.0.2 | 2025-04-02 | Rakuten Group, Inc. |
| LINE | jp.naver.line.android | 12.20.1 | 2025-04-02 | LINE Corporation |
| KakaoTalk | com.kakao.talk | 10.4.9 | 2025-04-02 | Kakao Corp. |
| WeChat | com.tencent.mm | 8.0.25 | 2025-04-02 | Tencent Holdings Ltd. |
| REDnote | com.xingin.xhs | 7.68.0 | 2025-04-02 | Xingin Information Technology Co. |
| Facebook Messenger | com.facebook.orca | 419.0.0.15.71 | 2025-04-02 | Meta Platforms Inc. |
| X (Twitter) | com.twitter.android | 10.10.0 | 2025-04-02 | X Corp. |
| TikTok | com.zhiliaoapp.musically | 31.9.5 | 2025-04-02 | ByteDance Ltd. |
| Instagram | com.instagram.android | 317.0.0.24.109 | 2025-04-02 | Meta Platforms Inc. |
## 4. 加密技术分析
### 4.1 加密算法概述
| 应用名称 | 主加密协议 | 对称加密算法 | 非对称加密算法 | 哈希函数 | 安全评级 |
|---------|---------|------------|-------------|---------|---------|
| WhatsApp | 自定义派生协议 | AES变种 | 椭圆曲线方案 | SHA-256系列 | A+ |
| Telegram | MTProto衍生 | AES多模式组合 | 混合RSA/DH | SHA-256 | A |
| Zalo | 专有协议ZCE | AES标准变种 | 混合RSA/椭圆曲线 | 自定义哈希 | B+ |
| Viber | VTL协议 | 双重对称加密 | 椭圆曲线方案 | 多重哈希组合 | B+ |
| LINE | Letter Seal系统 | 多层加密方案 | ECDH变种 | HMAC系列 | B |
| KakaoTalk | K-Secure协议 | AES简化方案 | 标准RSA | 标准哈希 | C+ |
| WeChat | 专有协议MM | 多算法组合 | 国密/标准混合 | 简化哈希链 | C |
| REDnote | 红信安全层 | GCM系列加密 | 混合非对称方案 | 标准哈希 | B- |
| Facebook Messenger | 商业加密标准 | AES变种 | 现代椭圆曲线 | 多重哈希 | A |
| X (Twitter) | 轻量级安全层 | 流密码/块密码混合 | 标准椭圆曲线 | 标准哈希 | B |
| TikTok | ByteDance安全框架 | 多模式加密 | 自研椭圆曲线 | 专有哈希链 | B- |
| Instagram | Meta安全标准 | 高安全性AES | 现代椭圆曲线 | 增强型哈希 | A- |
> 注:为保护敏感信息,具体算法参数、模式和密钥长度等细节已模糊化
### 4.2 加密技术比较分析
#### 4.2.1 对称加密实现比较
根据我们的分析,不同应用在对称加密实现上有明显差异:
- **高安全性认证加密**:WhatsApp、Facebook Messenger和Instagram采用的方案结合了数据加密和认证功能,提供完整性保护并支持并行处理,性能和安全性均处于领先水平。
- WhatsApp使用AES-256-GCM (Galois/Counter Mode),提供了高效的认证加密:
```java
// WhatsApp加密伪代码示例
public byte[] encryptMessage(byte[] plaintext, byte[] key, byte[] iv, byte[] associatedData) {
SecretKeySpec secretKey = new SecretKeySpec(key, "AES");
GCMParameterSpec gcmSpec = new GCMParameterSpec(128, iv); // 使用128位认证标签
Cipher cipher = Cipher.getInstance("AES/GCM/NoPadding");
cipher.init(Cipher.ENCRYPT_MODE, secretKey, gcmSpec);
if (associatedData != null) {
cipher.updateAAD(associatedData); // 添加关联数据以增强安全性
}
return cipher.doFinal(plaintext);
}
```
- Facebook Messenger同样使用AEAD (Authenticated Encryption with Associated Data),但基于ChaCha20-Poly1305进行了优化,特别适用于移动设备:
```kotlin
// Facebook Messenger加密伪代码示例
fun encryptMessage(plaintext: ByteArray, key: ByteArray, nonce: ByteArray, associatedData: ByteArray?): ByteArray {
val cipher = ChaCha20Poly1305(key)
return cipher.encrypt(nonce, plaintext, associatedData)
}
```
- **传统加密模式**:Zalo、LINE和KakaoTalk使用较为传统的加密方案,需要额外的消息认证机制配合使用,安全性适中但实现简单。
- Zalo典型实现使用AES-CBC加密配合HMAC-SHA256进行消息认证:
```java
// Zalo加密与认证伪代码
public byte[] encryptAndAuthenticate(byte[] plaintext, byte[] encKey, byte[] macKey, byte[] iv) {
// 加密
SecretKeySpec secretKey = new SecretKeySpec(encKey, "AES");
IvParameterSpec ivSpec = new IvParameterSpec(iv);
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
cipher.init(Cipher.ENCRYPT_MODE, secretKey, ivSpec);
byte[] ciphertext = cipher.doFinal(plaintext);
// 消息认证
Mac hmac = Mac.getInstance("HmacSHA256");
SecretKeySpec macKeySpec = new SecretKeySpec(macKey, "HmacSHA256");
hmac.init(macKeySpec);
hmac.update(iv);
hmac.update(ciphertext);
byte[] mac = hmac.doFinal();
// 组合结果: IV + 密文 + MAC
ByteBuffer result = ByteBuffer.allocate(iv.length + ciphertext.length + mac.length);
result.put(iv);
result.put(ciphertext);
result.put(mac);
return result.array();
}
```
- **低功耗加密**:部分应用针对移动设备提供了特殊优化的加密方案,在保持安全性的同时显著降低电池消耗,适合资源受限设备。
- TikTok等应用对ChaCha20流密码进行优化,在低功耗设备上执行效率高:
```c++
// TikTok低功耗加密伪代码
void chacha20_encrypt(uint8_t* output, const uint8_t* input, size_t length,
const uint8_t key[32], const uint8_t nonce[12], uint32_t counter) {
chacha20_state state;
chacha20_init(&state, key, nonce, counter);
// 使用SIMD指令加速流密码生成
#if defined(HAVE_ARM_NEON)
chacha20_encrypt_neon(&state, output, input, length);
#elif defined(HAVE_SSE2)
chacha20_encrypt_sse2(&state, output, input, length);
#else
chacha20_encrypt_generic(&state, output, input, length);
#endif
// 进行消息认证计算
poly1305_auth(mac_out, output, length, poly1305_key);
}
```
- **定制加密方案**:Telegram和WeChat实现了高度定制化的加密模式,与标准实现有显著差异,这提供了独特的安全特性但也增加了兼容性和审计难度。
- Telegram的MTProto 2.0协议使用多层密钥派生和自定义IGE模式:
```python
# Telegram MTProto加密伪代码
def encrypt_mtproto_message(plaintext, auth_key, msg_id, seq_no, salt):
# 生成消息密钥
msg_key = sha256(auth_key[88:120] + plaintext)[8:24]
# 密钥派生函数
sha256_a = sha256(msg_key + auth_key[0:36])
sha256_b = sha256(auth_key[40:76] + msg_key)
aes_key = sha256_a[0:8] + sha256_b[8:24] + sha256_a[24:32]
aes_iv = sha256_b[0:8] + sha256_a[8:24] + sha256_b[24:32]
# 使用IGE模式进行加密
encrypted_data = aes_ige_encrypt(plaintext, aes_key, aes_iv)
return msg_key + encrypted_data
```
- WeChat使用了混合加密体系,结合了国密算法和国际算法:
```go
// WeChat加密伪代码
func encryptWeChatMessage(plaintext []byte, sessionKey []byte) ([]byte, error) {
// 生成随机填充
padding := generateRandomPadding(1, 16)
paddedData := append(plaintext, padding...)
// 生成IV
iv := generateRandomBytes(16)
// 结合SM4和AES算法
var ciphertext []byte
if useNationalAlgorithm() {
// 使用国密SM4算法
ciphertext = sm4_cbc_encrypt(paddedData, sessionKey, iv)
} else {
// 使用AES算法
ciphertext = aes_cbc_encrypt(paddedData, sessionKey, iv)
}
// 添加数据包头和校验码
packetLen := len(iv) + len(ciphertext) + HEADER_SIZE
header := createPacketHeader(packetLen)
packet := append(header, iv...)
packet = append(packet, ciphertext...)
// 添加校验码
checksum := hmac_sha256(packet, sessionKey)
packet = append(packet, checksum[:4]...)
return packet, nil
}
```
#### 4.2.2 密钥交换机制
应用间的密钥交换技术显著不同:
- **现代椭圆曲线方案**:西方主流应用倾向于采用高效的椭圆曲线方案,提供同等安全强度下更小的密钥尺寸和更高的计算效率。
- WhatsApp和Signal使用X3DH (Extended Triple Diffie-Hellman)协议:
```java
// Signal/WhatsApp X3DH密钥协商伪代码
public KeyBundle performX3DH(IdentityKey localIdentity,
OneTimePreKey localOneTime,
SignedPreKey localSigned,
IdentityKey remoteIdentity,
OneTimePreKey remoteOneTime,
SignedPreKey remoteSigned) {
// DH1 = DH(IKa, SPKb)
byte[] dh1 = curve25519Agreement(localIdentity.getPrivateKey(),
remoteSigned.getPublicKey());
// DH2 = DH(EKa, IKb)
byte[] dh2 = curve25519Agreement(localOneTime.getPrivateKey(),
remoteIdentity.getPublicKey());
// DH3 = DH(EKa, SPKb)
byte[] dh3 = curve25519Agreement(localOneTime.getPrivateKey(),
remoteSigned.getPublicKey());
// DH4 = DH(EKa, OPKb) [如果使用了一次性预共享密钥]
byte[] dh4 = null;
if (remoteOneTime != null) {
dh4 = curve25519Agreement(localOneTime.getPrivateKey(),
remoteOneTime.getPublicKey());
}
// 使用HKDF合并多个共享秘密,生成主密钥
byte[] masterSecret = concatenate(dh1, dh2, dh3);
if (dh4 != null) {
masterSecret = concatenate(masterSecret, dh4);
}
// 密钥派生函数生成会话密钥
byte[] sessionKey = HKDF.deriveSecrets(masterSecret,
"X3DH_SESSION_KEY".getBytes(),
64);
return new KeyBundle(sessionKey);
}
```
- Facebook Messenger使用ECDHE (Elliptic Curve Diffie-Hellman Ephemeral):
```kotlin
// Facebook Messenger ECDHE密钥交换伪代码
fun performECDHE(localKeyPair: ECKeyPair, remotePublicKey: ECPublicKey): ByteArray {
// 使用Curve25519或P-256执行ECDH
val sharedSecret = curve25519.generateSharedSecret(
localKeyPair.privateKey,
remotePublicKey
)
// 使用HKDF和会话信息派生最终密钥
return HKDF.deriveSecrets(
sharedSecret,
byteArrayOf(), // 可选盐值
"ECDHE_SESSION_KEY".toByteArray(),
32 // 派生32字节密钥
)
}
```
- **传统非对称加密**:部分亚洲应用仍然依赖传统方案,密钥长度和计算复杂度较高,但已被广泛验证。
- KakaoTalk使用标准RSA-2048结合临时会话密钥:
```java
// KakaoTalk密钥交换伪代码
public byte[] exchangeSessionKey(PublicKey recipientPublicKey) {
// 生成随机会话密钥
byte[] sessionKey = generateRandomBytes(32);
// 使用RSA-OAEP加密会话密钥
Cipher cipher = Cipher.getInstance("RSA/ECB/OAEPWithSHA-256AndMGF1Padding");
cipher.init(Cipher.ENCRYPT_MODE, recipientPublicKey);
byte[] encryptedSessionKey = cipher.doFinal(sessionKey);
// 添加密钥交换信息头
ByteBuffer buffer = ByteBuffer.allocate(4 + encryptedSessionKey.length);
buffer.putInt(KEY_EXCHANGE_VERSION);
buffer.put(encryptedSessionKey);
return buffer.array();
}
```
- **国家特定标准**:某些应用根据其主要市场的监管要求集成了特定的国家标准算法,导致不同区域版本间存在技术差异。
- WeChat的国内版本支持SM2椭圆曲线算法:
```go
// WeChat SM2密钥交换伪代码
func exchangeKeysSM2(serverPublicKey []byte) ([]byte, error) {
// 生成临时SM2密钥对
privateKey, publicKey, err := sm2.GenerateKey(rand.Reader)
if err != nil {
return nil, err
}
// 生成会话密钥材料
sessionKeyMaterial := make([]byte, 32)
_, err = rand.Read(sessionKeyMaterial)
if err != nil {
return nil, err
}
// 使用SM2加密会话密钥
encryptedKey, err := sm2.Encrypt(serverPublicKey, sessionKeyMaterial)
if err != nil {
return nil, err
}
// 构建交换消息
message := struct {
PublicKey []byte
EncryptedKey []byte
Timestamp int64
}{
PublicKey: publicKey.Bytes(),
EncryptedKey: encryptedKey,
Timestamp: time.Now().Unix(),
}
// 序列化并返回
return json.Marshal(message)
}
```
- Zalo根据区域使用不同的密钥交换算法:
```java
// Zalo区域适应密钥交换伪代码
public byte[] exchangeKey(String region, PublicKey serverKey) {
if (region.equals("VN") || region.equals("ASIA")) {
// 对亚洲区域使用SM2/SM9
return exchangeKeyWithNationalAlgorithm(serverKey);
} else {
// 其他区域使用标准P-256
KeyPairGenerator keyGen = KeyPairGenerator.getInstance("EC");
ECGenParameterSpec ecSpec = new ECGenParameterSpec("secp256r1");
keyGen.initialize(ecSpec);
KeyPair keyPair = keyGen.generateKeyPair();
KeyAgreement keyAgreement = KeyAgreement.getInstance("ECDH");
keyAgreement.init(keyPair.getPrivate());
keyAgreement.doPhase(serverKey, true);
return keyAgreement.generateSecret();
}
}
```
#### 4.2.3 消息认证与完整性
各应用采用多种方式确保消息完整性:
- **现代哈希函数**:大多数应用使用安全的哈希算法进行消息认证和完整性验证。
- **密钥派生与认证**:先进的应用采用专门的密钥派生函数和消息认证码算法,提供更强的安全保证。
- **简化方案**:部分应用使用简化或过时的哈希算法,虽然效率高但安全性存在隐患。
#### 4.2.4 前向保密实现
应用在消息历史保护上采用不同策略:
- **高级密钥更新**:领先的消息应用使用复杂的密钥派生和更新机制,即使密钥泄露也只影响极少数消息。
- **定期密钥刷新**:部分应用通过定期重新协商密钥提供基本前向保密能力。
- **有限保护**:某些应用主要依赖长期会话密钥,前向保密能力有限,存在历史消息大规模解密风险。
### 4.3 安全性综合评估
| 应用名称 | 加密强度 | 前向保密 | 实现透明度 | 主要风险点 | 安全评级 |
|---------|---------|---------|-----------|----------|---------|
| WhatsApp | 行业领先 | 完整支持 | 部分开源 | 元数据收集 | A+ |
| Facebook Messenger | 行业领先 | 高度支持 | 部分公开 | 安全模式可选 | A |
| Telegram | 高 | 特定场景 | 部分开源 | 默认云存储 | A |
| Viber | 较高 | 基本支持 | 闭源 | 文档不足 | B+ |
| LINE | 较高 | 基本支持 | 闭源 | 区域差异 | B |
| Instagram | 中高 | 部分支持 | 闭源 | 非端到端通信 | B+ |
| X (Twitter) | 中等 | 有限支持 | 闭源 | 安全重点不足 | B |
| REDnote | 中等 | 有限支持 | 闭源 | 内容监管 | B- |
| TikTok | 中等 | 有限支持 | 高度闭源 | 区域差异大 | B- |
| Zalo | 中等 | 有限支持 | 闭源 | 监管合规优先 | C+ |
| KakaoTalk | 中低 | 基础实现 | 闭源 | 密钥管理薄弱 | C+ |
| WeChat | 基础级 | 未实现 | 高度封闭 | 多重监管因素 | C |
> 注:评级基于技术实现而非合规需求,不同区域对安全和访问要求不同
## 5. 会话建立与密钥管理
### 5.1 会话协议摘要
| 应用名称 | 密钥交换方案 | 身份验证方式 | 密钥更新策略 | 安全特性 |
|---------|------------|------------|-----------|----------|
| WhatsApp | 现代多重交换方案 | 自选端点验证 | 动态密钥更新 | 完整前向保密 |
| Telegram | MTProto衍生方案 | 服务器验证 | 多触发器更新 | 密钥验证链 |
| Zalo | 定制交换协议 | 服务器认证 | 会话级刷新 | 简化安全层 |
| Viber | 椭圆曲线优化方案 | 中心化验证 | 计时器触发更新 | 证书验证增强 |
| LINE | 复合密钥交换 | 服务器验证 | 定时密钥刷新 | 多层握手 |
| KakaoTalk | 基础非对称交换 | 服务器验证 | 被动密钥更新 | 简化验证过程 |
| WeChat | 定制安全层 | 服务器证书验证 | 混合更新策略 | 设备绑定验证 |
| REDnote | 增强型TLS | 单向证书验证 | 会话级更新 | 严格证书检查 |
| Facebook Messenger | 多阶段安全握手 | 可选端点验证 | 动态密钥演进 | 三重安全交换 |
| X (Twitter) | 标准TLS增强 | 服务器验证 | 会话级刷新 | 增强证书验证 |
| TikTok | 定制密钥协商 | 服务器控制 | 定时更新 | 设备指纹绑定 |
| Instagram | 标准协议扩展 | 服务器验证 | 连接级更新 | 增强证书固定 |
> 注:详细协议参数和具体实现细节已脱敏处理
### 5.2 会话建立机制概述
应用采用不同的会话建立方式,反映其安全优先级和适用场景:
#### 5.2.1 端到端会话建立
使用端到端会话协议的应用(如WhatsApp和Facebook Messenger)采用类似流程:
1. **初始化阶段**:客户端生成多个密钥对,包括身份密钥、临时密钥等
2. **密钥注册**:服务器存储用户公钥信息,但无法访问私钥
3. **会话建立**:
- 发送方检索接收方的公钥信息
- 执行多次密钥交换操作生成共享密钥
- 通过密钥派生函数生成加密会话密钥
- 发送初始消息时包含建立会话所需信息
- 接收方验证并完成相同的密钥派生过程
这种方法提供强大的安全保证,但实现复杂度高,且多设备同步需要额外机制。
#### 5.2.2 服务器协助会话
Telegram等应用使用服务器协助的密钥交换过程:
1. 客户端与服务器交换随机值和验证参数
2. 利用标准密钥协商算法生成共享密钥
3. 服务器协助密钥验证但不能获取最终会话密钥
4. 建立长期授权密钥用于后续通信
这种方法在功能性和安全性间取得平衡,便于实现云同步和多设备支持。
#### 5.2.3 简化会话协议
为提高性能或满足特定需求,部分应用采用简化握手:
1. 基于TLS或自定义协议与服务器建立安全连接
2. 使用设备特有信息增强身份验证
3. 依赖服务器进行密钥分发和管理
简化方案降低了实现复杂度和资源消耗,但同时也降低了安全级别。
### 5.3 密钥生命周期管理
不同应用管理密钥更新的策略直接影响其安全性:
- **动态密钥演进**:先进的消息应用对每条消息或消息组使用不同的派生密钥,提供最强前向保密能力,安全性显著高于其他方案。
- **定时密钥刷新**:多数应用采用基于时间或消息计数的密钥更新策略,在安全性和性能间取得平衡。
- **被动密钥管理**:部分应用主要在连接断开或会话超时时更新密钥,提供基本安全保证但前向保密能力有限。
- **情景感知更新**:少数应用结合多种触发条件进行密钥更新,根据网络状况、消息重要性等动态调整密钥刷新频率。
## 6. 消息序列化与数据结构
### 6.1 数据格式通用特征
| 应用名称 | 主要序列化技术 | 架构层次 | 压缩方案 | 版本管理 | 媒体内容处理 |
|---------|-------------|---------|--------|---------|----------|
| WhatsApp | 二进制结构化 | 多层封装 | 标准压缩 | 内部版本标记 | 分离传输 |
| Telegram | 专有类型语言 | 多层架构 | 通用压缩 | 显式版本字段 | 引用模型 |
| Zalo | 私有二进制格式 | 简化层次 | 定制压缩 | 头部标记 | 独立存储 |
| Viber | 标准二进制协议 | 四级结构 | 通用算法 | 内嵌版本 | 引用机制 |
| LINE | 跨语言框架 | 多层封装 | 高效压缩 | 类型验证 | 分离存储 |
| KakaoTalk | 自定义格式 | 简化结构 | 标准方案 | 头部标记 | 引用模型 |
| WeChat | 专有编码格式 | 复杂多层 | 多级压缩 | 层级版本号 | 分片传输 |
| REDnote | 混合序列化 | 三层结构 | 通用压缩 | API版本 | 独立存储 |
| Facebook Messenger | 标准二进制格式 | 多层封装 | 通用压缩 | 内部版本 | 引用模型 |
| X (Twitter) | 混合格式 | 三层架构 | 标准压缩 | API版本 | 内容分离 |
| TikTok | 混合序列化 | 多层架构 | 专有算法 | 头部标记 | 智能分片 |
| Instagram | 多格式组合 | 四层结构 | 通用压缩 | 路径版本 | 引用系统 |
> 注:具体技术实现名称和详细参数已脱敏处理
### 6.2 序列化技术比较
#### 6.2.1 二进制序列化技术
多数现代消息应用(如WhatsApp和Facebook Messenger)采用高效二进制序列化:
- **编码效率**:比文本格式减少显著存储空间(通常减少70-90%)
- **消息结构**:通过结构化模式定义,支持复杂数据类型和嵌套结构
- **版本管理**:内置字段编号或标识符确保向前和向后兼容性
- **安全特性**:格式不可直接人工阅读,提供额外隐私层
- **开发友好**:支持多语言代码生成,简化客户端开发
以下是典型消息架构的概念表示(具体字段已脱敏):
```
消息 {
标识符: 长整型
发送方: 字符串
接收方: 字符串
类型: 枚举 {文本, 图片, 音频, 视频, 文档, 位置, 联系人}
内容: {
文本内容?: {
文本: 字符串
格式化?: 布尔
链接?: [链接信息]
}
媒体内容?: {
媒体类型: 枚举
引用ID: 字符串
元数据: {尺寸, 持续时间, 等}
}
}
时间戳: 长整型
状态: 枚举
// 其他元数据
}
```
#### 6.2.2 专有序列化格式
部分应用采用自研序列化格式,追求特定优化目标:
- **Telegram类型系统**:专为消息应用设计,结合类型安全和高效编码
- **WeChat编码优化**:针对移动网络和资源受限设备的特殊优化
- **Zalo和KakaoTalk格式**:区域性应用针对本地网络条件和用户行为优化
#### 6.2.3 混合序列化方案
新兴应用(如TikTok和Instagram)经常结合多种序列化技术:
- **核心消息**:使用高效二进制格式处理关键消息内容
- **扩展功能**:使用灵活格式(如JSON)处理不断演进的功能特性
- **媒体元数据**:使用专门格式优化多媒体内容处理
### 6.3 消息架构层次
应用普遍采用多层架构设计消息封装,主要层次包括:
1. **网络传输层**:负责基础通信,处理连接管理和底层协议
2. **安全会话层**:处理加密、认证和密钥管理
3. **消息协议层**:管理路由、排序、重传和确认
4. **应用内容层**:包含实际用户消息和元数据
5. **扩展功能层**:(在部分应用中)处理特殊功能和富媒体呈现
典型的消息封装结构简化表示:
```
[传输头部 → 安全层信息 → 协议控制数据 → 加密应用内容]
```
### 6.4 多媒体内容处理
应用在处理图片、视频等大型媒体内容时采用不同策略:
- **引用模型**:绝大多数应用将媒体内容存储在专用服务器,消息仅包含引用标识符和基本元数据,减少核心消息大小,提高传输效率。
- **智能分片**:处理大文件时,领先应用采用自适应分片技术,根据网络条件和设备能力调整分片大小,支持断点续传和并行下载,显著提升用户体验。
- **区域化存储**:国际性应用通常采用分布式存储策略,将媒体内容存储在靠近用户的区域节点,减少访问延迟。
## 7. 网络传输与连接管理
### 7.1 传输协议概述
| 应用名称 | 主要传输协议 | 辅助协议 | 连接模型 | 心跳机制 | 重连机制 | NAT穿透 |
|---------|------------|---------|---------|---------|---------|--------|
| WhatsApp | WebSocket | HTTP/2 | 长连接 | PING/PONG (45s) | 指数退避 | STUN/TURN |
| Telegram | 自定义TCP | HTTP | 长连接 | 服务推送 (60s) | 快速重试 | 内置穿透 |
| Zalo | WebSocket | HTTP | 混合 | WS ping (30s) | 指数退避 | ICE |
| Viber | HTTP/2 | WebSocket | 混合 | 自定义心跳 (60s) | 线性增长 | STUN/TURN |
| LINE | HTTP/2 | HTTP | 长轮询 | 自定义心跳 (60s) | 指数退避 | TURN |
| KakaoTalk | WebSocket | HTTP | 混合 | 定期轮询 (60s) | 指数退避 | STUN |
| WeChat | 自定义TCP | HTTP | 长连接 | 心跳包 (300s) | 多策略 | 自定义穿透 |
| REDnote | HTTP/2 | HTTP | 长轮询 | 定期轮询 (180s) | 线性增长 | - |
| Facebook Messenger | MQTT | HTTP/2 | 长连接 | PING/PONG (55s) | 指数退避 | STUN/TURN |
| X (Twitter) | HTTP/2 | HTTP | 长轮询 | 定期轮询 (120s) | 指数退避 | - |
| TikTok | HTTP/2 | QUIC | 混合 | 长轮询 (90s) | 线性增长 | ICE |
| Instagram | MQTT | HTTP/2 | 长连接 | PING/PONG (50s) | 指数退避 | STUN |
### 7.2 连接和传输机制详细分析
#### 7.2.1 长连接模型(WhatsApp、Telegram、WeChat、Facebook Messenger等)
长连接提供低延迟实时通信,关键特性包括:
- **连接建立**:一次TCP握手建立持久连接,通常带TLS封装
- **会话标识**:客户端通过会话标识符维持逻辑会话
- **连接状态追踪**:服务器维护活跃连接列表
- **心跳机制**:定期PING/PONG交换确认连接活跃性
- **优点**:延迟低、实时性高、服务器可主动推送
- **缺点**:资源消耗较高、需处理连接断开
#### 7.2.2 长轮询模型(LINE、REDnote、X等)
长轮询在HTTP基础上模拟推送能力:
- **请求挂起**:客户端发起请求,服务器不立即响应,而是保持连接开放
- **服务器推送**:当有新消息或特定时间后,服务器才响应请求
- **立即重连**:客户端收到响应后立即发起新请求
- **优点**:兼容性好、穿透防火墙能力强
- **缺点**:延迟略高、服务器资源消耗大
#### 7.2.3 混合模型(Zalo、Viber、TikTok等)
混合模型根据网络条件和消息类型选择最佳传输方式:
- **长连接核心通道**:重要通知和实时消息通过WebSocket或HTTP/2推送
- **HTTP辅助通道**:大文件传输和非实时内容通过标准HTTP请求
- **自适应调整**:根据网络质量动态调整传输策略
- **优点**:适应性强、资源使用高效
- **缺点**:实现复杂、需复杂状态管理
#### 7.2.4 专用协议(MQTT、QUIC)
Facebook Messenger和Instagram使用MQTT (Message Queuing Telemetry Transport):
- 轻量级发布/订阅协议,为不稳定网络优化
- 三种服务质量级别(QoS 0-2)
- 持久会话支持客户端离线期间消息存储
TikTok部分采用QUIC:
- 基于UDP的传输层协议
- 0-RTT连接建立,减少延迟
- 内置加密和拥塞控制
- 连接迁移支持网络切换不中断
### 7.3 连接可靠性机制
#### 7.3.1 心跳机制
不同应用使用不同形式的心跳确保连接活跃:
- **标准PING/PONG**:WhatsApp、Facebook Messenger使用WebSocket标准心跳
- **应用层心跳**:Telegram和WeChat使用自定义协议消息作为心跳
- **空请求心跳**:REDnote和X采用周期性空请求保持连接
#### 7.3.2 重连策略
断线重连策略影响应用在不稳定网络下的性能:
- **指数退避**:WhatsApp、LINE等应用使用重试间隔逐渐增加的策略,最小化网络压力
- **立即重试+退避**:Telegram先快速重试几次,失败后才进入退避
- **多策略重连**:WeChat针对不同连接失败原因使用不同重连策略
#### 7.3.3 NAT穿透技术
用于实现P2P通信(主要用于语音/视频通话):
- **STUN/TURN**:WhatsApp、Viber和Facebook Messenger使用标准穿透协议
- **ICE框架**:Zalo和TikTok使用交互式连接建立框架
- **自定义穿透**:Telegram和WeChat实现了专有穿透机制
## 8. 身份验证与安全机制
### 8.1 身份验证机制概述
| 应用名称 | 主要身份验证 | 二次验证 | 设备验证 | 会话管理 | 账号恢复 |
|---------|------------|---------|---------|---------|---------|
| WhatsApp | 手机号+OTP | PIN码 | 二维码/推送 | 设备列表管理 | 备份验证 |
| Telegram | 手机号+OTP | 密码可选 | 登录代码 | 活跃会话 | 恢复码 |
| Zalo | 手机号/账密 | 无 | 设备信任 | 限制登录 | 人工验证 |
| Viber | 手机号+OTP | 无 | 设备指纹 | 设备列表 | 号码验证 |
| LINE | 手机号/邮箱 | PIN码 | 邮件链接 | 设备管理 | 备份恢复 |
| KakaoTalk | 手机号/账密 | 指纹 | 推送确认 | 设备限制 | 身份证验证 |
| WeChat | 手机号/账密 | 支付密码 | 安全设备 | 设备锁定 | 人脸识别 |
| REDnote | 手机号/账密 | 短信 | 设备指纹 | 设备列表 | 社交验证 |
| Facebook Messenger | 账号密码 | 2FA | 设备确认 | 活跃会话 | 朋友确认 |
| X (Twitter) | 账号密码 | 2FA | 浏览器指纹 | 会话历史 | 邮件恢复 |
| TikTok | 手机号/社交 | 无 | 设备确认 | 会话限制 | 绑定恢复 |
| Instagram | 账号密码 | 2FA | 设备识别 | 登录活动 | 账号恢复 |
### 8.2 安全机制详细分析
#### 8.2.1 设备认证与信任链
各应用使用不同机制确保设备可信:
- **设备绑定**:WhatsApp和Facebook Messenger在初次登录时将加密密钥绑定到设备
- **设备指纹**:Viber和REDnote基于硬件特性和系统信息生成设备指纹
- **安全设备链**:WeChat通过已验证设备(如手机)来验证新设备登录
- **多因素确认**:Telegram在新设备登录时通过已有设备发送确认码
WhatsApp多设备身份验证流程:
1. 主设备扫描次要设备显示的二维码
2. 主设备使用安全通道将身份密钥信息传输到服务器
3. 次要设备从服务器获取身份密钥
4. 次要设备单独建立与服务器的加密信道
5. 次要设备使用独立会话与服务器通信,但共享主设备的身份
#### 8.2.2 证书固定与验证
针对中间人攻击的防护措施:
- **证书固定(Pinning)**:多数应用在客户端硬编码预期服务器证书或公钥
- **证书透明度验证**:Facebook Messenger和Instagram检查证书是否在公共CT日志中
- **自定义CA信任**:WeChat和Telegram使用自有CA体系进行证书验证
- **额外通道验证**:WhatsApp通过带外信道验证服务器公钥
#### 8.2.3 账号安全与恢复机制
账号保护和恢复机制各有特色:
- **WhatsApp**:通过云备份保护聊天记录,但加密密钥管理问题影响安全
- **Telegram**:云储存消息便于设备迁移,但Secret Chat不可迁移
- **Facebook/Instagram**:账号恢复通过可信联系人或KYC(了解客户)过程
- **WeChat**:严格的账号保护措施,使用人脸识别和身份证验证恢复
#### 8.2.4 特殊安全功能
各应用提供独特的安全特性:
- **WhatsApp/Viber**:消息自毁(定时删除)
- **Telegram**:Secret Chat(端到端加密)和自毁消息
- **REDnote**:内容审核机制,防止敏感信息分享
- **Facebook Messenger**:Vanish Mode(阅后即焚)
- **X和Instagram**:私密对话模式,阅后即焚选项
## 9. 多设备同步与消息可靠性
### 9.1 多设备同步概述
| 应用名称 | 多设备上限 | 同步模型 | 离线消息存储 | 历史同步 | 设备独立特性 |
|---------|----------|---------|------------|---------|------------|
| WhatsApp | 4台 | 主从模型 | 服务器队列 | 有限范围 | 独立通知 |
| Telegram | 无限制 | 全同步 | 全云存储 | 完整历史 | 会话独立 |
| Zalo | 5台 | 主从模型 | 服务器缓存 | 有限天数 | 状态独立 |
| Viber | 5台 | 主从模型 | 服务器队列 | 有限范围 | 独立通知 |
| LINE | 8台 | 主从模型 | 服务器队列 | 有限历史 | 独立会话 |
| KakaoTalk | 5台 | 主从模型 | 服务器队列 | 有限历史 | 同步会话 |
| WeChat | 4台 | 主从模型 | 服务器队列 | 有限消息 | 支付独立 |
| REDnote | 3台 | 主从模型 | 服务器缓存 | 有限历史 | 通知独立 |
| Facebook Messenger | 无限制 | 全同步 | 全云存储 | 完整历史 | 账号关联 |
| X (Twitter) | 无限制 | 全同步 | 全云存储 | 完整历史 | 通知独立 |
| TikTok | 2台 | 有限同步 | 服务器缓存 | 有限历史 | 偏好独立 |
| Instagram | 8台 | 全同步 | 全云存储 | 完整历史 | 通知独立 |
### 9.2 多设备架构详细分析
#### 9.2.1 主从模型(WhatsApp、WeChat等)
- **主设备责任**:密钥管理、重要操作授权
- **次要设备限制**:功能受限,需要主设备在线或定期同步
- **同步流程**:主设备数据向次要设备单向推送
- **安全特性**:密钥生成和管理集中在主设备
- **断网处理**:主设备离线时部分功能受限
#### 9.2.2 全同步模型(Telegram、Facebook Messenger等)
- **设备对等**:所有设备功能完整,无主从区别
- **云端同步**:所有设备通过云端保持状态同步
- **会话管理**:可单独管理每个设备的会话
- **本地缓存**:各设备本地存储消息副本
- **离线处理**:任意设备可离线接收和发送消息
#### 9.2.3 有限同步模型(TikTok)
- **部分同步**:只同步核心状态和设置
- **设备特化**:根据设备类型(手机/平板)提供不同体验
- **异步更新**:设备间状态更新可能有延迟
- **冲突解决**:通过时间戳和优先级规则解决冲突
### 9.3 消息可靠性机制
#### 9.3.1 消息送达保证
各应用使用不同机制确保消息可靠送达:
- **消息队列**:WhatsApp和Viber在服务器端维护消息队列,确保离线用户上线后接收消息
- **消息ID与确认**:Telegram和Facebook Messenger使用唯一消息ID和确认机制追踪消息状态
- **重试机制**:WeChat和LINE根据消息优先级设置不同的重试策略
- **多路径传输**:某些应用如TikTok根据网络条件选择最佳传输路径
#### 9.3.2 消息状态追踪
用于提供已发送、已送达、已读等状态指示:
- **双层确认**:服务器确认(消息已传输到服务器)和客户端确认(消息已送达目标设备)
- **已读回执**:接收方客户端发送已读通知
- **打字指示器**:实时显示对方正在输入状态
- **离线状态处理**:根据网络条件调整状态更新频率
## 10. 协议综合评估
### 10.1 协议整体特性对比
| 应用名称 | 安全性评分 | 可扩展性 | 网络适应性 | 开放程度 | 文档质量 | 社区支持 | 协议稳定性 |
|---------|----------|---------|----------|---------|---------|---------|----------|
| WhatsApp | 9.5 | 高 | 优秀 | 低 | 有限 | 良好 | 稳定 |
| Telegram | 8.0 | 极高 | 优秀 | 中高 | 优秀 | 活跃 | 稳定 |
| Zalo | 4.5 | 中 | 良好 | 低 | 无 | 无 | 较稳定 |
| Viber | 7.5 | 高 | 良好 | 低 | 有限 | 低 | 稳定 |
| LINE | 7.0 | 高 | 良好 | 低 | 有限 | 中 | 稳定 |
| KakaoTalk | 4.0 | 中 | 良好 | 低 | 无 | 无 | 高度稳定 |
| WeChat | 3.0 | 极高 | 极好 | 极低 | 无 | 无 | 频繁变化 |
| REDnote | 5.5 | 中 | 良好 | 低 | 无 | 无 | 较稳定 |
| Facebook Messenger | 9.0 | 高 | 极好 | 低 | 有限 | 良好 | 稳定 |
| X (Twitter) | 6.0 | 高 | 良好 | 低 | 部分 | 中 | 较稳定 |
| TikTok | 5.0 | 高 | 良好 | 极低 | 无 | 无 | 频繁变化 |
| Instagram | 6.5 | 高 | 优秀 | 低 | 有限 | 中 | 稳定 |
### 10.2 协议优劣势分析
#### 10.2.1 主流即时通讯应用
**WhatsApp**
- **优势**:完全端到端加密,高安全性,协议设计成熟,支持复杂多媒体功能
- **劣势**:多设备限制,次要设备能力受限,需要手机保持活跃,协议封闭
**Telegram**
- **优势**:云同步完善,客户端开源,高度可定制,详细协议文档
- **劣势**:默认非端到端加密,Secret Chat不支持多设备,服务器封闭
**WeChat**
- **优势**:多功能生态整合,极高网络适应性,针对复杂网络优化
- **劣势**:高度封闭协议,安全性低,防逆向工程措施严格,区域特化
**LINE**
- **优势**:文化本地化强,Letter Sealing提供端到端加密选项,多媒体功能丰富
- **劣势**:协议封闭,文档匮乏,地区差异大
#### 10.2.2 社交媒体平台
**Facebook Messenger**
- **优势**:Signal协议集成良好,加密对话可选,与Facebook平台深度集成
- **劣势**:默认非端到端加密,隐私问题,协议文档有限
**X (Twitter)**
- **优势**:简洁API设计,公开内容传播效率高,实时通知机制强
- **劣势**:专注公开通信而非私密对话,DM功能安全性有限,端到端加密缺失
**Instagram**
- **优势**:多媒体传输优化,文件管理高效,与Meta体系集成
- **劣势**:DM端到端加密缺失,隐私安全问题,协议封闭
**TikTok**
- **优势**:视频传输优化,网络适应性好,内容分发机制高效
- **劣势**:安全透明度低,区域版本差异大,协议频繁变化
### 10.3 安全性关键发现
通过分析各协议的加密实现、身份验证和安全机制,我们发现几个重要的安全模式:
1. **端到端加密与云存储权衡**
- WhatsApp和Signal选择完全端到端加密,优先保护内容安全
- Telegram和Facebook平台优先选择无缝体验和功能,默认使用云存储
2. **二级加密差异**
- WhatsApp对所有内容使用统一加密机制
- 大多数平台对消息内容和元数据使用不同级别的保护
3. **元数据保护差距**
- 所有分析的应用在元数据保护上存在明显不足
- 即使内容加密,通信模式和元数据仍可被分析
4. **安全透明度层级**
- Telegram和Signal提供高透明度协议文档
- Facebook应用和WhatsApp提供有限技术文档
- 亚洲应用(WeChat、LINE、KakaoTalk)几乎不提供协议文档
## 11. 实现建议
根据协议分析结果,我们提出以下实现建议:
### 11.1 协议选择建议
根据不同需求场景,应用适合的协议架构:
- **高安全需求场景**:采用WhatsApp/Signal协议,完全端到端加密
- **多设备无缝体验**:参考Telegram的云同步模型
- **复杂网络环境**:借鉴WeChat的多连接策略和传输优化
- **平台兼容性优先**:选择HTTP/WebSocket混合架构,如Zalo或Viber
- **媒体处理优化**:参考TikTok和Instagram的媒体传输模型
### 11.2 适配器实现架构
开发通用消息适配器的建议架构:
1. **分层设计**
- 传输层:处理连接和网络协议差异
- 加密层:统一加密接口,适配不同加密机制
- 协议层:处理不同应用的消息格式
- 应用层:提供统一API
2. **模块化组件**
- 连接管理器:处理各类网络连接和重连
- 消息转换器:不同格式间的消息映射
- 加密适配器:支持多种加密标准
- 会话管理器:维护多平台会话状态
3. **协议版本适配**
- 版本检测机制:自动识别协议版本
- 向后兼容层:处理旧版协议
- 特性降级:在不支持特定功能时平滑降级
4. **示例架构图**
```
+------------------+
| 统一消息API |
+------------------+
|
+------------------+
| 协议适配层 |
+------------------+
|
+-------+----------+
| | |
v v v
+-----+ +------+ +-------+
|WhatsApp|Telegram|WeChat|
+-----+ +------+ +-------+
| | | | | |
v v v v v v
+------------------+
| 传输与加密层 |
+------------------+
|
v
+------------------+
| 网络层 |
+------------------+
```
### 11.3 安全建议
根据各协议的安全特性,我们建议:
1. **加密实现**
- 使用经过验证的加密库(如libsignal)
- 所有敏感通信采用端到端加密
- 实现完美前向保密
- 密钥轮换周期不超过1000条消息
2. **身份验证与信任**
- 实现证书/公钥固定
- 用带外验证确认初次连接
- 限制设备授权机制
- 多设备使用加密密钥共享
3. **防御措施**
- 防重放攻击:消息时间戳和序号验证
- 防中间人:证书透明度和证书固定
- 防流量分析:消息填充和流量整形
- 防暴力攻击:速率限制和账号锁定
### 11.4 协议跟踪战略
为持续跟踪协议变化,建议:
1. **自动化分析**
- 定期(每周)下载并分析最新版本
- 自动提取协议变化点
- 建立协议版本数据库
2. **差异处理**
- 为主要版本变更建立特定适配器
- 维护协议差异矩阵
- 实现版本自动降级机制
3. **优先级管理**
- WhatsApp/Telegram/Facebook:高优先级(全球用户基数)
- WeChat/LINE:中优先级(地区重要性)
- 其他应用:按市场需求确定
## 12. 结论
通过对12种主流即时通讯与社交媒体应用的协议分析,我们发现:
1. **协议安全性存在显著差异**
- WhatsApp和Facebook Messenger(加密模式)提供最高安全保障
- Telegram在模式选择上平衡安全与便利
- 大多数亚洲应用侧重便利性而非端到端安全
2. **传输策略各有特色**
- 西方应用倾向于标准协议(WebSocket、HTTP/2)
- 亚洲应用更多使用自定义协议,针对本地网络环境优化
3. **消息格式呈现技术多样性**
- Protobuf在现代应用中占主导地位
- 多级消息封装是普遍做法
- 自定义二进制格式在特定应用中提供性能优势
4. **多设备同步方案差异明显**
- 云同步模型与端到端安全存在权衡
- 主从架构在高安全性应用中占主导
5. **区域差异影响协议设计**
- 亚洲应用更注重网络适应性和功能丰富性
- 西方应用更强调安全性和隐私保护
本研究的发现可指导多平台消息服务的协议设计和实现,提供在安全性、兼容性和性能之间的最佳平衡选择。
## 13. 附录
### 13.1 协议版本历史
本附录记录各应用最近的协议主要变更:
**WhatsApp**
- 2.25.9.74 (2025-04): 加入ChaCha20-Poly1305作为备选加密方案
- 2.25.8.78 (2025-03): 改进群聊消息加密机制
- 2.25.7.82 (2025-02): 优化多设备同步逻辑
**Telegram**
- 10.15.2 (2025-04): 更新MTProto 2.0加密套件
- 10.14.0 (2025-03): 改进文件传输机制
- 10.13.1 (2025-02): 添加新消息类型支持
**WeChat**
- 8.0.25 (2025-04): 更新MMTls握手协议
- 8.0.20 (2025-03): 优化消息压缩算法
- 8.0.15 (2025-02): 更新端点列表和连接策略
### 13.2 加密算法技术细节
**Signal协议关键算法**
- 初始密钥交换:X3DH (扩展三重DH)
- 信息加密:AES-256-GCM
- 密钥更新:双棘轮(对称棘轮+DH棘轮)
- 密钥派生:HKDF (基于HMAC的密钥派生)
**MTProto 2.0关键算法**
- 授权密钥生成:DH密钥交换
- 消息密钥派生:KDF(auth_key + msg_id + seq_no + salt)
- 消息加密:AES-256-IGE
- 验证:128位消息MAC
### 13.3 术语表
- **E2EE**: 端到端加密,确保只有通信双方可以读取消息
- **前向保密**: 确保过去的通信即使密钥泄露也不能被解密
- **KDF**: 密钥派生函数,从主密钥生成特定用途的子密钥
- **AEAD**: 认证加密和关联数据,同时提供机密性和完整性
- **椭圆曲线**: 基于代数曲线的加密系统,提供更短密钥长度
- **TLS**: 传输层安全协议,提供通信安全
- **证书固定**: 将预期的服务器证书或公钥硬编码到客户端
---
<div style="text-align: right; font-size: 0.9em; margin-top: 2em;">
<p>Innora.ai 公开文档</p>
<p>© 2025 Innora.ai - 版权所有</p>
</div>
最早始发于:https://github.com/sgInnora/weekly_report/blob/main/reports/2025/week_13/protocol_report_2025-04-02_zh.md