mobile wallpaper 1mobile wallpaper 2mobile wallpaper 3mobile wallpaper 4
164 字
1 分钟
关于一次EOA钱包的签名验证及其相关内容
2026-06-10

下文只代表笔者当前的认识#

差不多是对于上一篇文章的理论补充,大概算是把一次签名验证的流程和理论证明理通了,也顺便补了一下群的知识( ::site={url=”https://dreaife.tokyo/evm-wallet-login”\}

预备知识:secp256k1、有限域与椭圆曲线点运算#

因为大量涉及模运算和椭圆曲线的点运算,所以稍微准备了点预备知识(顺便把自己补的内容放上去www。当然如果已经知道的话也可以跳过。

预备知识 Ethereum 钱包签名使用的是 ECDSA,底层曲线是 `secp256k1`。在理解 `r/s/v`、公钥恢复、地址生成之前,需要先理解三个对象: - 有限域 F_p - 椭圆曲线点群 E(F_p) - 基点 G 以及它的阶 n ### 1. secp256k1 的曲线 `secp256k1` 定义在一个有限域 `F_p` 上。它的曲线方程是: $$ y^2 \equiv x^3 + 7 \pmod p $$ 其中: $$ p = 2^{256} - 2^{32} - 977 $$ 也就是说,点的坐标不是普通实数,而是模 `p` 的整数:$`x, y \in \mathbb{F}_p`$ 所以曲线上的点集合是:$`E(\mathbb{F}_p) = \{(x,y) \mid y^2 \equiv x^3 + 7 \pmod p\} \cup \{O\}`$ 这里的 `O` 是无穷远点,可以理解为点加法里的零元。 ### 2. 椭圆曲线上的点加法 椭圆曲线点之间可以定义一种“加法”: $$ P + Q = R $$ 注意,这不是坐标直接相加。也就是说: $$ (x_1, y_1) + (x_2, y_2) \neq (x_1 + x_2, y_1 + y_2) $$ 而是通过椭圆曲线群规则计算出另一个曲线上的点。 设: $$ P = (x_1, y_1), \quad Q = (x_2, y_2) $$ 当 `P != Q` 时,先计算斜率: $$ \lambda \equiv \frac{y_2 - y_1}{x_2 - x_1} \pmod p $$ 这里的除法是模 `p` 下的除法,也就是乘以模逆元。 然后: $$

x_3 \equiv \lambda^2 - x_1 - x_2 \pmod p \y_3 \equiv \lambda(x_1 - x_3) - y_1 \pmod p

$$
得到:
$$
P + Q = (x_3, y_3)
$$
当 `P = Q` 时,叫点倍加:
$$
2P = P + P
$$
tips:需要注意,当前加法同样为椭圆曲线加法,而非标量域加法。
此时斜率为:
$$
\lambda \equiv \frac{3x_1^2}{2y_1} \pmod p
$$
因为 secp256k1 的曲线是:
$$
y^2 = x^3 + 7
$$
没有 `ax` 项,所以这里没有额外的 `a`。
### 3. 标量乘法
标量乘法就是重复点加法:
$$
[k]P = \underbrace{P + P + \cdots + P}_{k \text{ times}}
$$
例如:
$$
[3]P = P + P + P
$$
在钱包里最重要的关系就是:
$$
Q = [d]G
$$
其中:
- d: 私钥,一个标量
- G: secp256k1 规定好的基点
- Q: 公钥,一个曲线点
从私钥 `d` 计算公钥 `Q` 很快,但从公钥 `Q` 反推私钥 `d` 极难。这就是椭圆曲线离散对数问题。
### 4. 基点 G 和阶 n
`G` 是 secp256k1 标准中选定的生成点,也叫基点。它的阶是 `n`,意思是:
$$
[n]G = O
$$
并且:
$$
\langle G \rangle = \{O, G, [2]G, [3]G, \ldots, [n-1]G\}
$$
其中 `n` 是一个接近 `2^256` 的大素数。
对于 secp256k1,有一个重要性质:
$$
h = 1
$$
也就是 cofactor 为 1。因此,由 `G` 生成的阶为 `n` 的循环群就是整条曲线的点群:
$$
\#E(\mathbb{F}_p) = n
$$
### 5. p 和 n 的区别
这里最容易混淆的是 `p` 和 `n`。
`p` 是坐标域大小:
$$
x, y \pmod p
$$
点加法、点倍加里的坐标计算都在 `mod p` 下进行。
`n` 是基点 `G` 的阶:
$$
[n]G = O
$$
私钥、nonce、签名里的 `r/s` 等标量计算都在 `mod n` 下进行。
所以可以这样记:
- 点坐标计算:mod p
- 标量计算:mod n
Ethereum 钱包里的私钥满足:
$$
1 \le d \le n-1
$$
公钥为:
$$
Q = [d]G
$$
签名时的随机数或确定性 nonce `k` 也满足:
$$
1 \le k \le n-1
$$
这套结构就是后续 ECDSA 签名公式、公钥恢复、Ethereum 地址生成的数学基础。
或者也可以看一下我和gemini的对话来补充(有一说一,有了ai,学习速度加速不少 ::site=\{url=”https://gemini.google.com/share/f72d7ecbcf76”\} # 关于一次EOA钱包的签名和验证 如上一次文章内容所述,当发生一次需要EOA钱包进行地址的归属验证的时候,会进行下面的流程: 1. 一个符合SWIE的message被前端发给钱包请求签名 2. 对于这样一个签名请求,当钱包接收到后,会弹出用户同意的提示 3. 当用户确认后,此时开始了钱包的签名流程 - 首先对于SIWE message通过keccak-256来计算出32-byte hash $`e`$ 来用于接下来的计算 - 然后是对于钱包的私钥 $`d`$ 和[secp256k1](https://www.secg.org/sec2-v2.pdf)的有限域 $`p`$ 和它的标准选定的基点 $`G`$ 和 $`G`$ 的阶数 $`n`$ ,钱包通过生成一个\[1,n-1\]范围内的随机数 $`k`$ 来进行接下来的验证计算(这里需要注意因为只有n内的\[1,n-1\]是可用的不重复结果,所以在取点什么的计算的时候选择的是mod n,而整体secp256k1范围计算则是在其本身的规定范围p计算,即mod p - 最终生成的签名实际为$`r/s/v`$这三个计算结果的拼接,分别为32-byte/32-byte/1-byte的内容。对于它们的计算内容: - $`R = kG = (R_{x}, R_{y})`$ - $`r = R_{x} \bmod n`$ - $`s = k^{-1} * (z + r * d) \bmod n`$ - $`v`$ 则是由于对于一个 secp256k1椭圆曲线 $$ y^2 = x^3 + 7 \bmod p $$ 而言,在$`x=R_x`$上的解,除了无穷远点$`0`$以外,还会有两个对于x轴对称的解,$`v`$就是这里通过提供0/1来指定应该选择哪个解的 yParity (当然,对于secp256k1,还有可能存在$`r+n
分享

如果这篇文章对你有帮助,欢迎分享给更多人!

关于一次EOA钱包的签名验证及其相关内容
https://dreaife.tokyo/eoa-sign-verify/
作者
dreaife
发布于
2026-06-10
许可协议
CC BY-NC-SA 4.0

部分信息可能已经过时

相关文章 智能推荐
1
关于EOA钱包在链上的基础操作
WEB3 快速掌握Web3钱包在链上的核心操作。内容涵盖EOA与HD钱包的创建原理、助记词生成与BIP派生流程,深入剖析SIWE和EIP-712链上验证,以及交易构造、签名、广播的完整周期,助你理清钱包底层逻辑。
2
一个对于EOA的EVM钱包登陆界面
WEB3 本篇博客详尽阐述了一个基于前端实现的 EO A(Externally Owned Account)钱包登录界面,包括整体流程、技术选型与实现细节。文章首先介绍了登录的双重交互:先获取用户钱包地址,再通过 SIWE(Sign‑In with Ethereum)协议发送带有 nonce、时间戳等信息的认证消息,要求用户在钱包中签名。随后,作者展示了使用 wagmi 库的关键代码片段——从 connect、useAccount 获取钱包信息,到 useSignMessage 发起签名请求,再通过后端 /api/auth/verify 验证签名的完整实现。文中还简要解释了 EOA 私钥、公钥、地址生成及 ECDSA(secp256k1)签名原理,帮助读者理解安全性背后的数学基础。最后,作者以个人学习体会收尾,强调该项目是其区块链开发的入门实践,为后续更复杂的链上交互奠定了基础。
3
区块链认识
WEB3 区块链是一种由时间顺序链接的区块组成的结构,具有去中心化、不可篡改性、透明性和安全性等核心特性。其工作原理包括交易生成、验证、打包和添加到链上。应用场景涵盖加密货币、供应链管理、金融服务等。面临的挑战包括扩展性、能耗问题和用户教育。区块链的底层逻辑基于分布式账本和共识机制,确保数据的安全与一致性。
4
交易记录
market 最近的交易经历显示出较高的胜率,尤其是在2月3日的做空中实现了显著盈利。尽管有错误判断导致部分收益损失,但整体收益仍为正。当前市场震荡,短期内可能面临二次测试,需谨慎应对。交易策略主要基于K线和交易量,仓位分配为80%低杠杆大趋势交易,10%高杠杆高频交易,剩余资金用于链上操作。为避免情绪化交易,建议在不明判断时选择空仓,稳定现金流后再进行高风险操作。
5
本人在x的一些关于市场认识的总结
market 从复杂系统与博弈论出发,梳理市场运行、情绪反身性与货币价值共识的内在逻辑,帮助读者穿透短期波动,建立对市场预期与通胀传导的深层认知。

目录