首页
/ Ethers.js与Python库在ECDSA签名恢复参数上的差异分析

Ethers.js与Python库在ECDSA签名恢复参数上的差异分析

2025-05-28 00:10:24作者:范靓好Udolf

前言

在区块链开发中,ECDSA(椭圆曲线数字签名算法)签名是保障交易安全性的核心技术之一。不同编程语言的加密库在实现ECDSA签名时可能存在细微差异,本文将深入分析ethers.js与Python库在生成可恢复ECDSA签名时的关键区别。

签名恢复参数的标准规范

在ECDSA签名中,恢复参数(recovery parameter)是一个重要概念,它用于指示签名位于椭圆曲线的哪一半。根据行业标准:

  1. 当恢复参数为0时,使用0x1b表示(即27的十六进制)
  2. 当恢复参数为1时,使用0x1c表示(即28的十六进制)

这种约定源于早期区块链系统的设计,旨在通过不同的前缀来区分各种加密数据类型。类似的约定还包括:

  • 0x020x03表示压缩公钥的不同曲线位置
  • 0x04表示未压缩公钥
  • 0x05表示加密私钥

实际案例对比

通过对比ethers.js和Python代码生成的签名,我们可以观察到:

ethers.js输出示例

0x83e4...edd21c

最后两个字符为1c,符合标准规范。

Python输出示例

83e4...edd201

最后两个字符为01,这是非标准的表示方式。

技术差异解析

Python的coincurve库使用了直接表示恢复参数值的方式:

  • 恢复参数0表示为00
  • 恢复参数1表示为01

这与标准规范存在差异。要使其符合标准,需要进行转换:

Python转换为标准格式

sig[:-2] + ["1b", "1c"][int(sig[-2], 16)]

ethers.js转换为Python格式

sig.substring(0, sig.length - 2) + '0' + String(parseInt(sig.substring(sig.length - 2), 16) - 27)

开发建议

  1. 跨平台兼容性:当需要在不同语言的库间传递签名数据时,务必注意恢复参数的表示差异
  2. 标准优先:建议优先采用标准格式(1b/1c),这是大多数区块链系统预期的格式
  3. 测试验证:在集成不同加密库时,应增加签名验证测试用例,确保数据兼容性

结论

理解ECDSA签名中恢复参数的表示差异对于区块链开发者至关重要。ethers.js遵循了行业标准规范,而部分Python库可能采用更直接的表示方式。开发者应当根据实际应用场景选择合适的转换方法,确保系统间的互操作性。

在实际开发中,建议详细阅读所用加密库的文档,了解其签名格式的具体实现,避免因格式差异导致的安全问题或兼容性问题。

登录后查看全文
热门项目推荐
相关项目推荐

项目优选

收起
kernelkernel
deepin linux kernel
C
23
6
docsdocs
OpenHarmony documentation | OpenHarmony开发者文档
Dockerfile
226
2.28 K
nop-entropynop-entropy
Nop Platform 2.0是基于可逆计算理论实现的采用面向语言编程范式的新一代低代码开发平台,包含基于全新原理从零开始研发的GraphQL引擎、ORM引擎、工作流引擎、报表引擎、规则引擎、批处理引引擎等完整设计。nop-entropy是它的后端部分,采用java语言实现,可选择集成Spring框架或者Quarkus框架。中小企业可以免费商用
Java
9
1
flutter_flutterflutter_flutter
暂无简介
Dart
526
116
RuoYi-Vue3RuoYi-Vue3
🎉 (RuoYi)官方仓库 基于SpringBoot,Spring Security,JWT,Vue3 & Vite、Element Plus 的前后端分离权限管理系统
Vue
989
586
Cangjie-ExamplesCangjie-Examples
本仓将收集和展示高质量的仓颉示例代码,欢迎大家投稿,让全世界看到您的妙趣设计,也让更多人通过您的编码理解和喜爱仓颉语言。
Cangjie
351
1.43 K
leetcodeleetcode
🔥LeetCode solutions in any programming language | 多种编程语言实现 LeetCode、《剑指 Offer(第 2 版)》、《程序员面试金典(第 6 版)》题解
Java
61
17
GLM-4.6GLM-4.6
GLM-4.6在GLM-4.5基础上全面升级:200K超长上下文窗口支持复杂任务,代码性能大幅提升,前端页面生成更优。推理能力增强且支持工具调用,智能体表现更出色,写作风格更贴合人类偏好。八项公开基准测试显示其全面超越GLM-4.5,比肩DeepSeek-V3.1-Terminus等国内外领先模型。【此简介由AI生成】
Jinja
47
0
giteagitea
喝着茶写代码!最易用的自托管一站式代码托管平台,包含Git托管,代码审查,团队协作,软件包和CI/CD。
Go
17
0
ohos_react_nativeohos_react_native
React Native鸿蒙化仓库
JavaScript
214
288