164 字
1 分钟
关于一次EOA钱包的签名验证及其相关内容
下文只代表笔者当前的认识
差不多是对于上一篇文章的理论补充,大概算是把一次签名验证的流程和理论证明理通了,也顺便补了一下群的知识( ::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 nEthereum 钱包里的私钥满足:$$1 \le d \le n-1$$公钥为:$$Q = [d]G$$签名时的随机数或确定性 nonce `k` 也满足:$$1 \le k \le n-1$$这套结构就是后续 ECDSA 签名公式、公钥恢复、Ethereum 地址生成的数学基础。 分享
如果这篇文章对你有帮助,欢迎分享给更多人!
关于一次EOA钱包的签名验证及其相关内容
https://dreaife.tokyo/eoa-sign-verify/ 部分信息可能已经过时
相关文章 智能推荐
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 从复杂系统与博弈论出发,梳理市场运行、情绪反身性与货币价值共识的内在逻辑,帮助读者穿透短期波动,建立对市场预期与通胀传导的深层认知。





