什么是签名?链上「签字」到底是怎么做的
什么是链上签名?直接答:签名(Signature)是用私钥对一条消息(如交易内容、登录请求)做特定密码学运算后产生的一段数据,验证方用对应公钥就能确认「这条消息确实由私钥持有人发出且未被改动」。比特币、以太坊用 ECDSA 签名,Solana 用 Ed25519。本文讲清签名的工作原理、链上交易签名流程、登录签名与转账签名的区别。
什么是链上签名?直接答:签名(Signature)是用私钥对一条消息(如交易内容、DApp 登录请求、跨链消息)做密码学运算后产生的一段数据,验证方用对应公钥即能确认「这条消息确实由该私钥持有人签发且未被任何修改」。比特币和以太坊都用 ECDSA(基于 SECP256k1 椭圆曲线)做签名,Solana 用 Ed25519。每一笔链上交易都包含发起方的签名——矿工 / 验证者必须验证签名后才会打包。签名是「证明身份」而不是「加密内容」。本文讲清签名的工作原理、链上交易签名流程、链下登录签名(如 Sign-in with Ethereum)与链上转账签名的区别。
理解签名后,下一步是亲自体验签名过程。可访问 币安官网 注册账号、用 币安官方App 完成 KYC 后小额提币(每笔提币都涉及签名);下载入口集中梳理在 下载页。
签名的本质
A:签名是「私钥的能力体现」——拥有私钥的人能签字证明「这条消息是我发的」,而其他人无法伪造。
签名的核心特性
| 特性 | 说明 |
|---|---|
| 不可伪造 | 没有私钥就签不出有效签名 |
| 可验证 | 用公钥就能验证 |
| 不可否认 | 签过的就不能否认(除非私钥泄漏) |
| 完整性保证 | 消息被改动签名即失效 |
A:签名不是加密——这是关键点。签名的目的是「证明身份和完整性」,消息本身仍然明文可见。
签名 vs 加密
| 维度 | 数字签名 | 加密 |
|---|---|---|
| 用谁的密钥 | 自己私钥(签)+ 别人公钥(验) | 别人公钥(加密)+ 自己私钥(解密) |
| 目的 | 证明身份 | 隐藏内容 |
| 消息可见性 | 明文 + 签名 | 密文,需解密才可读 |
| 链上场景 | 交易签名 | 几乎不用 |
A:链上几乎所有「签名」操作都是「数字签名」,不是加密。链上数据全公开可见,签名只是证明某条数据是谁发的。
ECDSA 签名工作流程
签名生成(发送方)
| 步骤 | 操作 |
|---|---|
| 1 | 把要签的消息(如交易内容)做哈希 |
| 2 | 生成一个临时随机数 k |
| 3 | 计算椭圆曲线点 R = k × G,取 R 的 X 坐标作为签名 r |
| 4 | 用私钥 + 哈希 + k 计算签名 s |
| 5 | 输出 (r, s) 作为签名 |
| 6 | 以太坊另加 v(恢复 ID,0/1 或 27/28) |
签名验证(接收方)
| 步骤 | 操作 |
|---|---|
| 1 | 拿到「消息 + 签名 (r, s) + 公钥」三件套 |
| 2 | 把消息做相同哈希 |
| 3 | 用 r、s、公钥做特定椭圆曲线运算 |
| 4 | 算出的「校验点」与 r 比对 |
| 5 | 一致即签名有效 |
A:用户日常看不到这些细节——钱包软件后台自动完成。但理解原理能帮你区分「正常签名请求」和「钓鱼签名请求」。
链上交易签名流程
一笔以太坊交易的签名步骤
| 阶段 | 描述 |
|---|---|
| 1. 钱包构造交易 | from / to / value / data / nonce / gas |
| 2. RLP 序列化 | 把交易字段编码成字节串 |
| 3. Keccak-256 哈希 | 得到 256 位摘要 |
| 4. 私钥签名摘要 | ECDSA 输出 (v, r, s) |
| 5. 把签名加到交易里 | 形成「签名后的交易」 |
| 6. 广播到网络 | 通过 RPC 节点发出 |
| 7. 矿工验证签名 | 通过后才打包进区块 |
每一笔以太坊交易都包含 (v, r, s) 三个字段——这是签名的具体形式。
链上签名的特点
| 特点 | 说明 |
|---|---|
| 自动化 | 钱包软件后台完成 |
| 用户感知 | 弹出"确认交易"窗口 |
| 不可逆 | 签名上链即生效 |
| Gas 必须付 | 签了就要付 Gas,即使交易失败 |
链下签名:DApp 登录与消息验证
A:链下签名不上链、不付 Gas,只用来证明「这个钱包是你的」——常用于 DApp 登录、访问特殊功能。
链下签名典型场景
| 场景 | 描述 |
|---|---|
| Sign-in with Ethereum | DApp 用钱包做无密码登录 |
| OpenSea 上架 NFT | 离线签名授权挂单(不立即上链) |
| 离线订单簿 DEX | 链下匹配 + 链上结算 |
| 投票签名 | DAO 治理投票 |
| 空投领取 | 证明你拥有某地址 |
链下签名 vs 链上签名
| 维度 | 链下签名 | 链上签名 |
|---|---|---|
| 是否上链 | 否 | 是 |
| 是否付 Gas | 否 | 是 |
| 验证方 | 后端服务器或 DApp 前端 | 区块链节点 |
| 用途 | 身份证明、授权 | 转账、合约调用 |
| 风险 | 钓鱼签名授权 | 私钥泄漏 |
A:链下签名也有风险——某些"签名钓鱼"骗局让你签一段看似无害的消息,实际是「授权某合约转走你的资产」的链上指令的离线版本。签名前一定要看清内容。
签名钓鱼的常见套路
套路 1:盲签
A:「盲签」是签一段你看不懂的字节串——多数恶意签名是这种。正规 DApp 签名应该用人类可读格式(EIP-712)——把签名内容用结构化方式展示。
套路 2:Permit 授权钓鱼
EIP-2612 允许用户用「签名」代替「授权交易」给合约——但骗子让你签的可能是「无限授权恶意合约动你的 USDC」——签了就被悄悄转走。
套路 3:seaport / opensea 钓鱼
NFT 市场用离线签名表达「我愿以 X 价格卖这个 NFT」——骗子让你签「以 0 ETH 卖你的 NFT」——一签就丢失。
安全签名的 3 个原则
| 原则 | 说明 |
|---|---|
| 1. 看清内容 | 拒绝盲签,要 EIP-712 结构化展示 |
| 2. 警惕 Permit | 任何"无限额度"授权要警惕 |
| 3. 用专门的"DApp 钱包" | 主钱包不连陌生 DApp |
签名标准的演化
| 标准 | 描述 | 出现时间 |
|---|---|---|
| eth_sign | 最早的以太坊签名,不安全 | 2015 |
| personal_sign | 加上 prefix 的签名 | 2017 |
| EIP-712 | 结构化签名 | 2018 |
| EIP-2612(Permit) | 用签名代替 approve | 2020 |
| EIP-4361(SIWE) | Sign-in with Ethereum | 2022 |
A:EIP-712 之后的签名都比早期签名更安全——结构化展示让用户能看懂签的是什么。老旧的 eth_sign 应被避免——主流钱包现在多数已默认禁用。
不同链的签名算法
| 链 | 签名算法 | 椭圆曲线 |
|---|---|---|
| 比特币 | ECDSA | SECP256k1 |
| 以太坊 | ECDSA | SECP256k1 |
| BNB Chain | ECDSA | SECP256k1 |
| Solana | EdDSA | Ed25519 |
| Cardano | EdDSA | Ed25519 |
| Polkadot | sr25519 | Schnorr |
EVM 链都用 SECP256k1 + ECDSA——所以 EVM 链之间签名格式一致。Solana 用 Ed25519,与 EVM 不互通——这是为什么 Solana 与 EVM 链不能共享私钥。
风险提示
签名(即使链下)= 实际授权。任何"签个名领空投""签名验证账号"的请求都要警惕——可能是把你的资产授权给恶意合约的钓鱼。
签名前务必看清内容——钱包弹出的签名请求里,应该能看到结构化的「to / value / data」字段——盲签 base64 字节串极度危险。
实际操作建议
建议 1:拒绝盲签
A:任何让你签「一串看不懂的字节串」的请求——拒绝。正规 DApp 用 EIP-712 把签名内容人类可读地展示出来。MetaMask 等钱包对盲签会有警告。
建议 2:用专用「DApp 钱包」
把主钱包(放大额)和 DApp 钱包(小额测试)分开——主钱包不连任何 DApp,只在签名转账时用。DApp 钱包资产少,即使签错也损失有限。
建议 3:警惕「免费空投」「签名验证」
A:99% 的"签名验证活动"是钓鱼——正规空投不需要你签任何东西,只需要在合约里 claim。任何"签名验证身份""签名领代币""签名升级"都警惕。
一站式回顾
A:签名 = 用私钥证明消息身份 + ECDSA/Ed25519 + 链上必备。链上签名为转账,链下签名为身份——两者都用同一私钥,但用途和风险点不同。新人入门最重要的是「不盲签 + 看清内容 + DApp 钱包分级」。
理解签名后,下一步是亲手做一笔链上转账,体验签名弹窗。可参考 币安官网 注册账号、用 币安官方App 提币时观察整个签名上链过程。MetaMask 签名细节见相邻站「babianpro.com」。
常见问题
签名安全吗?我每次签名都担心被偷币
A:签名本身完全安全——只要私钥不泄漏,签名只是证明你是私钥持有人,不会暴露私钥。风险点在「签了不该签的内容」——这是为什么要看清签名内容。
签名要付 Gas 吗?
A:链上签名(发起一笔交易)必须付 Gas。链下签名(DApp 登录、NFT 挂单等)不付 Gas——只是离线生成一个签名给后端验证。新人最易混淆的点。
链下签名能不能伪造?
A:伪造不了。没有私钥就签不出有效签名——这是 ECDSA 数学保证的。但「签名钓鱼」是骗你自己签恶意内容,不是伪造你的签名。
我钱包里弹出「签名请求」该怎么看?
A:先看域名是否正确、再看签名内容是否结构化、最后看授权额度。盲签字节串拒绝;EIP-712 结构化能看懂的内容才考虑签。Permit 授权要看额度,无限额度尽量拒绝。
比特币和以太坊的签名能互通吗?
A:算法相同(ECDSA + SECP256k1)但使用方式不同。比特币签名用脚本(Script)格式,以太坊签名用 (v,r,s) 格式——两者底层算法一样,但应用层格式不能直接互通。
一笔交易能不能多人签名?
A:单签交易只有一个签名;多签钱包要多个签名。多签合约(如 Gnosis Safe)能聚合 M-of-N 签名——比如 2/3 多签需要 3 个人中的任意 2 人签字。这是机构和大额持有的常用方案。
我从硬件钱包签名安全吗?
A:最安全的签名方式之一。硬件钱包的私钥永远不离开芯片,签名在芯片内完成——即使电脑被植入木马,木马也拿不到私钥。只能让你签错的内容(社会工程)——所以仍要看清签名内容。
文档发布于 2026-05-08,下次复测计划 2026-08-08(约每 90 天回访一次,确认主流签名标准与钓鱼手法无重大变化)。