返回论坛

初识 TON:账户体系、Token 机制与资产安全深度解析

查找币 学术研究 安全研究 Web3安全 区块链安全

查找币安全研究院

钱包恢复评估 | 链上取证分析 | Web3 事件响应
以合法授权、证据保全、隐私保护和可复核流程为前提,不要求用户在线提交完整私钥或助记词。

查看研究院 研究报告中心
## 引言 TON(The Open Network)作为由 Telegram 团队最初设计的去中心化区块链平台,以其高性能和可扩展性在 Web3 领域独树一帜。然而,TON 的独特之处不仅在于其与 Telegram 的深度整合带来的易用性,更在于其与传统区块链截然不同的架构设计——非主流的 FunC 智能合约语言、独特的账户模型以及复杂的交易机制,都为安全研究带来了全新挑战。 本文将从账户生成、Token 形态、交易特性三个核心维度,深入剖析 TON 的技术原理,并重点探讨用户资产安全中可能存在的风险点。 ## TON 账户体系:从私钥到智能合约地址 ### 公私钥生成机制 TON 主要采用 Ed25519 算法生成密钥对,其流程如下: 1. **私钥生成**:随机生成 32 字节的种子 2. **公钥计算**:通过 Ed25519 算法从私钥推导出原始公钥(32 字节) 3. **公钥编码**:原始公钥可进一步转换为“美化”形式,携带校验位 原始公钥示例: ``` E39ECDA0A7B0C60A7107EC43967829DBE8BC356A49B9DFC6186B3EAC74B5477D ``` 美化公钥示例: ``` Pubjns2gp7DGCnEH7EOWeCnb6Lw1akm538YYaz6sdLVHfRB2 ``` ### 账户地址的独特生成方式 与以太坊等传统区块链不同,TON 的账户地址并非直接由公钥哈希计算得出,而是一个**智能合约地址**。这意味着用户在拥有账户之前,需要先计算地址、接收初始代币,然后再部署合约。 地址计算过程包含以下关键参数: - **workchainId**:标识智能合约所属的分片链(TON 由多条分片链组成) - **initial data**:包含用户公钥,是钱包合约所有权的凭证 - **account_id**:由公钥等数据计算得出的唯一标识 地址的两种表现形式: 1. **原始形式**: ``` 0:b4c1b2ede12aa76f4a44353944258bcc8f99e9c7c474711a152c78b43218e296 ``` 2. **用户友好形式**(主网示例): - Bounceable: `EQC0wbLt4Sqnb0pENTlEJYvMj5npx8R0cRoVLHi0MhjilkPX` - Non-bounceable: `UQC0wbLt4Sqnb0pENTlEJYvMj5npx8R0cRoVLHi0Mhjilh4S` 观察可发现,不同形式的地址仅在首尾字符存在差异,中间的 `account_id` 完全一致。这种设计体现了 TON 对地址兼容性和安全性的考量。 ## 钱包合约:所有权验证与消息处理 TON 的钱包合约是用户资产管理的核心。以 wallet-v4 为例,其 `recv_external` 函数处理外部消息时,会读取合约存储中的四个关键参数: - **stored_seqno**:消息序列号,防止重放攻击 - **stored_subwallet**:子钱包 ID,用于隔离不同应用场景 - **public_key**:用户公钥,验证消息签名 - **plugins**:插件字典,支持扩展功能 合约通过以下逻辑验证消息合法性: ```funC var (subwallet_id, valid_until, msg_seqno) = (cs~load_uint(32), cs~load_uint(32), cs~load_uint(32)); throw_if(36, valid_until <= now()); // 检查消息是否过期 throw_unless(33, msg_seqno == stored_seqno); // 检查序列号 throw_unless(34, subwallet_id == stored_subwallet); // 检查子钱包 ID ``` 这种设计确保了只有持有正确私钥的用户才能控制钱包,同时通过序列号和有效期机制防范重放攻击。 ## Token 机制:从 Jettons 到 NFT ### Jettons(同质化代币) TON 上的同质化代币称为 Jettons,其核心组件包括: - **Jetton Minter**:代币发行合约,负责创建和管理代币 - **Jetton Wallet**:用户持有的代币账户合约,记录余额 - **Jetton Master**:代币元数据合约,定义名称、符号、精度等属性 与 ERC-20 不同,TON 的每个 Jetton 持有者都拥有独立的合约实例,这带来了更细粒度的控制能力,但也增加了合约复杂性。 ### NFT(非同质化代币) TON 的 NFT 标准(如 TEP-62)同样采用独立合约架构: - **NFT Collection**:集合合约,管理 NFT 的创建和元数据 - **NFT Item**:单个 NFT 合约,记录所有者、元数据 URI 等信息 - **Royalty**:版税机制合约,支持创作者在二级市场获得分成 ## 交易特性:Bounceable 与非 Bounceable TON 的交易机制中,`Bounceable` 和 `Non-bounceable` 是两个关键概念: - **Bounceable 交易**:如果接收方合约不存在或执行失败,消息会被“反弹”,原始资金扣除手续费后返回发送方 - **Non-bounceable 交易**:消息即使发送失败也不会反弹,资金可能永久丢失 这种设计对资产安全有直接影响: 1. **首次转账**:向新地址首次转账时,建议使用 Bounceable 模式,防止因地址错误导致资金损失 2. **合约部署**:部署钱包合约前,必须通过 Non-bounceable 交易转入初始资金 ## 资产安全风险分析 ### 假充值攻击(类型一:假币) 攻击者可能创建与目标代币(如 USDT)完全相同的 metadata,但使用不同的 minter 合约。如果交易所或钱包的自动化入账程序仅检查代币名称和符号,而未验证 minter 合约地址,就会导致错误入账。 **防御措施**: - 验证代币的 minter 合约地址是否为官方地址 - 检查代币的 Jetton Master 合约代码哈希 - 对入账代币进行合约级白名单验证 ### 假充值攻击(类型二:反弹机制) 利用 TON 的 Bounceable 特性,攻击者可以: 1. 向目标地址发送 Bounceable 交易 2. 如果目标地址不存在或合约执行失败,资金自动反弹 3. 攻击者声称已转账,利用系统确认延迟进行欺诈 **防御措施**: - 确认交易状态为 `finalized` 而非 `pending` - 检查交易是否产生反弹消息 - 使用 Non-bounceable 模式接收首次转账 ## 安全实践建议 针对 TON 生态的安全防护,查找币安全团队建议: 1. **钱包开发**: - 严格实现 seqno 验证机制 - 支持多重签名和紧急暂停功能 - 定期审计合约代码 2. **交易所集成**: - 实现代币合约白名单系统 - 对入账交易进行多维度验证(minter 地址、合约哈希、交易状态) - 建立假充值检测模型 3. **用户操作**: - 转账前确认地址格式正确 - 首次接收代币选择 Bounceable 模式 - 使用官方钱包或经过审计的第三方钱包 ## 结语 TON 的独特架构带来了创新的用户体验,但也引入了全新的安全挑战。从账户生成的钱包合约,到 Token 机制的智能合约,再到交易特性的反弹机制,每个环节都可能成为攻击者的突破口。理解这些技术细节,是保障资产安全的前提。 查找币安全团队已推出 TON 智能合约安全审计服务,涵盖钱包合约、Jetton 合约、NFT 合约等全品类审计。我们持续关注 TON 生态的安全动态,欢迎有审计需求的项目方与我们深入交流。 --- *本文由查找币安全团队整理发布*
在论坛中查看和回复